李玮+丁莹亮
【摘 要】本款智能IC卡治疗仪采用的读写模块WM-11T6。读写模块WM-11T6的软件设计是智能IC卡治疗仪设计中非常重要的一部分。本文章主要论述IC卡读写模块WM-11T6的软件编程及IC卡读写程序清单。
【关键词】治疗仪;软件设计;软件清单
【Abstract】This intelligent IC card therapeutic device adopts the read-write module WM-11T6.The software design of the read-write module WM-11T6 is a very important part in the design of the intelligent IC card therapeutic apparatus. This article mainly discusses the IC card read and write module WM-11T6 software programming and IC card reading and writing program list.
【Key words】Therapeutic apparatus;Software design;Software list
本款智能生物离子IC卡治疗仪是为海南一家医疗设备生产厂商设计的,产品已经投入市场。本款治疗仪使用的是非接触式IC卡充值计费方式。本款治疗仪在经营模式上进行了创新,改变传统用户(医院或个人)购买整个产品的经营模式,变为用户只购买产品的使用权的经营模式,也就是说用户不再是医疗设备的拥有者只是使用者。本款治疗仪采用一机一卡管理模式:每台设备都只有一个唯一的ID号,治疗仪的ID号与IC卡的ID号相统一,本机的IC卡对其他治疗仪无效。使用治疗仪时,用户将购买的IC卡的全部金额一次性充入到设备中,IC卡被清空, 随之失效。此款智能生物离子IC卡治疗仪采用的读写模块WM-11T6,读写模块WM-11T6的软件设计是智能IC卡治疗仪设计中非常重要的一部分。
1 WM-11T6射频读写模块简介
WM-11T6射频读写模块采用的是最新Mifare技术的微型嵌入式非接触式IC卡读写模块。内部嵌有ISO14443 Type A协议解释器,并且具有接收和射频驱动功能,还可实现简单的对MifareOne等卡片的读写操作,最大读写距离可达100mm(具体距离与卡片及天线的设计有关)。
该模块提供标准异步串行通讯接口和输出TTL电平。用户只需通过串行通讯发送相关指令,即可实现对卡片的所有操作,不必详细了解非接触IC卡读写模块的协议标准和底层驱动。实物照片如图1所示。
1.1 WM-11T6射频读写模块基本参数
工作电压:DC5V
工作电流:<100mA
通讯接口:RS232接口,TTL电平,波特率为9600 BPS无校验位,8位数据位,1位停止位)
适用卡型:Mifare One
数据通讯:106KBPS
射频频率:13.56MHz
操作距离:<100mm
工作温度:-20℃ --- +65℃
存储温度:-40℃ --- +85℃
1.2 WM-11T6射频读写模块管脚定义
该模块尺寸为标准DIP32封装 (41mm×18mm) ,其管脚定义为:
VCC:+5V RX:天线接收
GND:地 TX1:天线发送1
TXD:模块发送(接单片机) TX2:天线发送2
RXD:模块接收(接单片机) GND:天线地
1.3 天线的接口定义
天线接口定义与WM-11T6射频读写模块一致:
RX:天线接收 TX1:天线发送1
TX2:天线发送2 GND:天线地
2 IC卡读写模块WM-11T6的软件设计
2.1 IC卡操作流程
IC卡的操作流程必须按以下顺序执行:寻卡、密码校验、读或写卡、关闭卡片,如果执行过程中任何一个操作出现错误,应立即关闭对IC卡的操作。
2.2 寻卡模式
寻卡模式位有两种: 00或01。如果采用“00”模式寻卡,执行完关闭指令后,卡片必须离开感应区后,从新再进入感应区才能寻卡成功;如果采用“01”模式寻卡,执行完关闭指令后,卡片不需要离开感应区也能寻卡成功。
2.3 通讯命令
电脑给WM-11T6模块下传命令需要通过RS232口,WM-11T6模块收到命令后回传结果给电脑。
通讯命令协议的内容(以下所有数据都為十六进制表示,其中BCC为命令字符串本字节之前的所有字节的异或校验和):
通讯测试:
下传命令:3C 04 00 60 00 00? BCC 0D
成功返回:3C 01 01 BCC 0D
错误返回:3C 01 00 BCC 0D
寻卡:
下传命令:3C 04 01 70 00(寻卡模式00(IDLE)或01(ALL)) 00 BCC 0D
成功返回:3C 05 四字节卡号 00 BCC 0D
错误返回: 3C 01 FF(错误返回代码) BCC 0D
其中:00寻卡模式要求操作的卡在读写完成后要离开感应区才能再读写。
01寻卡模式要求操作的卡在读写完成后卡片只需关闭后又可读写。
密码验证:endprint
下传命令:3C 0E 01 6C 六字节密码 认证模式(00-A/01-B) 绝对块号 四字节卡号 校验位 0D
成功返回:3C 02 00 00 BCC 0D
错误返回:3C 01 FF(错误代码) BCC 0D
其中:0为A密码,1为B密码
读卡:3C 04 01 66 00(绝对块号) 00 BCC 0D
成功返回:3C 12 00 DATA0~DATA15 BCC 0D
错误返回:3C 01 FF(错误返回代码) BCC 0D
写卡:3C 13 01 67 00(绝对块号) DATA0~DATA15 BCC 0D
成功返回:3C 02 00 00 BCC 0D
错误返回:3C 01 FF(错误返回代码) BCC 0D
关闭卡片:3C 04 01 68 00 00 51 0D
正确返回:3C 02 00 00 3E 0D
错误返回:3C 01 FF(错误返回代码)BCC 0D
2.4 操作注意事项
2.4.1 对IC卡控制区的读写与数据的读写相同,但是控制方式不同,需要注意在编程过程中不能写错,否则可能会出现无法再对该区进行操作的现象。
2.4.2 在每一个命令执行后,下一个命令执行前应该增加不少于15ms的延时。
3 IC卡读写程序清单
Read_Cd:
MOV CardStatus,#00H
MOV SendCdData + 0, #3CH
MOV SendCdData + 1, #04H
MOV SendCdData + 2, #01H
MOV SendCdData + 3, #66H
MOV SendCdData + 4, BLOCKNUMBER ;
MOV SendCdData + 5, #00H
MOV DataLength,#06H
LCALL XORCheck
MOV SendCdData + 6, A
MOV SendCdData + 7, #0DH
MOV CadDataCount,#8
MOV R1,#SendCdData
ReadCdLoop1:
MOV UARTData,@R1
INC R1
LCALL SoftUART_PutByte
DJNZ CdDataCount,ReadCdLoop1
MOV CdDataCount,#21
MOV R1,#ReciCdData
ReadCdLoop2:
LCALL SoftUART_GetByte
MOV @R1,UARTData
INC R1
DJNZ CdDataCount,ReadCdLoop2
MOV A,5AH
CJNE A,#12H,ReadCd_Err
MOV CdStatus,#01H
AJMP ReadCd_End
ReadCd_Err: MOV CdStatus,#00H
ReadCd_End: RET
Write_Cd:
MOV CdStatus,#00H
MOV SendCdData + 0, #3CH
MOV SendCdData + 1, #13H
MOV SendCdData + 2, #01H
MOV SendCdData + 3, #67H
MOV SendCdData + 4, BLOCKNUMBER
MOV SendCdData + 5, #00H
MOV SendCdData + 6, #00H
MOV SendCdData + 7, #00H
MOV SendCdData + 8, #00H
MOV SendCdData + 9, #00H
MOV SendCdData + 10, #00H
MOV SendCdData + 11, #0FFH
MOV SendCdData + 12, #00H
MOV SendCdData + 13, #00H
MOV SendCdData + 14, #00H
MOV SendCdData + 15, #00H
MOV SendCdData + 16, #00H
MOV SendCdData + 17, #00H
MOV SendCdData + 18, #00H
MOV SendCdData + 19, #00H
MOV SendCdData + 20, #00H
MOV DataLength,#21
LCALL XORCheck
MOV SendCdData + 21, A
MOV SendCdData + 22, #0DH
MOV CardDataCount,#23
MOV R1,#SendCdData
WriteCdLoop1:
MOV UARTData,@R1
INC R1
LCALL SoftUART_PutByte
DJNZ CdDataCount,WriteCdLoop1
MOV CadDataCount,#6
MOV R1,#ReciCdData
WriteCdLoop2:
LCALL SoftUART_GetByte
MOV @R1,UARTData
CJNE @R1,#0DH,WriteCdLoop3
AJMP WriteCdLoop4
WriteCdLoop3:
INC R1
DJNZ CdDataCount,WriteCdLoop2
WriteCdLoop4:
XCH A,CdDataCount
CJNE A,#01H,WriteCd_Err
MOV CdStatus,#01H
AJMP WriteCd_End
WriteCd_Err:
MOV CdStatus,#00H
WriteCd_End:
RET
[責任编辑:田吉捷]endprint