为什么需要防冲突算法
正常情况下,RFID 读写器在某一时刻只能对磁场中的一张电子标签进行读写操作。但当多个电子标签同时进入读写器的射频场时,多张标签会同时应答,信号互相叠加导致读写器无法解析。这时就需要一套规则把标签逐张分离出来——这就是防冲突算法,作用是选出一张唯一的标签供读写器操作,操作完再让这张标签休眠、继续处理下一张。相比之下,接触式智能 IC 卡不存在这个问题,因为它有专属的卡座,物理上就只允许一张卡接入。防冲突机制也因此成为非接触式 RFID 读写器开发中最核心的技术问题之一。目前常见的非接触式智能卡防冲突机制主要有三种:面向比特的防冲突机制、面向时隙的防冲突机制,以及位与时隙相结合的防冲突机制。
面向比特的防冲突机制
ISO14443A 使用这种防冲突机制,原理建立在标签拥有全球唯一序列号的基础之上。以 Mifare1 卡为例,每张卡有一个全球唯一的 32 位二进制序列号,任意两张卡的序列号总有一位取值不同——这一位就是分离它们的突破口。当两张以上标签同时进入射频场时,读写器发出标签呼叫命令,标签同时应答;随后读写器发送防冲突命令,所有标签回送卡号。如果某一位上出现 0 和 1 同时传输的情况,读写器即可检测到冲突。冲突检测依托曼彻斯特码实现——曼彻斯特码在每一位的中间都有电平跳变,跳变缺失就说明该位发生了冲突,这让读写器能精确定位到冲突发生在第几位。
检测到冲突后,读写器筛选卡号特定区段与已确认部分一致的标签继续参与传输,其余标签暂时退出。重复这一过程直至只剩一张标签,该标签回送完整卡号后被选中。面向比特机制有两个值得注意的特征:一是循环次数有上限,最多 32 个循环即可选出标签,也就是说最坏情况下的时间是可控的;二是标签的序列号长度固定,这在提高识别效率的同时,也限制了同一类型标签的可生产数量——因为可用序列号的总量由位数决定。
面向时隙的防冲突机制
ISO14443B 使用面向时隙的防冲突机制。这里所说的时隙,是读写器指定范围的一组序号,例如 1-1、1-2 等等。多张标签进入射频场后,各自随机选取一个临时识别号;读写器逐一号叫这些时隙,只有一张标签应答时该标签被选中,如果出现无应答或多张应答的情况则继续下一个时隙,一轮下来仍未选出则让标签重新选号再试。这种方式的优点是对标签号唯一性没有要求,因此标签产量不受序列号位数限制;代价是它基于随机选择,理论上存在"始终选不出"的可能——只是概率极低,实际系统中通常通过重试机制兜底。
位与时隙结合的防冲突机制
ISO15693 使用位与时隙相结合的机制,可以理解为前两种思路的融合。ISO15693 标签拥有 8 字节的全球唯一序列号,读写器做防冲突时以序列号的一部分作为时隙来叫号,时隙范围可以是 0-1 或 0-15 等不同粒度。具体流程是:多张卡进入射频场后,读写器发出清点请求,落在指定时隙的卡片回送序列号;如果该时隙内无冲突则直接登记这张卡,如果发生冲突则缩小范围,依次以不同位数的序列号作为时隙继续巡检。由于卡号本身具有唯一性,这个逐步收窄的过程最终总能选出卡片。需要说明的是,当时隙数为 1 时,这种机制等价于面向比特的防冲突机制——这也是三种机制之间内在联系的体现。
三种机制的对比
把三种机制并列起来看,差异主要落在四个方面。对应协议上,面向比特对应 ISO14443A,面向时隙对应 ISO14443B,位与时隙结合对应 ISO15693。分离依据上,前两者分别依赖序列号唯一性与随机临时号,第三种则把序列号切分后当作时隙使用。结果确定性上,面向比特与位时隙结合都依托唯一的序列号,理论上必定能选出卡片;面向时隙依赖随机选号,存在极小概率选不出的情况,需要重试兜底。对标签生产的影响上,面向比特要求序列号唯一且长度固定,因此同类型标签的产量受位数限制;面向时隙不要求序列号唯一,产量不受此约束。这三点差异正是不同协议适用场景不同的技术根源——需要严格唯一标识的场合(如身份凭证)多选前两类思路,而批量商品标签更看重产量与成本,面向时隙的设计更为友好。
小结
三种防冲突机制解决的是同一个问题——多张标签同时应答时如何分离出唯一一张,但走了三条不同的路径:面向比特靠全球唯一序列号逐位筛选,确定性最好;面向时隙靠标签随机选号、读写器逐号叫,对标签序列号没有要求;位与时隙结合把序列号切分当作用时隙,粒度可调,时隙为 1 时退化为面向比特。理解它们的差异,不仅能解释不同协议为何适用不同场景,也能在遇到读不全、响应慢等问题时,判断是该调整算法参数、增加重试,还是根本选错了协议体系。