学海荡舟手机网

主页 > 实用文摘 > 教育文摘_07 > > 详细内容

基于S6700芯片与ISO/IEC15693标准的读卡器设计_单片机论文

摘要:采用ti公司最新的多协议收发器芯片s6700,结合mcu设计了iso/iec15693读卡器,介绍s6700通信协议和iso/iec15693标准,给出部分子程序。s6700和mcu的接口非常简单。

    关键词:ic卡 rfid iso/iec15693 读卡器

1 综述

自从20世纪70年代ic卡诞生以来,在飞速发展的微电子技术的带动下,ic卡已经深入到社会生活的各个角落,各种各样的卡大大方便了人们的生活:银行的食堂卡、信用卡,公交车使用的交通卡,就餐使用的食堂卡,出入管理使用的考勤卡,打电话使用的付费电话卡,手机中使用的sim卡等等。

ic卡又称为集成电路卡。卡片内封装有集成电路,用以存储和处理数据。ic卡的发展经历了从存储卡到智能卡,从接触式卡到非接触式卡,从近距离到远距离的过程。iso/iec7816标准定义的卡是接触卡,读卡机具必须和卡的触点接触才能和和卡进行信息交换,所以磨损严重,容易受污染,使用寿命低,操作速度慢。为此,非接触式卡技术迎刃而生。非接触式卡又称射频卡、感应卡,采用无线电调制方式和读卡机具进行交换。iso/iec10536定义的卡称为密耦合卡;iso/iec 14443定义的卡是近耦合卡(picc),对应读卡机具简写为pcd;iso/iec15693对应的卡是遥耦合卡(vicc),对应的读卡机具简写为vcd。vicc比picc具有更远的读卡距离,二者均采用13.56mhz工作频率,均具有防冲突机制。

图1所示的框图简单表示了射频卡读写系统的工作原理。

2 硬件设计

2.1 s6700芯片

s6700芯片是ti公司最新开发的针对ic卡读写的多协议收发器。它提供给用户数字接口,所以应用非常方便。asic能够支持的协议包括:ti tagit协议、iso/iec 15693-2、iso/iec 14443-2(type a)等。s6700采用ssop20封装,+5v供电,内部封装有发送调制器和接收解调器,采和曼彻斯特编码方式,典型发送功率200mw,其esd保护符合milstd-883标准,有idle、power down、full power三种电源管理功能。

笔者利用该asic结合mcu完整的实现了iso/iec 15693-3所规定的对vicc操作上层协议。

iso/iec 15693-2所规定的vcd与vicc通信层协议全部由asic实现,用户通过同步串行接口(spi)遵照asci的通信求和asic打交道就可以实现vicc的读写操作。mcu和asic的通信接口有三根线:sclock、din、dout,分别代表时钟线、数据输入线、数据输出线。时钟线是双向的,发送数据时由mcu控制,接收数据时由asic控制,在时钟的上升沿asic锁存数据。dout除了在接收数据期间的数据输出功能外,还用来表征asic内部fifo的情况。dout内部下拉,平时为低电平。输入数据过程中,当asic的16位fifo寄存器满时,dout线会自动跳变为高电平,直到fifo寄存器空出,dout线又会跳变为低电平。在dout为高电平期间,输入数据无效。除了通信线外,m_err线用来在同时读多张卡的时候表征数据的冲突情况。同样,m_rr线内部下拉,平时为低电平,冲突时此线会升为高电平。

图2 

    所设计的应用电路如图2所示。图2中包括三个部分:asic典型应用电路、与mcu接口电路和天线电路。r2、l1、c5、c6组成串联谐振电路,匹配阻抗50Ω,可调电容c6用来准确调整电路谐振点在13.56mhz。如果认为asic 200mw输出功率不足,也可以再加一级功放电路,以提高读写距离。

对asic的操作有三种模式:普通模式、寄存器模式和直接模式。直接模式下,mcu要直接面向处理射频信号,比较复杂,所以此种模式一般不用。普通模式和寄存器模式操作的均是标准的数字信号,其不同在于规定芯片操作的一些参数,例如:所采用的射频协议、调制方式及传输速率是由命令序列中规定的还是由寄存器所设定的。普通模式每条指令均含有该指令使用的参数,而寄存器模式指令序列中并不含这些参数,而是由预先写入的寄存器中的数值所决定。注意,asic上电后必须首先初始化时间寄存器,芯片才能正常工作。

2.2 vicc——tag-it hf-1应答器

tag-it是ti公司为其最新开发的rfid transponder(应答器)的注册商标,是一个产品系列。tag-it完全和iso/iec15693兼容,是vicc的一种。按ti的设想,tag-it主要应用在智能标签领域内,例如:特快专递、航空行李管理,电子门票等等。

tag-it内有64位的uid(卡号)和8位的afi(应用识别号)、8位的dsfid(数据存储格式),用来标识卡和特定应用的特征。卡内有2kbit eeprom,分成64个块,每个块32个bit。每个块均可以锁定,以保护数据免予修改。afi、dsfid和32个块均可读可写,用以存储用户的数据。tag-it采用13.56mhz的载波频率,工作于“reader talks first”模式下,即:一问一答的模式。卡内有防冲突机制,可以同时读多张卡而不会造成冲突。

