与上位机的通讯协议
发送协议(上位机传给下位机):STX+LEN+CMD+DATA0~DATAN+BCC+ETX
其中:STX:09 表示命令头
LEN 表示数据长度,包括CMD及DATA0~DATAN
CMD表示命令字
DATA0~DATAN表示发送数据包
BCC表示异或和校验BCC=CMD^ DATA0^DATA1^ ~DATAN
ETX:0D表示命令尾
接收协议(下位机传给上位机):STX+card_state+LEN+DATA0~DATAN+BCC+ETX
其中:STX:09 表示命令头
card_state表示状态字,card_state=0表示命令成功,如为其它值表示命令失败
LEN 表示数据长度,包括DATA0~DATAN
DATA0~DATAN表示数据包
BCC表示异或和校验BCC= DATA0^DATA1~DATAN
ETX:0D表示命令尾
CPU卡操作命令
1、 复位命令:50
发送:090150500D //复位指令
如复位成功返回:09 00 LEN DATA0~DATAN BCC 0D //例:09 00 10 10 78 80 90 02 20 90 00 00 00 00 00 A6 A9 6E 14 BF 0D
如复位失败返回:09 02 00 00 0D
2、 发送命令:51
发送:09 LEN 51 DATA0~DATAN BCC 0D
1例:
如取随机数指令:0084000004
上位机发送给下位机的数据包:两条取随机数的,交替发送
090A5107070A000084000004DB0D
090A5107070B000084000004DA0D
// 09(命令头) 0A(长度) 51(命令字) 07(备用) 07(后面指令的长度) 0A或0B(CPU卡的数据块头) 00(CPU卡的CID,ATX时确定的) 0084000004 (前7个字节为指令) DB(校验) 0D(命令尾)
//说明,0A表示后面有10个字节的数据 51 07 07 0A 00 00 84 00 00 04
//说明,51上位机与下位机约定的命令字
//说明,07表示对CPU卡操作的指令长度共有7个字节:0A 00 00 84 00 00 04
//说明,0A或0B表示CPU卡的数据块头 ,卡不离开感应区互相切换可读取不同的随机数
//说明,00表示CPU卡的CID号,ATX时确定的,具体见ISO 14443-4规定
//说明,00 84 00 00 04 取随机数的指令
//说明,DB为校验字节是数据包为10个字节的校验和,51^7^7^0A^ …… 00^04
2例:
读MF的目录下指令:00A4000000
上位机发送给下位机的数据包:
090A5107070A0000A4000000FF0D //读MF的目录下
//每一个字节的作用同上说明,此处不在一一说明!
09 00 04 FA 00 01 00 FB 0D //作清除卡内容时,返回数据 FA 00 01 需一直把这个值发回给卡
0906510303FA0001AA0D //发送FA 00 01 的指令
09 00 05 0B 00 90 00 00 9B 0D //当返回了9000时,表示清卡成功