Github同步发布:FTDX10_WF_HUB/README.md at main · SLTPLAN/FTDX10_WF_HUB
这只是个数据格式,通讯协议可以使用USB-CDC、SPI、TCP-IP等,与转接板的功能与性能相关。
目前正在STM32F103C8T6与ESP32实现USB-CDC协议传输,可以使用我临时修改编译的wfview实现~
wvfiew下载(支持USB-CDC):https://tylk.cc/file_download/wfview-release-with-DX10-hub.zip
帧格式
┌───── 3 字节 ─────┬──── 2 字节 ────┬─── 1 字节 ──┬────── N 字节 ──────┐
│ 帧头 │ 数据长度 │ XOR 校验和 │ 数据载荷 │
│ 0x66 0xCC 0xFF │ (大端序) │ Checksum │ Payload │
└───────────────────┴──────────────┴─────────────┴─────────────────────┘
| 字段 | 长度 | 说明 |
|---|---|---|
| 帧头 | 3 B | 固定 0x66 0xCC 0xFF,用于帧同步 |
| 长度 | 2 B | 大端序,后续数据载荷的字节数 |
| 校验 | 1 B | XOR 校验和,见下方说明 |
| 载荷 | N B | 实际数据,N = Length 字段的值 |
XOR 校验和
对数据载荷所有字节做按位异或(XOR):
checksum = byte[0] ^ byte[1] ^ byte[2] ^ ... ^ byte[N-1]
接收端对载荷重新计算 XOR,与帧中的校验字节比较。相等则帧有效,不等则丢弃此帧并继续搜索下一帧头。
示例
载荷 (hex) : 01 02 03 04
XOR 校验和 : 01 ^ 02 ^ 03 ^ 04 = 04
完整帧 : 66 CC FF 00 04 04 01 02 03 04
^帧头^ ^长度^ ^校验^ ^载荷^
最大载荷长度
| 参数 | 值 | 说明 |
|---|---|---|
MAX_PAYLOAD_LEN | 4600 | 载荷最大合理长度 |
原始 SPI 数据中可能巧合出现 66 CC FF 字节序列,导致解析器误识别为帧头。对于使用USB-CDC的设备,限制最大载荷长度为 4600(略高于实际最大 4096 ± 100)可确保:
- 若误匹配后的 2 字节编码长度 ≤ 4600 → 等待后 XOR 校验失败,最多损失 1 帧
- 若编码长度 > 4600 → 立即跳过 1 字节搜索下一帧头,不损失数据
发送策略
固件将 4KB 数据分 64 字节小块依次发送,避免长时间占用 USB 缓冲区导致主循环阻塞。
解析流程
接收字节 → 追加到缓冲区
↓
在缓冲区中搜索 66 CC FF
↓ (找到)
提取长度字段 L【可选】
↓ L > 4600 ──→ 跳过 1 字节,重新搜索
↓ L ≤ 4600
等待 L + 6 字节到齐
↓
提取载荷,计算 XOR 校验和
↓ 校验通过 ──→ 输出帧,裁剪缓冲区,继续搜索
↓ 校验失败 ──→ 丢弃,裁剪缓冲区,继续搜索