基本功能完成

This commit is contained in:
2026-04-15 12:06:20 +08:00
parent a9f0b97d26
commit 0ea4139f20
3 changed files with 428 additions and 229 deletions

View File

@@ -12,17 +12,17 @@
主机发送的命令帧结构如下(从 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 字节** |
| 偏移 | 长度 | 字段名 | 字节序 | 示例(打开蜂鸣器) | 说明 |
| :----- | :--- | :----------- | :------- | :----------------- | :------------------------- |
| 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
@@ -30,11 +30,10 @@
**Data 段格式**
| 偏移 | 长度 | 字段名 | 说明 |
|:---|:---|:---|:---|
| 0x00 | 1 | Status | `0x00` 成功,非零异常 |
| 0x01 | M | Response Data | 实际返回数据 |
| 偏移 | 长度 | 字段名 | 说明 |
| :--- | :--- | :------------ | :-------------------- |
| 0x00 | 1 | Status | `0x00` 成功,非零异常 |
| 0x01 | M | Response Data | 实际返回数据 |
## 3. 校验算法
@@ -44,6 +43,7 @@
**计算范围**`Data Length` 两字节+ `Data` 全部字节。
**验证示例**(打开蜂鸣器):
- Data Length: `00 02`
- Data: `cd 01`
- XOR: `00 ^ 02 ^ cd ^ 01 = ce`
@@ -59,6 +59,7 @@
**算法**CRC-16/GENIBUS
**参数**
- 多项式:`0x1021`
- 初始值:`0xFFFF`
- 输出异或:`0xFFFF`
@@ -72,49 +73,51 @@
### 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` | 参数含义略 |
| 功能 | 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` |
| 功能 | 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` |
| 功能 | SetReq Data | GetRes Data |
| :------- | :---------- | :---------- |
| 打开射频 | `90 01` | `00 80` |
| 关闭射频 | `90 00` | `00 80` |
### 4.4 工作模式与功率
| 功能 | SetReq Data | GetRes Data | 参数说明 |
|:---|:---|:---|:---|
| 设置单标签巡查 | `0f 01` | `00 80` | 模式 1主动读卡 |
| 设置被动模式 | `0f 02` | `00 80` | 模式 2被动读卡|
| 设置标签巡查 | `0f 03` | `00 80` | 模式 3 |
| 设置功率 = N | `cc N` | `00 80` | N 范围 0~9 |
| 功能 | 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` |
| 偏移 | 长度 | 字段名 | 字节序 | 说明 |
| :----- | :--- | :--------------- | :------- | :---------------------------------- |
| 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
@@ -125,22 +128,24 @@
- 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` | 固定尾部 |
| 偏移 | 字段 | 值示例 | 说明 |
| :--- | :---------------- | :------------------ | :------------------- |
| 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 数据。
@@ -149,9 +154,11 @@
**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`
@@ -160,6 +167,7 @@
```
00 bb 01 0c 00 01 00 0e 7e
```
- Card Op Resp = `01 0c`
- Internal Length = `00 01`
- Payload = `00`(选中成功标志)
@@ -169,9 +177,11 @@
**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 字节):
| 偏移 | 字段 | 值示例 | 说明 |
@@ -188,27 +198,30 @@
```
00 bb 01 49 00 06 04 08 00 11 22 00 8f 7e
```
- Card Op Resp = `01 49`
- Payload 偏移0x03中开始原 EPC `11 22` 用于确认
- 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 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` |
| 功能 | 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` |
---