摘要:文中给出了采用TI公司最新的射频收发器芯片RI-R6C-001A,并结合微处理器设计ISO/IEC15693读卡器的具体方法,同时介绍了RI-R6C-001A的通信协议和ISO/IEC15693标准。
关键词:IC卡;射频识别;ISO15693;读卡器 1 概述 IC卡的发展经历了从存储卡到智能卡、从接触式卡到非接触式卡、以及从近距离到远距离的过程。对于接触卡(ISO/IEC7816标准定义),读卡机必须和卡的触点接触才能与卡进行信息交换,因此存在磨损严重、易受污染、寿命短、操作费时等缺点。为解决上述问题,人们开始采用非接触式卡技术。 非接触式卡又称射频卡或感应卡。它采用无线电调制方式和读卡机进行信息交换。射频识别?RFID?技术是从九十年代兴起的一项自动识别技术。它利用无线射频方式进行非接触双向通信,以达到识别目的并可进行数据交换。 目前ISO/IEC10536定义的卡称为密耦合卡;ISO/IEC 14443定义的卡则是近耦合卡(PICC),对应的读卡机简写为PCD;而ISO/IEC15693对应的卡是遥耦合卡(VICC),对应的读卡机简写为VCD。VICC比PICC具有更远的读卡距离(为1m左右),二者均采用13.56MHz工作频率,并都具有防冲突机制。 图1所示是一个射频读写系统的工作原理图,它主要由ASIC和VICC两部分组成。 2.1 ASIC电路的工作原理 对于图1所示的射频读写系统,ISO/IEC 15693-2所规定的VCD与VICC通信物理层协议全部可由ASIC芯片RI-R6C001来实现,用户通过同步串行接口(SPI),并遵照ASCI的通信要求就可实现VICC的读写操作。MCU和ASIC的通信接口有三根线:SCLOCK、DIN、DOUT,分别代表时钟线、数据输入线、数据输出线。时钟线是双向的,发送数据时由MCU控制,接收数据时则由ASIC控制, ASIC在时钟的上升沿锁存数据。DOUT除了具有在接收数据期间的数据输出功能外,还有表征ASIC内部FIFO的功能。DOUT带有内部下拉,平时为低电平。输入数据过程中,当ASIC的16位FIFO寄存器满时,DOUT线会自动跳变为高电平,直到FIFO寄存器为空,DOUT线又会跳变为低电平。在DOUT为高电平期间,输入数据无效。除了通信线外,系统还有一条M_ERR线,用于在同时读多张卡的时候表征数据的冲突情况。同样,M_ERR线也有内部下拉,平时为低电平,冲突时此线会升为高电平。 对ASIC的操作有三种模式:普通模式、寄存器模式和直接模式。直接模式下,MCU要直接面向射频信号处理,比较复杂,所以此种模式一般不用。普通模式和寄存器模式均为标准的数字信号操作,其区别在于规定芯片操作的一些参数不同(例如规定所采用的射频协议、调制方式及传输速率是在命令序列中规定,还是由寄存器来设定的)。普通模式每条指令均含有该指令使用的参数,而寄存器模式指令序列中并不含这些参数,而是由预先写入的寄存器中的数值来决定。若使RI-R6C-001A芯片正常工作,ASIC上电后必须首先初始化时间寄存器。 VICC-Tag-it应答器完全兼容于ISO/IEC15693标准协议。VICC-Tag-it应答器内有国际统一且不重复的8字节(64bit)唯一识别内码(Unique identifier,简称UID)。图2是UID唯一识别内码的格式示意图,其中第1~48bit共6字节为生产厂商的产品编码;第49~56bit的1个字节为厂商代码(ISO/IEC7816-6/AM1),最高字节固定为“EO”;8位AFI(应用识别号)和8位DSFID(数据存储格式)用来对卡和特定应用的特征进行标识。卡内有2kbit EEPROM,分成64个块,每块32个bit。每个块均可以锁定,以保护数据不被修改。AFI、DSFID和32个块均可读可写,用以存储用户数据。VICC-Tag-it采用13.56MHz的载波频率,工作于“READER TALKS FIRST”模式,即一问一答的模式。卡内有防冲突机制,可以同时读取多张卡而不会造成冲突。特别应当指出:VICC-Tag-it内没有逻辑加密电路,无法实现密码功能,也正是这一点限制了VICC-Tag-it在其它保密性要求较高领域的应用。 发给ASIC的命令序列必须符合ASIC通信协议和ISO/IEC15693-3规范。 3.1 命令结构 图3所示是该系统的命令序列时序图。在普通模式下,该系统的命令序列结构如下:
起始位(S1):收发器和微处理器之间的通信开始位,当SCLOCK位保持高电平时,将在DIN产生一个上升沿(参见图3)。 命令字节:用于规定ASIC与VICC通讯时的有关参数。如果该端为30H则表示该系统支持的射频协议是ISO15693(256选1),采用FM调制方式,调制率10%,返回数据波特率为6.67kb/s。注意:命令字节的发送顺序是高位在先,即:MSB FIRST。 数据:数据域内容由15693-3规定?这个数据一般发送到TAG。 结束位(ES1):收发器和微处理器之间的通信结束位,当SCLOCK位保持高电平时,将在DIN产生一个下降沿(见图3)。 通常在寄存器模式下,命令字节是1位,且该位为1。 ISO15693-3命令的一般格式如下:
在ISO15693命令序列中,FLAGS用于规定命令内容中某些可选域的存在。由于S1和ES1在ASIC命令序列中已经存在,所以只须把ISO15693命令序列中FLAGS、命令序号、命令内容、CRC16等域的内容取出并填入ASIC序列中的数据域然后打包即可。数据域的发送顺序为低位在先,即:LSB FIRST。 3.2 响应结构 图4所示是VICC的响应时序。VICC响应的一般格式是:
其中起始位S2用于表示VICC响应数据的开始,其定义是当SCLOCK为高电平时,DOUT产生一个上升沿(参见图4)。而结束位ES2则表示VICC响应数据的结束。它被定义为当SCLOCK为高电平时,DOUT产生一个下降沿(如图4)。 考虑到命令字节(8位)发送的顺序是MSB FIRST,其它数据均是LSB FIRST;而且“S1 01111011 00000001 11000ES1”是时间寄存器的初始化序列;同时,在命令发送过程中,双向时钟SCLOCK线由MCU控制,因此,在接收VICC响应之前必须进行时钟线的切换,以将控制权交由ASIC控制。对于FIFO管理,发送每一位时都要检测DOUT的电平,DOUT为高时停止发送,直到DOUT恢复到低电平为止。发送命令字节后,应适当延时,以利于ASIC正确动作,同时应考虑电路的抗干扰能力。对于ISO15693-3规定的FLAGS、命令序列号、命令内容等字节,还应进行CRC16校验。关于反碰撞问题,可采用“二进制搜索”算法并选用曼彻斯特编码。为实现这种算法,需要一组命令并由应答器处理,同时应答器要拥有唯一的序列号(UID),例如磁场中有两张卡,其UID分别是:“E00700000234D1E1”和“E00700000234D2D8”,那么,用命令来查询当前磁场范围内卡的卡号,就能很好的解决碰撞问题。 |