ISO/IEC 14443A 协议学习笔记(三层)

ISO/IEC 14443A (3)

一层描述了物理特性
二层描述了能量场和接口规定
三层描述了卡的初始化帧格式和防冲突
四层描述了通信交互流程和数据传输


叠甲:有错之处,还望各位大佬海涵指点

1. Polling(PCD对PICC的轮询检测)

PICC卡有A、B两种,但是对应协议的PCD需要同时支持两种卡;在PCD工作的闲时,需要轮续检测A、B卡,周期性的发送REQ(REQuest command, Type A)和REQB(REQuest command, Type B);
为了确保A、B卡接收到REQ指令,REQ的指令长度至少要大于5ms(实际卡的相应可能更快),意味着,轮询应当以大于5ms(5.1ms)为间隔切换REQA/REQB ;

实际应用中,PCD可以兼容多种技术,轮询需要对所支持的所有技术发送询卡指令。在其中一种被检测到后,PCD应该继续轮询其他技术,完成完整的轮询周期。


2 通信帧格式:

  1. PCD->PICC:【SOF】+n*【DATA+P】+【CRC_A+P】+【EOF】
    image
    1.1 SOF为起字节、EOF为结束字节、
    1.2 P为奇偶校验码,出了SOF和EOF,每8比特数据后紧跟1bit奇偶校验位
    1.3 CRC_A为两字节校验码(无纠错能力),每个CRC字节后面同样跟随就校验位P
    1.4 上述格式为标准帧格式,PCD发送的指令还有短帧格式,为【SOF】+【7bit】+【EOF】
    1.5 短帧只用于唤醒指令REQA和WUPA
    image

  2. PICC->PCD:【SOF】+n*【DATA+P】+【CRC_A+P】
    2.1 PICC帧格式中没有结束字节
    2.2 PICC没有短帧应答格式

  3. DFT(PCD to PICC)

    延迟时间根据上一个通信帧末是0/1有关,具体计算如下:(来自中金IC卡规范第十一部分)
    image

    其中n的值与指令有关,除却WUPA、ANTICOLLISION、SELECT这三个指令限定n=9之外,其他指令为n≥9;实际设计中,还如bit_rate有关,上面这个是Type_A, bit_rate=128/fc的情况。(看了也记不住,不写了,用的时候再查表)。

    FDT的误差范围是从-0到t4,t4是PICC应检测到PCD传送的最后一个低电平结束的时间周期,取值范围是0-0.44us(即,最后一个低电平上拉到高需要一定的延迟时间)。相应的,PCD应该在(FDT+1/fc)到(FDT+1/fc+0.44)

    image

  4. DFT(PICC to PCD)
    在PICC返回信息后,状态机保持在active状态等待PCD的返回。这个过程中FDT没有明显的要求,只对最小值做了要求为1172/fc。

标签状态转移与指令关系


3 防冲突帧格式

  • 防冲突过程

防冲突选卡过程,主要涉及SEL和NVB两个指令,依据卡片级联多少不同指令内容不同。SEL为级联选择,93h=CL1,95h=CL2,97h=CL3。标签卡UID级联最高三级,每多一级意味着UID多4个字节。如果是二级级联或者三级级联,除开最后一级级联,其一级(与二级)级联UID的首个字节固定为CT=88h。如下图所示:

image

完成标签唤醒后,标签变回进入选卡防冲突选卡流程。PCD先对场内的所有标签发送UID防冲突指令(SEL+NVB)。先从一级级联开始,PCD先发送SEL=93h,NVB=20h。【NVB字节用于指示PCD在防冲突选卡过程中发送的有效信息数量,高四位指示有效字节数,第四位为比特数。最开始选卡时为20h,意味着只有SEL和NVB两个有效字节】

如果场内存在多个标签卡(PICC),则会同时调制射频载波进行信号返回。如果UID不同,则会在某个UID位置出现射频场载波受到的调制不一,也就是PCD接受的信息出现了冲突。以下为例,假定冲突位在CL1的第四个字节,此时PCD会终止接受后面的信息,然后进入防冲突选卡阶段。

选卡,即选择冲突位置UID=1/0的卡继续通信(一般在PCD设计的时候约定好,多数为1)。根据设定,选择冲突位为1的卡继续通信,那么PCD会发送的所有内容为 SEL=93h,NVB=24h +【0001】(防冲突有特定的帧格式,在后面讲)。此时NVB意有效数据有2个完整字节SEL+NVB和4个比特0001(被选择的UID)。PICC接收到防冲突选卡指令后,比对此时选择的UID与自己前面的几个是否一致,一致则继续发送剩余(将设为00010101,则只返回0101)的UID,如果不一致则进入沉寂状态。

循环以上过程,知道CL1冲突位。此时PCD会发送SEL=93h,NVB=70h,标识此次通信所选卡的一级级联UID的所有。NVB=70h,7个字节分别为SEL、NVB、UID0、UID1、UID2、UID3和BCC。如果存在多级级联UID,则继续发送,只是把SEL换成95h和97h,其他流程一致。

image

  • 防冲突帧格式
    分为无冲突的Full Byte:
    image

冲突在字节内Spilt Byte:
image
注意这里,PICC应答的时,8bit后的P依旧要输出。显示为X是因为,它是凑数的,PCD会自动忽略撕裂字节中PICC应答的第一个奇偶校验位。


4. CRC校验

16x+12x+5x+1,seed=6363h,得到的CRC结果不翻转,兼容ISO 13239协议。标签的ATQA和ANTICOLLSION应答没有CRC。


5. STATE

协议设定的指令有:

  1. WUPA——短帧,用于从HALT中唤醒卡;PICC应答ATQA;
    image
  2. REQA——短帧,用于从IDLE中唤醒卡;PICC应答ATQA;
  3. 防冲突选卡实则分为防冲突ANTICOLLISON(NVB为非70h),选卡SELECT(NVB=70h)。针对ANTI指令,PICC应答相应CLn的UID数值。对于SELECT,PICC应答SAK。
  4. HLTA指令,直接转入HLAT状态,不应答
  5. READ就输出数据;WRITE成功应答ACK,不成功应答NAK
    状态转移图如下(这里看中金协议清晰些):
    image
    需要注意:
    1.IDLE状态下,接收到TYPB的指令,继续保持IDLE,等待下一个WUPA指令并返回ATQA
    2.PROTOCOL状态不是每个TYPEA应答器都有的
posted @ 2024-08-29 20:46  wellew  阅读(299)  评论(0)    收藏  举报