来源:中国一卡通网 作者:张敏 发布时间:2005-05-19 17:13:07 字体:[大 中 小]
关键字:关于非接触式IC智能(射频)卡及其读写设备内核技术的研究与应用开发(连载7)
摘 要:关于非接触式IC智能(射频)卡及其读写设备内核技术的研究与应用开发(连载7)
7. “Write” 写指令操作
“Write“ 写指令允许用户写数据到MIFARE卡片上(完整的16 个BYTEs的数据块(Data blocks))。只有在先“Authentication” 认证指令完成后,才允许进行对要求的数据扇区或数据块(Block)进行“Write“ 写指令操作。
为了提供最大的数据集成度,以及包含大量密码值的密码数据块的保密性,我们必须保持一个大数据结构。这样可以允许MIFARE卡片执行增值/减值(Increment/Decrement)指令。
数据块通过一个写操作,将存储的数据在每一个block块中写3次,1次反写,从而完成数据块的初始化。此外,一个地址引导位代码域必须写4次,其中2次为反向写入。正/负数据值将以标准的2的补码格式来表示。
注意:在将数据写到卡片上的某一扇区时,一定要小心。因为有些block中存储了密码数据以及存储允许使能数据。特别是每一个扇区的Block3中存放了该扇区的存取条件,包含有KEYA,KEYB及该扇区的控制字。Mifare 1卡片出厂时的Block3有缺省值,为:“a0a1a2a3a4a5ff078069b0b1b2b3b4b5”,共16个Bytes。
涉及Mifare 1卡片的存储结构等信息,请参考本文的关于Mifare 1 卡片章节。
程序员在使用Mifare 1卡片做应用时,一定要清清楚楚记住每一个扇区的Block3的数据,这样也就记住了扇区的密码和存取控制字。否则,扇区的存储空间将不能被READ/WRITE等操作而失效。
任何人试图用任何方式来读写不知密码的卡片或某一扇区都是徒劳无益的。
卡片应放在安全的地方,即不要放在离MCM天线较近的地方。因为当MCM在执行某些指令时,有可能无意对这一卡片进行了读/写等操作。
8.“Increment “ & “ Decrement “ & “ Restore” 增值/减值/重储
通过Mifare 1内部电路,MIFARE 1卡片能够执行“Increment “ & “ Decrement “增值/减值 操作,如果:
#用合适的写指令对数据块“value block”进行了初始化;
#根据KEY A 和KEY B ,允许进行“Increment “ & “ Decrement “增值/减值 操作;
#“Increment “ 增值 0 操作和“ Decrement “减值0 操作是不允许的;
“Increment “ 增值:加指定的值到卡片的存储器中
“ Decrement “减值:从卡片的存储器中减去指定的值
“ Restore” 重储: 执行一个“Decrement 0”(减 0)指令
上述指令的计算结果将被存储在MCM的一个内部的数据缓冲寄存器中,直达以后的指令来存取。为了将结果写到卡片上,紧接着必须执行“Transfer”指令。Transfer”指令并不改变数据缓冲寄存器中的数据值。这一操作保持数据块中的数据结构,直到数据块中的值被自动地反写及校验为止。存储的地址也被正确地传送存储到数据块中。
数据块的长度为4 字节(BYTES)。
万一数据值溢出,即数据值远大于最大的正数值 或 远小于最小的负数值时,MIFARE卡片将停止操作,并返回一个NACK代码。
9.“Transfer” 传送指令
每一个“Increment “ & “ Decrement “增值/减值 操作都必须跟随一条“Transfer” 传送指令,这样真正地将数据结果传送到卡片上去。否则,没有传送指令,数据结果仍保持在数据缓冲寄存器(value buffer register)。“Transfer” (传送) 指令的目标地址可能会相同与“Increment “ & “ Decrement “增值/减值指令时的源地址。然而,如果有了完善的后备管理软件,这样的事可能不会发生。
除了“Transfer”指令之外,其他所有的指令将改变内部数据缓冲寄存器(value buffer register)的内容。这将要求使用“Restore”指令。“Restore”指令将重建“Read“指令之后的数据缓冲寄存器(value buffer register)的内容。
如果“Transfer” (传送) 指令存取了一个新的存储器位置时,将被要求一个相同于源地址的存储条件的 目标地址。
即,对于两个内存位置,要求执行“Increment “ & “ Decrement “增值/减值指令。“Transfer” (传送) 指令自动地保持正确的数据结构,包括存储数据的地址。
10.“ Halt” 停机指令
“Halt” 停机指令将MIFARE 1卡片设置为“HALT MODE”。例如,卡片已经退出使用等。卡片将保持“HALT MODE”状态,直到被复位(例如:重新用于通信 等)。
第四章 MCM应用开发
在这一章节里,将向广大 读者介绍MCM的具体的应用开发。 我们选用的卡片为Mifare 1 S50系列的标准的符合 ISO/IEC 14443 TYPE A 标准的非接触式IC射频卡。选用的读写器的核心模块为MCM200(或是SB201)。
根据以上几个章节的介绍,相信读者可以理解如下的通用读写器DEMO电路的设计。
一.DEMO硬件电路的应用开发
通用读写器DEMO的硬件电路请见所附的图纸。具体说明如下:
1.DEMO电路中,对于MCU的说明:
笔者选用了市场上容易购置的美国ATMEL 公司的89C52芯片。其内建8K EEPROM,256 bytes 的RAM ,内设P0,P1,P2,P3 等四个端口,其中P0,P2为数据/地址双向的多用端口。内有3个定时器,T0,T1和T2。其振荡晶体选用11.0592MHz,以利于以后通信时的波特率的精确设计和设置。89C52中还内设8级中断控制系统,3级单向一次性可编程的密码内存,可以防止芯片内的程序被非法读写,拷贝等,保护知识产权。等等。
AT89C52 的软件指令完全兼容与MCS-51系列的MCU的标准,包括指令的寻址方式,各种数据的操作等等。
有关详细的资料,可以查阅ATMEL 公司的网页: HTTP://WWW.ATMEL.COM
2.Demo电路中,对MCM的说明:
在DEMO电路中,笔者选用了Philips公司的MCM200模块(也可用联视工程公司的SB201模块)。
将MCM的D0 ~ D7 连接到MCU的P0端口;MCM的读写线连接到MCU的-RD和-WR端上; A0 ~ A7空缺,使用ALE线,连接到MCU的第30脚上;MCM的天线端点上(ANT,-ANT等)必须对地接高频滤波电容,并串接高频电感;MCM的第9脚必须接3.6V的后备锂电池;MCM的第31脚及12脚分别接MCU的25脚和26脚,由程序员来控制MCM的启动和关闭。MCM上的模拟电路供电和数字电路的供电端必须跨接高低频滤波电容等。
3. Demo电路中,对显示电路的说明:
在DEMO电路中,笔者选用了Motorola 公司的MC14499显示模块。
每个MC14499模块可动态扫描4位段式LED(共阴)。DEMO电路中共使用了2个MC14499模块,以显示8位数据。
MC14499显示0 ~9数字时很直观,但是它是数字型的。由于我们经常要显示16进制的数据,因此对于A,B,C,D,E,F的显示,MC14499的显示可能不很直观,希望读者注意。
在新版本的DEMO电路中,笔者已经将显示电路改为LCD点阵式,多字行的液晶显示电路。这对于将这种低功耗的显示电路直接应用于所要求开发的应用设备中将提供很大方便。
两个MC14499模块的CLK和DATA信号将分时复用,以节省MCU有限的资源,分别接到MCU的21 和22引脚上,两个MC14499模块的--ENB信号分别接到MCU的23 和24引脚上。如果选通-ENB1,则第一个MC14499显示模块将接收数据;如果选通-ENB2,则第二个MC14499显示模块将接收数据。
4.Demo电路中,对键盘电路的说明:
在DEMO电路中,笔者选用了4 X 4方阵式样的键盘电路与MCU相连在P1端口上。
键盘电路中的4X4共16个键分别设置为0 ~ 9 十个键,一个“.”键,以及其他一些功能键及字母键。
键盘电路的扫描值通过一个LS244,送到MCU的P1的高四位,供MCU采集;MCU的P1的低四位送出键盘的扫描信号。LS244的选通(MCU采集P1的高四位时)信号和显示电路的DATA线分时复用,以节省MCU有限的资源。
本键盘电路的软件设计不同于传统,而采用了比较直接,明了,快速的“位扫描法”,这对于读者如果要求对键盘数目进行扩充,则读者在仔细阅读本文之后定能迎刃而解。
在软件设计说明章节中将详细介绍键盘扫描电路软件设计方法。
5.Demo电路中,对指示信号的说明:
LED1:指示MCM的-CS信号是否被选中,LED1亮,则指示MCM已被MCU选中,可对MCM进行操作。(此时,应注意MCM的RST端指示信号LED2应亮,否则MCM不能被操作)。
LED2:指示MCM的RST信号是否被选中,LED2亮,则指示MCM以被MCU选中,可对MCM进行操作。(此时,应注意MCM的-CS端指示信号LED1应亮,否则MCM不能被操作)。
LED1 和LED2的指示应该同时有效才能使MCM工作。
LED3:整个DEMO电路的“OK”指示信号。即在每次对MCM操作成功之后,LED3将指示为亮。例如在对MCM成功地进行了SELECT命令或REQUEST命令等操作之后,LED3将指示为亮。特别地,在本文的“门禁控制系统”应用程序中,LED3将直接作为门锁的驱动信号。在实际的装置中,如果“门禁控制系统”的读写器读到某一张写有该“门禁控制系统”密码的非接触式射频卡,则LED3将指示发亮,并驱动门锁,打开大门。(读者如果已完全理解,读通“门禁控制系统”应用程序的话,完全可在程序中适当的位置加入一段小程序,连同LED3的驱动信号,而作为门锁的复合驱动信号。这样的“门禁控制系统”将更具有安全性,可靠性。)
喇叭(蜂鸣器):DEMO电路的喇叭(蜂鸣器)指示音信号,在每次对MCM操作成功之后,喇叭(蜂鸣器)将发声。例如在对MCM成功地进行了SELECT命令或REQUEST命令等操作之后,喇叭(蜂鸣器)将发声。特别地,在本文的“门禁控制系统”应用程序中,喇叭(蜂鸣器)将直接作为门锁的驱动指示音信号。配合LED3的指示信号,仅当门锁被合法地打开时,喇叭(蜂鸣器)将给出指示音信号。否则,喇叭(蜂鸣器)将不会给出指示音信号。
读者如果已完全理解,读通“门禁控制系统”应用程序的话,完全可在程序中适当的位置对LED3或喇叭(蜂鸣器)进行任意的程序设置。
电源输入保护电路:在DEMO电路中,加入了简单的电源保护电路。即在电源的输入端加入一个反向二极管,当电源极性接反时,将输入的电源短路,而不会使DEMO电路损坏。
6. 其他电路
通信电路:在新版本的DEMO电路中,笔者已经将RS232的通信电路连接上。以利于用上位PC来具体地控制读写器,并能编制用户界面良好的应用软件,等等。
为了方便读者对于实际应用中不同的通信方式的要求,例如要求长线(长距离)方式(例如RS422/485等),笔者业已设计完成相应的“全双工RS232《==》RS422/485通信(双向)转接设备”。该转接设备非常轻巧,低功耗,成本很低,非常适合于各种不同应用类型的计算机与应用设备之间的转接。例如大楼中的门禁系统中各读写设备与上位计算机之间的长线方式的通信就应采用这种转接设备。其长线驱动可达1200米以上,且稳定可靠。传统的RS232通信至多不超过20米。(注:关于“全双工RS232《==》RS422/485通信(双向)转接设备”的介绍,笔者将会在另外文章中将做详细介绍。)
LCD显示电路:轻巧,低功耗的非接触式卡片读写器已越来越受到欢迎。因此大电流显示的LED将被LCD显示所取代。笔者在新版本的DEMO电路中,已经将LCD应用于读写设备中,且为图形方式点阵大屏幕显示。
二. DEMO电路的 软件 应用开发
DEMO电路的 软件 应用开发的目标是:主要根据所设计的DEMO硬件电路而进行第一步,最低层的面向微处理机MCU的应用程序的开发。
由于在DEMO电路中笔者选用的MCU为完全兼容与MCS-51系列微处理机的ATMEL公司的AT89C52,因此,笔者将重点介绍MCS-51系列的面向硬件操作的最低层的汇编语言的DEMO电路的应用程序的开发。
应用程序的开发将主要分为两大部分,即对MCM的应用程序的开发及对读写器的其他电路的应用程序的开发。
程序开发的方式将主要建立一系列的汇编语言函数子程序以供主程序的随时调用。即对MCM模块或读写器的其他电路分别编制汇编语言函数子程序。(待续)