13.56M读卡器开发详解五---底层通讯协议
说明:
文档最后的部分为新增加的通讯协议。
更改后读卡器自动判断卡片是否在感应区内,不需要外部设置,也并不影响和以前的软
件兼容,以前所有的指令都还保留即可正常执行。
出厂默认波特率为9600,掉电可记忆用户更改后的波特率。
认证密钥并没有时间的限制。
一、主从
外部CPU 为主,读写卡器为从,读写卡器始终处于应答状态,不主动向外部CPU 发送
命令。
起始位、8BIT数据、1BIT停止位
二、机通讯协议
1.外部 CPU 命令格式
命令头 + 长度字 + 设备标识符 + 命令码 + 命令参数 + 校验字
命 令 头:2BYTE,0xAABB
长 度 字:2BYTE,指明后续的字节数,从设备标识到效验字
0
设备标识:2BYTE
2BYTE
命令参数:命令报文(可以为空)
校 验 字:1BYTE、设备标识到命令参数最后一字节的逐字节异或
注:如果从长度字到校验字中有一个字节=AA,则后跟一字节00以区分命令头,长度
字不变
2.读写卡器应答格式
命令头 + 长度字 + 设备标识符 + 命令码 + 状态字 + 数据 + 校验字
命 令 头:2BYTE,0xAABB
长 度 字:2BYTE,指明后续的字节数,从设备标识到效验字
0
设备标识:2BYTE
命 令 码:2BYTE
状 态 字:1BYTE 、00 = 成功; 非零 = 失败
数 据:返回的数据(可以为空)
校 验 字:1BYTE、从长度字取反到数据内容的逐字节异或
注:如果读写卡器在100mS 内无响应或响应中断,上位机认为此次通讯失败。
三、命令详解
1. rf_init_com
功 能:设置波特率
命 令 码:0x0101
参 数:00=4800
01=9600
02=14400
03=19200
04=28800
05=38400
06=57600
07=115200
应答数据:无
2.rf_init_device_number
功 能: 设置设备标识符
命 令 码: 0x0201
参 数: 2BYTE 设备标识
备 注: 读卡器只响应设备标识符与本身相符或设备标识符等于0x0000(广播)的指
令
应答数据:无
3.rf_get_device_number
功 能: 读取设备标识符
命 令 码: 0x0301
参 数: 无
2BYTE 设备标识
4.rf_light
功 能: 设置指示灯颜色
命 令 码: 0x0701
参 数: 00 = 熄灭
01 = 红色
02 = 绿色
03 = 黄色
备 注: 读卡器上电指示灯为绿色
约1S 后变为红色,指示射频模块初始化成功
若变为黄色指示频模块初始化失败
此后指示灯颜色由外部指令控制
应答数据:无
5.rf_antenna_sta
功 能: 设置天线状态
命 令 码: 0x0C01
参 数: 00 = 关闭
非零 = 开启
备 注: 读卡器上电后天线处于开启状态
应答数据:无
6.rf_request1
功 能: 高级寻卡
命 令 码: 0x0002
参 数: 0x26 = 寻未进入休眠状态的卡
0x52 = 寻所有状态卡
rf_request、rf_anticoll、
rf_select 三条指令
应答数据: 4BYTE 卡片序列号
7.rf_request
功 能: 寻卡
命 令 码: 0x0102
参 数: 0x26 = 寻未进入休眠状态的卡
0x52 = 寻所有状态卡
应答数据: 2BYTE 卡片类型码
8.rf_anticoll
功 能: 防冲撞
命 令 码: 0x0202
参 数: 无
应答数据: 4BYTE 卡片序列号
9.rf_select
功 能: 选定卡
命 令 码: 0x0302
参 数: 4BYTE 卡片序列号
应答数据: 1BYTE 卡片容量代码
10.rf_halt
功 能: 使已选定的卡片进入休眠状态
命 令 码: 0x0402
参 数: 无
应答数据: 无
11.rf_M1_authentication2
功 能: 验证Mifare卡密钥
命 令 码: 0x0702
参 数: 1BYTE 密码验证方式(MODEL)+ 1BYTE绝对块号 + 6BYTE密钥
:验证A 密钥
:验证B 密钥
应答数据: 无
12.rf_M1_read
功 能: 读块
命 令 码: 0x0802
参 数: 1BYTE 绝对块号
应答数据: 16BYTE数据
13.rf_M1_write
功 能: 写块
命 令 码: 0x0902
参 数: 1BYTE 绝对块号 + 16BYTE写入数据
应答数据: 无
14.rf_M1_initval
功 能: 初始化钱包
命 令 码: 0x0A02
参 数: 1BYTE 绝对块号 + 4BYTE初始金额(低字节在前)
应答数据: 无
15.rf_M1_readval
功 能: 读钱包金额
命 令 码: 0x0B02
参 数: 1BYTE 绝对块号
应答数据: 4BYTE 钱包金额(低字节在前)
16.rf_M1_decrement
功 能: 扣款
命 令 码: 0x0C02
参 数: 1BYTE 绝对块号 + 4BYTE扣款金额(低字节在前)
应答数据: 无
17.rf_M1_increment
功 能: 充值
命 令 码: 0x0D02
参 数: 1BYTE 绝对块号 + 4BYTE充值金额(低字节在前)
应答数据: 无
18.rf_M1_restore
功 能: 把某一块数据调入卡片的BUFFER中
命 令 码: 0x0E02
参 数: 1BYTE 绝对块号
应答数据: 无
19.rf_M1_transfer
功 能: 把卡片的BUFFER中数据写入到卡上某一块
命 令 码: 0x0F02
参 数: 1BYTE 绝对块号
应答数据: 无
20.rf_M1_reada
功 能: 验证Mifare卡密钥并读取一块数据
命 令 码: 0x3002
参 数: 1BYTE 密码验证方式(MODEL)+ 1BYTE绝对块号 + 6BYTE密钥
:验证A 密钥
:验证B 密钥
应答数据:16BYTE数据
21.rf_M1_in
功 能:卡片进场报告,读卡器主动发出,外部CPU 接收到此信息后可跳过寻卡、防
冲撞、选卡进行后续操作
命 令 码:0x3101
发出数据:4BYTE卡片序列号
例:AA BB 0A 00 11 12 31 01 00 D6 00 C8 E8 C5
命令头 长度字 设备标识 命令码 状态字 序列号 校验字
22.rf_M1_out
功 能:卡片离场报告
命 令 码:0x3201
发出数据:无
AA BB 06 00 11 12 32 01 00 30
命令头 长度字 设备标识 命令码 状态字 校验字