关于非接触式IC智能(射频)卡及其读写设备内核技术的研究与应用开发(连载4)
文章出处:http://www.nexussmartsolutions.com 作者:张敏 人气: 发表时间:2011年11月01日
在上述表中,仅当DV(Data Valid数据有效)位被设置有效时(即DV=”1”) ,TE,PE,CE,BE及AE标志才有效。但有一例外,即 当认证(Authentication)正确完成后,AE标志也直接有效。
SOR是Software Reset(软件复位)的缩写。当执行SOR后,所有的这些标志将被清除,且当对MCM的任何一个寄存器执行写周期时,所有的这些标志也将被清除。详见SOR后的复位表。
当对MCM内的任何一个寄存器执行写周期时,所有的这些标志也将被清除;仅当FIFO是空时,DV标志将被写周期清除。
有时侯MCM接收少于8 bits(例如 在接收ACK 或NACK时)时,MCM将不影响PE, CE, 及AE标志。
在MCU与MCM, MCM与Mifare 1卡片进行数据通信时,经常会出现各种错误。例如,卡片没能认证(Authentication) 通过, 则会使AE出错位置位,等等。
以下是在检查DV位之后,相关的出错情况,列为下表:
注意,送到卡片上的所有的命令和数据都提供奇/偶校验(parity) 和CRC 检查( 但“REQUEST”命令操作除外)。这是由卡片上的ASIC负责检查。
3、ENABLE 寄存器,地址:02H
ENABLE 寄存器的设置将影响卡片在通信时对 parity 和CRC 的校验。在ENABLE寄存器中有针对 parity 和CRC 校验的复位允许位(reset ENABLE bits)。
在对MCM进行编程的开始时,必须对ENABLE寄存器进行写操作,即必须将CE位关闭。仅当执行”Select”命令操作时才打开CE位:
由于MCM在电源接通时或在任何数据通信开始时,都会复位parity 和CRC块,因此无须额外地去执行这一操作。
4.BCNTS 寄存器,地址: 03H
BCNTS是英文Bit-Counter-for-Sending的缩写,意为传送时的位计数器(寄存器)。 这里的传送指的是CPU向MCM的DATA寄存器写数据。因此BCNTS寄存器实际上是一个字节发送控制器,它控制了MCU向DATA寄存器中写进的数据字节数目。
例如,设置BCTRS=10H,则可向MCM的DATA寄存器写进的数据字节数目为2个(8位字长的数据,因为总的bit数目=10H=16D),多余的数据,MCM将不予接收。
由于BCNTS寄存器是控制向DATA寄存器写数据的字节数目,因此这一操作必须在数据写入DATA寄存器之前完成。使用2进制代码来操作。
在大量的字节数据被写入DATA寄存器之后,MCM自动地与卡片进行通信。写入DATA寄存器的bits数量由BCNTS寄存器制定,保持。
5。BCNTR寄存器, 04H
BCNTR是英文Bit-Counter-for-Receiving的缩写,意为接收时的位计数器(寄存器)。
与BCNTS寄存器相反, BCNTR寄存器控制了MCU读取DATA寄存器的数据字节数目
例如,设置BCNTR=20H,则可向MCM的DATA寄存器读取的数据字节数目为4个(8位字长的数据,因为总的bit数目=20H=32D),多余的数据,MCM将不予理会。
由于BCNTR寄存器是控制向DATA寄存器读取数据的字节数目,因此这一操作必须在读DATA寄存器之前完成。使用2进制代码来操作。
BCNTR寄存器中的值将与实际接收到的数据字节相比较,如果有差别,则STACON寄存器中的BE标志被设置。
6。BAUDRATE 寄存器, 地址: 05H
BAUDRATE 意为数据传输到卡片上或卡片上的数据传到MCM时通信的位速率。虽然BAUDRATE 寄存器的后四位相关与指定的位速率,但是实际有用于MIFARE 1卡的只是最后一位。
BAUDRATE 寄存器的设置将直接影响着MCM与Mifare 1卡片之间的数据通信速率。
MCM中有一个时钟发生器。写数据至BAUDRATE 寄存器,可以控制 时钟发生器(CLOCK GENERATOR)。以下是位速率的计算公式:
7。TOC 寄存器, 地址: 06H
TOC是Time Out Counter ((定)时间溢出记数器 ) 的缩写。
Zhang28
TOC 寄存器中的值 (非零值) 将在 没有通信时,永久地被递减。因此,在没有通信时,或通信刚结束时,TOC 寄存器中的值必须被设置,即设置TOC = 0x00H. 例如: 在FIFO中的数据有效时,就必须这样做。否则将影响STACON寄存器的TE出错标志。
如果有溢出出现,则TE标志被设置,DV标志被激活。
在完成写数据到DATA寄存器,定时溢出记数器 应该经常被初始化。但有个例外,即 在认证操作(AUTHENCATION)的开始时段,定时溢出记数器 应该在存取“KEYSTACON” 和“KEYADDR”寄存器 之后,在存取DATA寄存器之前 被初始化。
一般地在读取(Read)和保存(save)了STACON寄存器中的数据之后 定时溢出记数器必须被关闭。
8.MODE寄存器, 地址: 07H
MODE 意为在与卡片数据相互往来时的数据编码模式 (MODE of DATA coding)。MODE寄存器的设置控制了MCM在与卡片数据相互通信时的数据编码模式.
MODE寄存器的每一位都与数据通信模式有关,但在使用MIFARE 1卡时,只有最后3 位(BITS)最为关联。
MODE 寄存器 中的P2 ,P1 ,及P0位决定了在NPAUSE0 和NPAUSE1引脚上的各自的脉冲宽度。脉冲宽度的可变范围在 2 ~ 3 us 之间。
在使用MIFARE卡时,P2 ,P1 ,及P0位应被设置为 111 b 或110 b。
这里必须提醒读者注意的是,当我们使用CM200(Philiphs产品)时与使用SB201(UniVision Engineering Limited联视工程有限公司的产品)时,MODE 寄存器的设置值将不一样。
使用CM200(Philiphs产品)时, MODE 寄存器的设置值应为: “1100 0110b”,即C6H,但在使用SB201(UniVision Engineering Limited联视工程有限公司的产品)时, MODE 寄存器的设置值应为: “1101 0110b”,即D6H。这是两个产品唯一存在的硬件上的不兼容,导致软件的设置值不同。 否则由于数据通信时的数据编码模式不相同,MCM将不能正常工作,不能读/写Mifare 1卡片。在实际应用中已有此经验教训。
9. CRCDATA 寄存器, 地址: 08H
被计算CRC的数据必须被写入CRCDATA寄存器中。 计算后的CRC必须从CRCDATA 寄存器中读出。
在写入一个BYTE(字节)到CRCDATA 寄存器后,计算将开始。计算完成后,STACON寄存器的CV标志被设置。当我们要写下一个字节到CRCDATA 寄存器之前,或在读取CRCDATA寄存器以得到CRC之前,或在检查CZ标志之前,都必须先读取CV标志,检查CV标志。(待续)