FTDX10 ACC接口 转接板 — 数据帧协议

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 BXOR 校验和,见下方说明
载荷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_LEN4600载荷最大合理长度

原始 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 校验和
  ↓ 校验通过 ──→ 输出帧,裁剪缓冲区,继续搜索
  ↓ 校验失败 ──→ 丢弃,裁剪缓冲区,继续搜索

当前页面URL: https://tylk.cc/archives/1373
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
颜文字
洛天依9周年
洛天依夜航星
洛天依8周年
上一篇