10 KiB
MT6 RFID 读卡器 USB HID 私有协议参考文档(最终修正版)
1. 概述
本文档描述了一款 MT6 系列 RFID 读卡器(型号 MT6_RF915_RW_WY)通过 USB HID 接口与主机通信的私有协议。所有数据交互均使用 USB HID Feature Report(控制传输),Report 长度为 256 字节。
通信过程遵循固定的四包模型(SetReq / SetRes / GetReq / GetRes),其中 SetReq 和 GetRes 包含有效载荷,另外两个为固定应答包,底层驱动已自动处理。
2. 通用帧格式
2.1 SetReq(主机 → 设备,Report ID = 0x01)
主机发送的命令帧结构如下(从 Report ID 后开始计算偏移)。SetReq 必须填充至 256 字节,不足部分用 0x00 补齐。
| 偏移 | 长度 | 字段名 | 字节序 | 示例(打开蜂鸣器) | 说明 |
|---|---|---|---|---|---|
| 0x00 | 1 | Report ID | - | 01 |
固定 0x01 |
| 0x01 | 4 | Fixed | - | 00 00 00 00 |
固定 |
| 0x05 | 2 | Frame Length | 大端 | 00 07 |
从Constant到Data的总字节数 |
| 0x07 | 2 | Constant | - | 00 02 |
固定 0x00 0x02 |
| 0x09 | 2 | Data Length | 大端 | 00 02 |
后续数据负载的字节数 |
| 0x0B | N | Data | - | cd 01 |
实际数据负载 |
| 0x0B+N | 1 | Checksum | - | ce |
校验字节,算法见第 3 节 |
| 0x0C+N | 1 | End Marker | - | 03 |
固定 0x03 |
| 剩余 | - | Padding | - | 00 ... |
填充至 256 字节 |
2.2 GetRes(设备 → 主机,Report ID = 0x03)
设备返回的数据帧结构与 SetReq 相同,但 GetRes 无需填充至 256 字节。
Data 段格式:
| 偏移 | 长度 | 字段名 | 说明 |
|---|---|---|---|
| 0x00 | 1 | Status | 0x00 成功,非零异常 |
| 0x01 | M | Response Data | 实际返回数据 |
3. 校验算法
3.1 外层帧校验
算法:逐字节异或(XOR)
计算范围:Data Length 两字节+ Data 全部字节。
验证示例(打开蜂鸣器):
- Data Length:
00 02 - Data:
cd 01 - XOR:
00 ^ 02 ^ cd ^ 01 = ce✅
3.2 EPC 操作内部校验
3.2.1 Payload Checksum(累加和)
算法:字节累加模 256
计算范围:从 Card Op Command 字段开始,到 Payload 末尾(不含校验字节自身)。
3.2.2 EPC CRC
算法:CRC-16/GENIBUS
参数:
- 多项式:
0x1021 - 初始值:
0xFFFF - 输出异或:
0xFFFF - 输入/输出反转:
false
计算范围:EPC Len Indicator(1 字节)+ EPC Status(1 字节)+ EPC Data(N 字节)
4. 已知命令集
以下列出所有已分析命令,仅给出 Data 段内容(不含外层帧头),实际发送时需按第 2 节格式包装并填充至 256 字节。
4.1 系统与配置类命令
| 功能 | SetReq Data | GetRes Data | 备注 |
|---|---|---|---|
| 读版本号 | c0 |
00 + ASCII 字符串 |
|
| 恢复出厂设置 | cf |
00 80 |
|
| 读取格式 | 83 |
00 01 00 00 00 01 01 00 00(示例) |
返回当前格式参数 |
| 设置格式 | 82 0f 00 00 00 01 01 01 00 |
00 80 |
参数含义略 |
4.2 蜂鸣器控制
| 功能 | SetReq Data | GetRes Data |
|---|---|---|
| 打开蜂鸣器 | cd 01 |
00 80 |
| 关闭蜂鸣器 | cd 00 |
00 80 |
4.3 射频电源控制
| 功能 | SetReq Data | GetRes Data |
|---|---|---|
| 打开射频 | 90 01 |
00 80 |
| 关闭射频 | 90 00 |
00 80 |
4.4 工作模式与功率
| 功能 | SetReq Data | GetRes Data | 参数说明 |
|---|---|---|---|
| 主动读卡 | 0f 01 |
00 80 |
触发单次寻卡 |
| 被动读卡 | 0f 02 |
00 80 |
持续等待标签 |
| 设置单标签巡查 | 0f 01 |
00 80 |
模式 1 |
| 设置被动模式 | 0f 02 |
00 80 |
模式 2 |
| 设置多标签巡查 | 0f 03 |
00 80 |
模式 3 |
| 设置功率 = N | cc N |
00 80 |
N 范围 0~9 |
4.5 EPC 操作
所有 EPC 相关命令(读、选中、写)的 SetReq/GetRes Data 段均遵循以下内部结构:
| 偏移 | 长度 | 字段名 | 字节序 | 说明 |
|---|---|---|---|---|
| 0x00 | 1 | Command/Status | - | 固定 SetReq=ce,GetRes=00(成功) |
| 0x01 | 1 | Magic | - | 固定 bb |
| 0x02 | 2 | Card Op Command | - | 操作码(见各子命令) |
| 0x04 | 2 | Internal Length | 大端 | 后续 Payload 的字节数 |
| 0x06 | N | Payload | - | 具体操作参数 |
| 0x06+N | 1 | Payload Checksum | - | 累加和(模 256) |
| 0x07+N | 1 | End Marker | - | 固定 7e |
4.5.1 读取 EPC
Card Op Command:00 22
-
SetReq Data:
ce bb 00 22 00 00 22 7e- Internal Length =
00 00 - Payload Checksum =
22
- Internal Length =
-
GetRes Data 段(有卡):
00 bb 02 22 00 0b d3 18 00 11 22 33 44 55 66 75 ce c2 7e偏移 字段 值示例 说明 0x00 Status 00成功 0x01 Magic bb固定 0x02 Card Op Resp 02 22读卡成功标志 0x04 Internal Length 00 0b后续数据长度(大端) 0x06 RSSI d3信号强度 0x07 EPC Len Indicator 18EPC 字节数 = 值 ÷ 4 0x08 EPC Status 00成功 0x09 EPC Data 11 22 33 44 55 66实际 EPC 0x0F EPC CRC 75 ceCRC-16/GENIBUS 0x11 Payload Checksum c2累加和 0x12 End Marker 7e固定尾部 -
无卡时:Card Op Resp =
01 ff,Payload 仅含 RSSI 及累加和,无 EPC 数据。
4.5.2 选中卡
Card Op Command:00 0c
-
SetReq Data 示例(选中 EPC
11 22):ce bb 00 0c 00 09 01 00 00 00 20 10 00 11 22 79 7e- Internal Length =
00 09 - Payload(7+N 字节):7字节保留字段 + EPC Data
- Payload Checksum =
79
- Internal Length =
-
GetRes Data 段:
00 bb 01 0c 00 01 00 0e 7e- Card Op Resp =
01 0c - Internal Length =
00 01 - Payload =
00(选中成功标志)
- Card Op Resp =
4.5.3 写入 EPC
Card Op Command:00 49
-
SetReq Data 示例(将 EPC
11 22改为11 23):ce bb 00 49 00 0f 00 00 00 00 01 00 00 00 03 ca 9e 08 00 11 23 00 7e- Internal Length =
00 0f - Payload(15 字节):
偏移 字段 值示例 说明 0x00 Reserved 00 00 00 00 01 00 00 00保留 0x09 Word Count 03= 2 + 新 EPC 字节数/2 0x0A Old EPC CRC ca 9e原卡 EPC 的 CRC-16/GENIBUS(大端) 0x0C EPC Len Indicator 08新 EPC 字节数 = 值 ÷ 4 0x0D EPC Status 00固定 0x0E New EPC Data 11 23新 EPC - Payload Checksum =
00
- Internal Length =
-
GetRes Data 段:
00 bb 01 49 00 06 04 08 00 11 22 00 8f 7e- Card Op Resp =
01 49 - Payload 偏移0x03中开始原 EPC
11 22用于确认不重复
- Card Op Resp =
5. 附录:命令速查表(SetReq Data 部分)
| 功能 | Data(十六进制) |
|---|---|
| 读版本号 | c0 |
| 恢复出厂设置 | cf |
| 读取格式 | 83 |
| 设置格式 | 82 0f 00 00 00 01 01 01 00 |
| 打开蜂鸣器 | cd 01 |
| 关闭蜂鸣器 | cd 00 |
| 打开射频 | 90 01 |
| 关闭射频 | 90 00 |
| 主动读卡 | 0f 01 |
| 被动读卡 | 0f 02 |
| 设置单标签巡查 | 0f 01 |
| 设置被动模式 | 0f 02 |
| 设置多标签巡查 | 0f 03 |
| 设置功率 = 8 | cc 08 |
| 读取 EPC | ce bb 00 22 00 00 22 7e |
| 选中卡(EPC=1122) | ce bb 00 0c 00 09 01 00 00 00 20 10 00 11 22 79 7e |
| 写 EPC(1122→1123) | ce bb 00 49 00 0f 00 00 00 00 01 00 00 00 03 ca 9e 08 00 11 23 00 7e |
文档版本:2.3
最后更新:2026-04-15
适用设备:MT6_RF915_RW_WY 及兼容固件