毫无疑问,当NFC终端越来越普及,逐渐成为智能手机标配功能后,我们终将迎来NFC的火爆。国内NFC应用最为广泛的将是TypeA,如Mifare、NFC Tag、移动支付等,所以接下来将主要研究TypeA相关的协议细节。

ISO14443分为4部分,硬件主要了解前两部分,软件和应用开发则需要了解后两部分ISO14443-3和ISO14443-4。

ISO14443-1定义了IC卡的物理特性。

ISO14443-2定义了频率、射频能量、编码等内容。

ISO14443-3定义了TypeA/TypeB的初始化和防冲突机制。其中Mifare 1就只到这一层

ISO14443-4定义了卡片的数据传输协议

第1部分关于物理特性,内容很少,过一下即可。

第2部分定义了NFC的频率为13.56MHz±7KHz,定义了最大和最小的能量场的范围值,以及TypeA、TypeB的调制方式。见下图,

致终将火爆的NFC——ISO14443 TypeA-LMLPHP

对比可以看见TypeA的PCD采用了100%的调制方式,而TypeB则采用了10%的调制方式,TypeA能量传送并不均匀,而TypeB采用的10%ASK方式对于射频卡来说可以获得更稳定的能量供给。

再看一下TypeA对信号的要求。

致终将火爆的NFC——ISO14443 TypeA-LMLPHP

他通过一个2-3us的通信间隙来传递数据,这也意味着PICC在这个时间间隙中无法得到PCD的能量,只能靠卡片内部电容放电来维持内部逻辑电路的工作。

1、PCD to PICC即读卡器到卡,TypeA的PCD采用改进的米勒(Modified Miller)编码,通信速率为106Kbps(13.56MHz/128),码元周期为9.4us,调制深度为100%,ASK方式。

首先有以下序列定义:

X序列

从码元的中心位置开始调制2-3us

Y序列

整个码元周期内不进行调制

Z序列

在码元始起处调制载波2-3us

然后根据上述序列,进行以下编码:

开始位

序列Z

结束位

逻辑0后接着一个序列Y

逻辑0

若前一个码远是X序列则输出Y序列,否则输出Z序列

逻辑1

序列X

无信息

至少2个Y序列

致终将火爆的NFC——ISO14443 TypeA-LMLPHP

PCD to PICC sample (0x26)

2、PICC to PCD即射频卡到读卡器,TypeA的PICC采用曼切斯特(Manchester)编码,通信速率也为106Kbps,调制深度为10%,ASK方式。射频卡到读卡器的信号并非由基带信号直接调制载波信号,而是由848KHz的副载波信号对载波信号进行调制。编码定义如下:

起始位

在码元的前半周期,用副载波对载波进行调制

结束位

在整个码元周期内不使用副载波调制

逻辑0

在码元的后半周期,使用副载波对载波进行调制

逻辑1

在码元的前半制期,用副载波对载波进行调制

致终将火爆的NFC——ISO14443 TypeA-LMLPHP

PICC to PCD sample (0x0400)

TypeA使用了半双工通信,通过电磁场传递能量及数据。PCD和PICC通过数据帧交换数据。帧理解为数据流,TypeA分为标准帧和短帧

短帧用于通信初始化,只具有开始位、7位数据位、结束位。数据部分LSB先发送。

标准帧用于普通的数据交换,每帧包括开始位、字节数据、校验位……结束位。而每字节数据则包含了8位数据,校验位。数据部分LSB先发送。

应用中可能有当多张卡同时放置于PCD上,这时会产生冲突问题。在TypeA中设计了防冲突机制来解决,A卡使用了比特碰撞检测,速度较快。

首先PCD发送REQA(26h),接着放置于PCD能量场中的所有PICC将同步发出ATQA应答,接着,双方进入防冲突循环,PCD利用ANTICOLLISION和SELECT命令进行防冲突循环。

根据上一文章的TypeA PICC编码知道,逻辑1是在码元的前半周期进行调制,而逻辑0是在码元的后半周期进行调制。

如有多张卡片其ID并不相同,则会在某一位产生冲突,具体现象是某一位的前后周期都被调制。而PCD将识别出这个冲突位置,根据这个值设定NVB,然后进行SELECT,如果这个NVB条件下仍有多张卡,将再次产生冲突,此时进行上述循环,直到不再冲突,然后选择出最后的卡。

如下图,可看到Start位之后出现了连续的调制,而正常数据应该只有前半周期或后半周期调制,所以PCD此时可判断出来比特位冲突。

致终将火爆的NFC——ISO14443 TypeA-LMLPHP

下图是ISO14443中的冲突、选卡实例:

致终将火爆的NFC——ISO14443 TypeA-LMLPHP

PICC分为IDLE、READY、ACTIVE、HALT几个状态。当PICC靠近PCD并从PCD能量场中获得能量后即进入IDLE状态,此时卡片可以通过REQA和WUPA命令进入READY状态;READY状态的卡片接受PCD的防冲突选卡,一旦选卡成功,卡片进入ACTIVE状态;ACTIVE状态可进行ISO14443-4的操作;在ACTIVE状态下,PCD发HLTA命令可让卡片进入HALT状态,此时需要重新WUPA后才能重新选卡。

有了HALT命令,当几个PICC放置在PCD之上时,可以在用户不移动卡片的条件下,由PCD轮流选择卡片使用。

05-11 16:09