IC卡读写器协议1217.docx
- 文档编号:5329856
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:17
- 大小:21.33KB
IC卡读写器协议1217.docx
《IC卡读写器协议1217.docx》由会员分享,可在线阅读,更多相关《IC卡读写器协议1217.docx(17页珍藏版)》请在冰豆网上搜索。
IC卡读写器协议1217
一、通讯协议
通讯由上位机主动发送命令,设备接受命令后做相应的处理然后返回处理结果。
9600-57600波特率、无校验位、数据位8位、1个停止位
1、协议包格式
主机
设备
CSTART
SEND_INFO[0]-SEND_INFO[n]
(接收后做相应处理)
CRECEIVE
ST
COK,ERR(1-16)
DATA_LEN
DATA
VERIFY
2、发送信息SEND_INFO[0]…SEND_INFO[n]格式描述:
(此格式随卡型和命令变化)
SEND_INFO的数据解释:
INFO_LEN
COMMAND
DATA0
DATA1
……
DATA(n-2)
VERIFY
定义
描述
长度
INFO_LEN
信息长度=n
1字节
COMMAND
命令字
1字节
DATA:
数据
(INFO_LEN-2)字节
VERIFY
校验数据=SEND_INFO[n]VERIFY计算方法是SEND_INFO[0]…SEND_INFO[n-1]之和除以256所得的余数
1字节
3、返回信息RECEIVE_INFO[0]…RECEIVE_INFO[n]
格式描述:
STATUS+DATA_LEN+Data+VERIFY
定义
描述、值
长度
STATUS
操作状态码00操作成功,其他则为错误代码
1
DATA_LEN
数据长度=n
1
DATA
DATA_LEN个数据
DATA_LEN
VERIFY
校验和,RECEIVE_INFO[n]VERIFY计算方法是RECEIVE_INFO[0]…RECEIVE_INFO[n-1]之和除以256所得的余数
1
4、常量描述:
描述
定义
值
主机发送开始
CSTART
0x55
正确
COK
0x00
主机接收开始
CRECEIVE
0xAA
5、错误类型(ST返回值)
定义
描述
值
COK
正确
0
NO_CARD
无卡
1
CRC_ERR
卡片CRC错误
2
ALARM
操作设备出错
3
RFRESET
模块复位不成功
4
REQERR
寻卡出错
5
ANTICOLLERR
防碰撞失败
6
SELECT
选卡出错
7
LOADKEY
直接装载密码失败
8
LOADKEYE2
从EEPROM装载密码失败
9
AUTHENTICATION
验证卡密码失败
10
READ
调用read函数出错
11
WRITE
调用write函数出错
12
HALT
卡休眠失败
13
WRITEE2
写EEPROM出错
14
READE2
读EEPROM出错
15
WRITEKEY
修改密码出错
16
注:
考虑到本读卡器可能和其他串口设备共用一个串口,命令错误、校验和错误、长度错误等错误,一律不做任何响应。
6、指令代码
指令名称
代码(十六进制)
ALARM设备操作
D0
RFRESET复位或关闭射频模块
D1
REQUEST寻卡
D2
ANTICOLL防冲突
D3
SELECT选择卡
D4
LOADKEY直接装载密码
D5
LOADKEYE2从EEPROM装载密码
D6
AUTHENTICATION验证卡密码
D7
READ读卡
D8
WRITE写卡
D9
HALT停止卡
DA
WRITEE2写EEPROM
DB
READE2读EEPROM
DC
WRITEKEY写卡密码
DD
LINK联机测试
DE
VERSION获取版本号
DF
BAUDRATE修改波特率
E0
READ_D直接读
E1
WRITE_D直接写
E2
二、感应卡部分指令详解
●基础指令
1、ALARM设备操作
COMMAND
0xD0
DATA[0]
设备号
DATA[1]
操作次数(0--100)
设备号:
01LED
02BUZZER
03LED&BUZZER
其他无效。
举例:
发送5504D00105DA(LED闪烁5次)
接收AA00010405
2、RFRESET复位或关闭射频模块
HOSTTOMSR:
COMMAND:
0XD1
DATA[0]:
0到255=0表示关闭射频>0表示复位射频模块的时间(毫秒)
MSRTOHOST:
STATUS:
LEN:
1
DATA[0]:
保留未用
举例:
发送5503D101E0复位射频模块1毫秒
接收AA00010405
3、REQUEST寻卡
HOSTTOMSR:
COMMAND:
0XD2
DATA[0]:
MODE0:
REQUESTIDLE
MODE1:
REQUESTALL
MSRTOHOST:
STATUS:
LEN:
2
DATA[0]:
4表示为M1卡
DATA[1]:
00
举例:
发送5503D201D3
接收AA0002040006找到一张M1卡
4、ANTICOLL防冲突
HOSTTOMSR:
COMMAND:
0xD3
DATA[0]:
0
DATA[1]:
SNR(LL)(卡4字节唯一序列号)
DATA[2]:
SNR(LH)
DATA[3]:
SNR(HL)
DATA[4]:
SNR(HH)
MSRTOHOST:
STATUS:
LEN:
4
DATA[1]:
SNR(LL)
DATA[2]:
SNR(LH)
DATA[3]:
SNR(HL)
DATA[4]:
SNR(HH)
注:
在执行ANTICOLL命令的时候,一般DATA[1]…DATA[4](卡序列号填0),ANTICOLL
执行成功后将返回SNR
举例:
发送5507D30000000000D8
返回AA000438A1004926(注意这里的序列号根据卡不同而不同)
5、SELECT选择卡,这里的SNR是ANTICOLL返回的
HOSTTOMSR
COMMAND:
0XD4
DATA[1]:
SNR(LL)
DATA[2]:
SNR(LH)
DATA[3]:
SNR(HL)
DATA[4]:
SNR(HH)
MSRTOHOST:
STATUS:
LEN:
1
DATA[0]:
SIZE
举例:
发送5506D438a10049FA(注意这里的蓝色序列号根据卡不同而不同)
接收AA00010405
6、LOADKEY直接装载密码
HOSTTOMSR:
COMMAND:
0xD5
DATA[0]:
MODE=1密码A目前尽支持密码A.DATA[0]=1;
DATA[1]:
SECNR扇区号0-15
DATA[2]…DATA[7]密码数据
MSRTOHOST:
STATUS:
LEN:
1
DATA[0]:
保留未用
举例:
发送550AD50100FFFFFFFFFFFFDF(装载0扇区密码为FFFFFFFFFFFF)
接收AA00010405
7、LOADKEYE2从EEPROM装载密码
HOSTTOMSR:
COMMAND:
0xD6
DATA[0]:
Sector地址(0~15共16个扇区密码)
MSRTOHOST:
STATUS:
LEN:
1
DATA[0]:
保留未用
举例:
发送5503D600DA从E2PROM加载第一扇区密码
接收AA00010405
8、AUTHENTICATION验证卡密码
HOSTTOMSR:
COMMAND:
0XD7
DATA[0]:
MODE=1密码A(目前尽支持密码A)
DATA[1]:
SECNR扇区号
MSRTOHOST:
STATUS:
LEN:
1
DATA[0]:
保留未用
举例:
发送5504D70100DC(验证0扇区)
接收AA00010405(这里的1字节数据04保留未用)
9、READ读卡
HOSTTOMSR:
COMMAND:
0XD8
DATA[0]:
ADDRESS块绝对地址(0-63)
MSRTOHOST:
STATUS:
LEN:
16
DATA[0]…DATA[15]读出的块数据
举例:
发送5503D801DB读1块数据(就是0扇区的第2块)
接收AA0010FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10
10、WRITE写卡
HOSTTOMSR:
COMMAND:
0XD9
DATA[0]:
ADDRESS块地址(1-63)
DATA[1]…DATA[16]要写入的数据
MSRTOHOST:
STATUS:
LEN:
1
DATA[0]:
保留未用
举例:
发送5513D90100112233444566778899A1BBCCDDEEFFE2
写1块数据(就是0扇区的第2块)
接收AA00010405
11、HALT停止卡
HOSTTOMSR:
COMMAND:
0XDA
MSRTOHOST:
STATUS:
LEN:
1
DATA[0]:
保留未用
举例:
发送5502DAD6
接收AA00010405
12、WRITEE2写EEPROM
HOSTTOMSR:
COMMAND:
0XDB
DATA[0]:
ADDRESS低地址(地址00-1FF,其中80~170存放密码不要随便写!
)
DATA[1]:
ADDRESS高地址
DATA[2]写入数据长度
DATA[3]…DATA[18]要写入的数据(不足16字节时后面补00)
MSRTOHOST:
STATUS:
LEN:
1
DATA[0]:
保留未用
举例:
发送5514DBB001020102000000000000000000000000000084从EEPROM地址1BO起写入两字节数据0102
接收AA00010405
13、READE2读EEPROM每次16字节
HOSTTOMSR:
COMMAND:
0XDC
DATA[0]:
块首地址低地址(地址00-1FF,)
DATA[1]:
块首地址高地址
MSRTOHOST:
STATUS:
LEN:
1
DATA[0]~DATA[15]:
返回数据缓冲区
举例:
发送5504DCB001B2从EEPROM地址1BO起读出16字节数据
接收AA00100102000000000000000000000000000004
读出数据位0102
14、WRITEKEY写卡密码,同时保存新密码到EEPROM密钥保存区
HOSTTOMSR:
COMMAND:
0XDD
DATA[0]:
写入扇区0~15
DATA[1]~DATA[6]:
写入的密码数据
DATA[7]~DATA[10]:
控制位
(控制位修改可能导致卡片数据不可读写,默认:
FF078069)
DATA[11]~DATA[16]:
FFFFFFFFFFFF
MSRTOHOST:
STATUS:
LEN:
1
DATA[0]:
保留未用
举例:
发送5513DD00010203040506FF078069FFFFFFFFFFFF12
扇区0写入密码010203040506
接受AA00010405
15、LINK联机测试命令,用于检测读卡器是否联机
COMMAND
0xDE
DATA[0]
无
例如:
5502DEE1AA00010405
16、VERSION获取版本号,返回8个字节的版本号。
COMMAND
0xDF
DATA[0]
无
例如:
5502DFE1AA0008443850532D5630330D
17、BAUDRATE修改波特率
COMMAND
0XE0
DATA[0]
0-6
BAUD_576004
BAUD_288003
BAUD_192002
BAUD_144001
BAUD_96000
默认57600
修改后,直接生效,但重新上电后,仍然是57600
例如:
发送5503E004E7
应答AA00010405
●高级指令集
1、READ_D直接读
HOSTTOMSR:
COMMAND
0xE1
DATA[0]
密码选择位0原始密码(FFFFFFFFFFFF),修改后密码(用户自定义)
DATA[1]
块号(0-63)
MSRTOHOST:
STATUS:
00
LEN:
16
DATA[0]-DATA[15]:
读出的数据
举例:
发送:
5504E10001E3(用原始密码读取块1)
接收:
AA0010361E11C1F8880400468E3657658017041B
同基础指令中READ指令差别,基础指令中READ命令,之前必须经过寻卡,防冲突,选卡,验证4个步骤之后,才可以读,而本指令,直接完成上述所有功能,读出数据.只是速度比单独读操作要慢大约10ms.
2、WRITE_D直接写
HOSTTOMSR:
COMMAND:
0XE2
DATA[0]:
密码选择位0:
原始密码(6个FF),1:
用户自定义密码。
DATA[1]:
ADDRESS块地址(0-63)
DATA[2]…DATA[17]要写入的数据
MSRTOHOST:
STATUS:
LEN:
1
DATA[0]:
保留未用
举例:
发送5513E2000100112233445466778899A7BBCCDDEEFFE2
写1块数据(就是0扇区的第2块)
接收AA00010405
同基础指令中的WRITE指令差别,上面的WRITE指令,之前必须经过寻卡,防冲突,选卡,验证4个步骤之后,才可以读,而本命令,直接完成上述所有功能,写入数据.只是速度比单独读操作要慢大约20ms.
三、协议补充说明
1、读卡器返回的数据AA00……中,AA表示报头,00为状态字,
长度为1的数据,一般为保留值,可以不管,如装载密码时返回:
AA00010405
其中的00表示成功,01表示数据长度,04表示数据,在这里为保留字可以不管,05为校验和。
(从【状态】字节开始的校验和)。
2、状态字节中:
00表示成功,其他表示错误。
3、MODE表示M1卡的密码模式(0表示密码A,4表示密码B,现只支持密码A)
4、关于卡片密码:
加载密码有两种方式:
LOADKEYE直接加载密码参数中包括密码(6字节);
LOADKEYE2从EEPROM加载密码,执行指令前要用WRITEE2指令将密码(6字节)按要求的格式(12字节)写入相应EEPROM地址(扇区0~15,对应密码存放地址为:
0X80,0X90,…,0X170)或用WRITEKEY指令写卡密码。
WRITEKEY指令写卡密码(参数6字节密码+4字节控制位)改写卡片密码,通知将新密码保存到EPPROM密码存放区(0X80,0X90,…,0X170)
四、驱动程序函数说明
voidSystem_Init(void)
功能:
初始化通讯口波特率57600、射频模块初始化
参数:
无
返回:
无
charSS_PcdReset(void)
功能:
系统复位
参数:
无
返回:
成功则返回0错误返回错误代码。
charSS_PcdRfReset(ucharms)
功能:
RC500复位
参数:
ms为1则复位,为0则关闭RF部分
返回:
成功则返回0错误返回错误代码。
charSS_PcdConfig(void)
功能:
系统配置(初始化)
参数:
无
返回:
成功则返回0错误返回错误代码。
charSS_PiccCommonRequest(ucharmode,uchar*atq)
功能:
寻卡
参数:
mode为1则寻所有卡,为0则寻剩余卡(不含设为休眠的卡)
*atq保存返回卡类型2字节
返回:
成功则返回0错误返回错误代码。
charSS_PiccCascAnticoll(uchar*cardsnr)
功能:
防碰撞
参数:
*cardsnr返回卡片唯一序列号
返回:
成功则返回0错误返回错误代码。
charSS_PiccCascSelect(uchar*serial)
功能:
选卡
参数:
*serial防碰撞得到的卡片唯一序列号
返回:
成功则返回0错误返回错误代码。
charSS_HostCodeKey(uchar*uncoded,uchar*coded)
功能:
密码格式变换
参数:
*uncoded输入的原始密码6字节
*coded变换后密码12字节
返回:
成功则返回0错误返回错误代码。
charSS_PcdLoadKey(uchar*uncodekey)
功能:
密码加载
参数:
*uncodekey原始密码
返回:
成功则返回0错误返回错误代码。
charSS_PiccAuthState(ucharauth_mode,ucharsactor,uchar*snr)
功能:
密码验证
参数:
auth_mode密码验证模式1验证密码A,0验证密码B
Sactor待验证扇区0~15
*snr卡序列号
返回:
成功则返回0错误返回错误代码。
charSS_PiccRead(ucharaddr,uchar*_data)
功能:
读卡
参数:
addr扇区号
*_data返回的卡号数据16字节
返回:
成功则返回0错误返回错误代码。
charSS_PiccWrite(ucharaddr,uchar*_data)
功能:
写卡
参数:
addr数据块地址
*_data待写入的数据16字节
返回:
成功则返回0错误返回错误代码。
charSS_PiccHalt(void)
功能:
让卡休眠
参数:
无
返回:
成功则返回0错误返回错误代码。
charSS_PiccValue(ucharMode,ucharAdr,uchar*Value,ucharTrans_Adr)
功能:
卡片加/减值
参数:
Mode模式选择0XC0减值,0XC1增值
Adr操作地址0~63(每扇区的第三块为密码区,不可操作!
)
*Value操作数据4字节
Trans_Adr是否备份数据1备份,0不备份
返回:
成功则返回0错误返回错误代码。
charWriteE2(unsignedcharadd,unsignedchar*write_dat,ucharlen)
功能:
写RC500EEPROM
参数:
add写入数据的EEPROM地址
*write_dat待写入数据
Len写入数据长度
返回:
成功则返回0,错误返回错误代码。
charSS_PcdLoadKeyE2(unsignedchare2_add)
功能:
从EEPROM加载密码。
参数:
e2_addEEPROM数据起始地址。
返回:
成功则返回0错误返回错误代码。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- IC 读写 协议 1217