事实上一张卡可以有多种应用,不同的块可以存储不同应用的数据,即所谓的“一卡通”。遗憾的是,tag-it内没有逻辑加密电路,无法实现密码功能,这限制了tag-it在其它保密性要求较高的领域的应用。

3 通信协议

发给asic的命令序列必须符合asic通信协议和iso/iec15693-3规范。

3.1 命令结构

在普通模式下,命令序列结构如下:

起如位s1命令字节(8位)*数据结束位es1

*在寄存器模式下,命令字节是1位,且该位为1。

*起邕位s1:起始位波形是当sclock位高电平时din发生一个上升沿。

*命令字节:规定asic与vicc通讯时的有关参数。例如,2dh,表示支持的射频协议是15693(1 out of 4),am调制方式,调制率100%,返回数据波特率6.67kb/s。注意:命令字节的发送顺序是高位在先,即:msb first。

*数据:数据域内容由15693-3所规定。

15693-3命令的一般格式是:

起始位s1flags命令序号命令内容crc16结束位es1

15693命令序列中,flags规定着命令内容中某些可选域存在与否。注意到s1和es1在asic命令序列中已经存在,所以只须把15693命令序列中flags、命令序号、命令内容、crc16等域的内容取出填入asic序列中的数据域打包。注意:数据域的发送顺序是低位在先,即:lsb first。

例如:发送字节20h的波形是:

    *结束位es1:结束位波形是当sclock高电平时din发生一个下跳沿。

3.2 响应结构

vicc响应的一般格式是:

起始位s2flags响应内容crc16结束位es2

*起台位s2:表示vicc响应数据的开始,定义为当sclock为高电平时dout发生一个上升沿。

*结束位es2:表示vicc响应数据的结束,定义为当sclock为高电平时dout发生一个下降沿。

3.3 通信过程注意的问题

①时间寄存器初始化。初始化序列是:s1 01111011 00000001 11000es1。

②发送顺序。命令字节(8位)发送的顺序是msb first,其它数据均是lsb first。

③fifo管理。发送每一位时都要检测dout的电平。dout高电平时停止发送,直到dout恢复为低电平。

④时钟线切换。命令发送过程中,双向时钟sclock线由mcu控制,发送完毕,在接收vicc响应之前必须进行时钟线的切换,将控制权交由asic控制。

mcu放弃时钟线控制波形(tran1):

mcu获得时线控制波形(tran2):

⑤crc校验。crc16校验是对15693-3规定的flags、命令序列号、命令内容等字节的校验,不包括起始位和命令字节(8位)。

⑥适当延时。例如:发送命令字节后适当延时约100μs,以利asic正确动作。

3.4 举例

以读一个扇区为例,采用普通模式,vcd和vicc交互的完整过程如下:

(发送)s1(起始位)2d(命令字节)40(flags)

20(读扇区命令序号)01(扇区号)00

(校验low byte)f2(校验high byte)

es1(结束位)tran1(sclock切换)

(接收)s2(起始位)00(flags)00(扇区安全状态)

31(数据1)32(数据2)33(数据3)34(数据4)bd 7f(校验)es2(结束位)

3.5 关于反冲突算法

iso/iec 15693中描述的vicc反冲突算法非常费解,笔者通过实践摸索解决了这个问题,此处作为一简单说明。该算法基本上是一种搜索算法,卡内相对应的是一种比较应答机制。举例说明,假如reader磁场范围内有两张卡,其uid分别是e00700000158d1d2和e0070000015869e8,这样当reader采用non-addressed模式指令去读的时候,两张卡均会回答,m_err线会跳变为高电平表示数据冲突。inventory命令用来查询当前磁场范围内卡的卡号,专用用于解决冲突问题。其参数包括:flags、command、masklength、maskvalue。一种最简单的情况,设定:flags.6=nb_slots_flag=1,maklength=4,maskvalue=0,当命令序列发送后,maskvalue会被自动与卡的uid的最低位比较,因为0≠2≠8,所以两张卡均不回答。同样的命令,如果maskvalue=2,则第一张卡就会回答;当maskvalue=8时第二张卡回答。如果两张卡的卡号是:e00700000158d1d2和e0070000015869e2,则当masklength=4,maskvalue=2时两张卡均回答,就会发生冲突。解决的方法是:令masklength=8,maskvalue=x2,x从0到f自增。这样,x2=d2时第一张卡回答,x2=e2时,第二张卡回答。依此类推。卡的uid最低位冲突的概率为62‰,最低两位冲突的榔为4‰。理解了此算法,就很容易理解标准中所描述的复杂算法。笔者采用这种逐位搜索算法编的读多卡程序,连续读3张卡的时间不超过500ms。

4 软件设计

笔者利用仿真器和pc机作为调试工具,采用8051汇编语言编程并调试通过了iso/iec15693-3所要求的所有命令。软件的主要功能包括:从pcrs232口接收命令数据,进行一次分拣处理后打包成asic命令序列,并发送给vicc。然后,接收vicc的响应,进行一定的分拣处理后通过rs232发送给pc机。本文只描述有关与vicc通信的部分。程序见网络补充版。//www.dpj.com.cn。