Files
app_rf915_dump/protocol.md
2026-04-15 12:06:20 +08:00

232 lines
10 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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`
- **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 | `18` | EPC 字节数 = 值 ÷ 4 |
| 0x08 | EPC Status | `00` | 成功 |
| 0x09 | EPC Data | `11 22 33 44 55 66` | 实际 EPC |
| 0x0F | EPC CRC | `75 ce` | CRC-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`
- Payload7+N 字节7字节保留字段 + EPC Data
- Payload Checksum = `79`
- **GetRes Data 段**
```
00 bb 01 0c 00 01 00 0e 7e
```
- Card Op Resp = `01 0c`
- Internal Length = `00 01`
- Payload = `00`(选中成功标志)
#### 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`
- Payload15 字节):
| 偏移 | 字段 | 值示例 | 说明 |
|:---|:---|:---|:---|
| 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`
- **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` 用于确认不重复
## 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` |
| 写 EPC1122→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 及兼容固件