Mifare芯片是什么:ISO14443A的代名词
Mifare 卡是 NXP 公司生产的 ISO14443A 标准的 RFID 芯片卡,涵盖 Mifare S50、Mifare S70、Mifare UltraLight、Mifare Pro、Mifare Desfire 等型号。由于 Mifare 的巨大影响力,业内有时把其他公司生产的、同样遵守 ISO14443A 标准的射频卡也称做"Mifare",尤其是 Mifare S50,几乎就是 ISO14443A 标准的代言人。在业界习惯的划分中,芯片按功能档次被简称为 MF0 到 MF3:Mifare UltraLight 称为 MF0,Mifare S50 与 S70 称为 MF1,Mifare Pro 称为 MF2,Mifare Desfire 称为 MF3。理解这套命名,有助于在看标签规格书时快速判断芯片档次。
门禁卡、工牌、公交卡、食堂消费卡这些日常最熟悉的非接触卡片,绝大多数都建立在这套标准之上。对集成商而言,"符合 ISO14443A"并不只是一句兼容性声明,它意味着一整套具体到比特的通信流程——从卡片进入磁场到被选中,每一步都有明确规定,任何一步偏离都可能导致读卡失败。下面把这些共同特征逐条讲清。
所有Mifare芯片的共同特征
物理层:13.56MHz、无源、最大10cm
所有 Mifare 系列芯片都是接近卡(PICC,Proximity ICC),读写距离最大 10cm;射频频率为 13.56MHz±7KHz;卡片无源免接触,能量完全由读写器产生的射频场提供。读写器产生的射频场磁场强度规定在 1.5A/m 到 7.5A/m 之间,卡片在这个场强区间内可以连续正常工作——低于下限无法得电,高于上限则可能造成器件应力问题。这个 10cm 的距离上限是 PICC 这一类别定义的一部分,凡是声称 ISO14443A 却能读一米的产品,实际上已经超出了该标准的适用形态。
通信方式:RTF模式与调制编码
卡片进入读写器射频场后得电完成初始化,之后等待读写器的命令。读写器与卡片的数据交流总是采用 RTF(Reader Talk First)模式:读写器先发出命令,卡片在规定时间内对命令作出应答;如果读写器没有命令,卡片无论如何也不能先发言。这种主从关系避免了卡片的无序发送。调制方式上,读写器向卡片发送命令使用 100% ASK 调制的修正米勒(Modified Miller)码,卡片应答时使用副载波调制的曼彻斯特(Manchester)码。
数据速率:106Kbps的由来
卡片与读写器之间的通信速率有四种:106Kbps、212Kbps、424Kbps 与 847Kbps。但在读卡选择命令(含)之前,通信速率只能是 106Kbps;读卡选择之后,卡片与读写器才可以协商使用更高的速率。106Kbps 的来源是载波频率 13.56MHz 除以 128,通俗说法就是"载波 128 分频"。这一约定意味着:防冲突阶段必须在低速下进行,只有确认了唯一一张卡之后才能提速,这是标准为保证多卡环境下的可靠性所做的设计。
卡片的状态机:从断电到休眠
Mifare 卡片的状态流转是理解读写流程的骨架。卡片未进入射频场时称为断电(Power-Off)状态;进入射频场得电复位后进入休闲(Idle)状态;收到读写器的呼叫命令后进入准备(Ready)状态;经过防冲突循环被选中后进入激活(Active)状态;在激活状态收到休眠命令或不认识的命令后进入休眠(Halt)状态。这五个状态对应着读写器可以使用的不同命令集合——例如面向休闲状态和面向休眠状态的呼叫命令就不同,理解状态机才能理解为什么读卡流程必须按顺序走。
这些卡片都有一个全球唯一的序列号,序列号长度可能是 4 字节、7 字节或 10 字节。当多张卡片同时进入同一射频场时,卡片们遵守面向比特的防冲突机制,由读写器选出唯一一张进行操作;操作完一张后,读写器可以发送休眠命令让这张卡进入休眠状态,再继续对其他卡片操作。这正是"一次磁场里放多张卡仍能逐张读全"的机制来源。
防冲突与卡选择:多卡并存的解决机制
ATQA:卡类型说法的由来与不严谨之处
从卡片进入磁场到卡片被选中要经过两步,第一步是读写器呼叫磁场内的卡片、卡片作出应答。由于磁场内既有刚进入并处于休闲状态的卡片,也有已被操作过、进入休眠状态的卡片,读写器使用两种不同的命令进行呼叫:卡请求(REQA,0x26)与卡唤醒(WAKE-UP,0x52)。其中卡请求只能呼叫处于休闲状态的卡片,卡唤醒则能呼叫所有卡片,包括休眠与休闲状态。收到呼叫后,卡片返回"对请求的应答"(ATQA),告知读写器自己是否遵守面向比特的防冲突机制。ATQA 为两个字节:第一个字节的值未作规定;第二个字节的高两位 b7b6 表示卡序列号长度(00 表示 4 字节,01 表示 7 字节,10 表示 10 字节),b5 位未作规定,b4 到 b0 表示是否遵守面向比特的防冲突机制——若遵守,这五位中有且仅有一位为 1。
常见取值为:Mifare S50 的 ATQA 是 0004H,Mifare S70 是 0002H,Mifare UltraLight 是 0044H,Mifare Light 是 0010H,Mifare Desfire 是 0344H。业内习惯把 ATQA 直接称作"卡类型",说"Mifare S50 的卡类型是 0004H",这种说法其实并不严谨。已经出现了 ATQA 为 0044H 和 0344H 的卡片,但它们并不是 Mifare UltraLight 和 Mifare Desfire,而是一种新的 7 字节 Mifare S50。原因在于 ISO14443A 规定 ATQA 的作用,只是让卡片表明自己是否遵守面向比特的防冲突机制以及自身卡序列号的长度,并不用于表示芯片型号。这一点在写底层读卡程序时尤其关键——用 ATQA 判断卡型会导致误判,正确做法是走完防冲突流程、通过 SAK 与后续命令集来区分。
面向比特的防冲突机制
防冲突与卡选择之所以常被放在一起讲,是因为二者的命令码相同,区别只在于命令码后面包含多少位已经确认的卡序列号。面向比特的防冲突机制中,每个防冲突循环需要 32bit 卡号参加:读写器向所有参与防冲突的卡片发出防冲突命令码,并告知已确认了多少位卡序列号,让前面部分与已确认序列号相同的卡片作出应答。如果已确认的卡序列号小于 32 位,就是防冲突命令,卡片回送除已确认部分之外的剩余卡序列号;如果已确认的卡序列号等于 32 位,就是卡选择命令,被选中的卡片返回"选择应答"(SAK)。两者还有一个区别:卡选择命令带 CRC_A 校验,而防冲突命令不带。
多字节卡号的层次选择
卡号长度不同,需要的防冲突层数也不同。卡号为 4 个字节时,防冲突选择的命令码是 0x93。卡号为 7 个字节时,要进行两个层次(cascade level)的选择:第一层命令码 0x93,卡号前 3 个字节参加;第二层命令码 0x95,卡号后 4 个字节参加。卡号为 10 个字节时,要进行三个层次的选择:第一层命令码 0x93,卡号前 3 个字节参加;第二层命令码 0x95,第 4、5、6 个字节参加;第三层命令码 0x97,后 4 个字节参加。每一层的防冲突选择循环如果卡片被选中,卡片都要返回 SAK,告知读写器是否需要进入下一层防冲突循环以及是否遵守 ISO14443-4。
这里容易出现一处看似矛盾的地方:前面说每个防冲突循环需要 32bit 卡号参加,后面又说可以 3 个字节(24bit)参加。实际上并不矛盾——为了凑够 32bit,如果只有 3 个字节卡号参加防冲突循环,卡片会自动在这 3 个字节之前增加一个字节 0x88,这个 0x88 被称为层标签(cascade tag),从而满足防冲突循环对 32bit 的要求。理解这一点,在解析读卡器返回的原始卡号数据时就不会把 0x88 误当成卡号的一部分。
卡选择之后:共同点到此为止
以上就是"共同遵守 ISO14443A"的完整含义,也是所有 Mifare 系列芯片在卡选择(含)之前的操作步骤完全一致的原因。卡选择之后各方就分道扬镳:有的继续遵守 ISO14443-4 传输协议,有的开始验证密码,有的则可以直接进入读写操作;同样需要验证密码的型号,验证方式也可能不同。这也是为什么很多读卡程序在防冲突阶段可以通用,一到具体读写命令就必须按芯片型号分别处理。上海营信信息在涉及 IC 卡读写的项目中,通常会把"读卡器固件是否支持目标芯片的后续命令集"作为一项独立确认内容,而不只看它是否声明支持 ISO14443A。
小结
ISO14443A 的"共同遵守",具体指从卡片进入磁场到卡片被选中这一段流程完全一致:13.56MHz 无源取能、RTF 主从通信、防冲突阶段固定 106Kbps、五状态流转、以及基于 ATQA 呼叫、面向比特防冲突、按卡号长度分层选择、返回 SAK 的完整链路。卡选择之后则由各芯片型号自行定义,密码验证方式与后续命令集都可能不同。把握这条分界线,既能理解为什么不同型号的卡可以共用同一套防冲突逻辑,也能明白为什么具体读写命令必须按型号分别处理。