嵌入式固件升级IAP及调试软件

前言

版本V1.1

支持硬件:PCAN、创芯科技、周立功两种

升级协议四种

CAN协议三种

1、V0.0模式CAN2.0,最大承载容量256kB

2、V0.1模式CAN2.0,最大承载容量16GB

3、V1.0模式CANFD,最大承载容量128GB

串口协议一种

V0.0模式串口,最大承载容量128GB

但是当前上位机默认容量16MB(给普通的单片机足够用,优点是小巧,对电脑要求小)

调试模式支持串口的XCP(我包装了一下,可以用于RS485总线模式,对指定的地址进行调试控制,类似Debug模式)

CAN通道支持CCP调试

正文

嵌入式固件升级IAP

软件帮助文档 | 当前版本操作与协议参考

|-------------------------------------------------------------------|
| 文档定位本手册说明当前 C# WinForms 程序的实际界面、默认参数、固件加载规则、升级协议、调试功能和常见排错方法。 |

项目 当前实现
运行平台 Windows,程序按 x86 构建
升级通信 串口 / RS485、CAN;CAN 默认使用 PEAK PCAN-USB
调试通信 串口 XCP、CAN CCP
固件格式 HEX、MOT/S-record、ELF、AXF、BIN、COD
文档修订 2026-08-10

**使用提示:**升级前确认目标板上的 Bootloader 与本手册所述协议版本一致。

章节导航

  • 快速开始:从通信配置到升级完成。
  • 主界面与参数:串口、CAN、PCAN 和固件边界设置。
  • 固件文件:各格式的解析、地址和容量规则。
  • 升级协议:串口 52 字节帧与 CAN 8 字节帧。
  • 调试模式:变量解析、XCP/CCP 自动读写、工程和记录。
  • 故障排查:连接失败、持续重发、变量读取失败等问题。

1. 软件概览

程序用于通过串口 / RS485 或 CAN 总线向目标单片机发送固件。升级采用逐页确认机制:程序发送当前页,收到目标设备返回的匹配 ACK 后才推进到下一页;没有收到有效 ACK 时,按界面设定的等待时间重发当前页。

当前主界面可配置串口 / RS485 和 CAN。项目中保留 USB HID 底层兼容代码,但当前参数设置界面不提供 USB HID 选择;以太网只保留未实现提示,不应作为实际通信方式使用。

|-------------------------------------------------------------------------------------|
| 重要本程序按 x86 构建,ControlCAN.dll、usbcan.dll、hidapi.dll 和 PCANBasic.dll 必须使用 32 位版本。 |

2. 快速开始

  1. 连接目标板和通信适配器,确认目标板已运行匹配协议的 APP 或 Bootloader。
  2. 打开"参数设置",选择"串口 / RS485"或"CAN",设置端口、驱动、通道和波特率。
  3. 在主界面检查设备信息和状态指示,点击"连接";连接成功后状态点变为绿色。
  4. 点击"选择固件",载入 HEX、MOT、ELF、AXF、BIN 或 COD 文件,查看日志中的字节数和地址范围。
  5. CAN 模式下核对发送 ID、接收 ID、各自 IDE 和"CAN 帧间隔 (ms)";串口模式下核对板卡代号、位号、软件协议和 ACK 超时。
  6. 点击"开始升级",等待进度条达到 100% 且日志显示升级完成。升级过程中不要断开设备、关闭程序或修改通信参数。

3. 主界面与参数设置

3.1 主界面控件

控件 用途
参数设置 打开通信与固件边界设置。连接建立后不能修改,需先断开。
连接 / 断开 打开或关闭当前通信通道,并显示设备描述、端口和波特率。
选择固件 加载并校验固件文件;地址型文件会显示地址范围。
开始升级 创建升级会话,按页发送并等待 ACK。
升级进度 按有效 ACK 推进,显示当前页数、总页数和百分比。
日志、导出日志、清空日志 显示连接、解析、重发、协议错误和完成信息;日志可保存为 TXT。
调试模式 隐藏升级主界面,打开变量调试窗口;调试窗口点击"返回"或"X"后恢复主界面。

3.2 串口 / RS485 参数

参数 当前规则
串口 从系统串口列表读取,显示 COM 号和设备的 FriendlyName / DeviceDesc。
波特率 预置 110、300、600、1200、2400、4800、9600、14400、19200、38400、57600、115200、230400、460800、921600;输入框也允许自定义正整数。单位 bps 固定显示在选项外。
电路板代号 十进制输入,范围 0 到 0xFFFFFF,占总线地址高 24 位。默认 0。
电路板位号 十进制输入,范围 0 到 255,占总线地址低 8 位。默认 0。
总线地址 计算方式为 (电路板代号 << 8) + 电路板位号,在线路上按 32 位小端发送。
软件协议 当前界面仅提供 V0.0,对应协议字段 0。
ACK 超时 串口首帧或当前页未收到有效 ACK 时的重发等待,范围 50 到 60000 ms,默认 100 ms。

3.3 CAN / PCAN 参数

参数 当前规则
设备 创芯科技 ControlCAN、周立功 usbcan、PEAK PCAN-USB;当前默认 PEAK PCAN-USB。
通道 PCAN 支持通道 1 到 16;其他驱动按设备提供的通道数显示。
波特率 50、100、125、250、500、1000 Kbps,默认 500 Kbps;单位固定为 Kbps。
发送 CAN ID / IDE 升级数据帧使用。标准帧 IDE=0 时范围 0x000-0x7FF;扩展帧 IDE=1 时范围 0x00000000-0x1FFFFFFF。
接收 CAN ID / IDE ACK 帧使用。必须同时匹配 ID 和 IDE,其他总线帧会被忽略。
CAN 帧间隔 (ms) 未收到有效 ACK 时的等待 / 重发时间,范围 0 到 60000 ms,当前默认 100 ms;收到有效 ACK 后下一页立即具备发送条件。

|----------------------------------------------------------------------------------------------------|
| 默认 CAN首次启动默认模式为 CAN、设备为 PEAK PCAN-USB、波特率 500 Kbps;升级主界面发送 ID 默认 0xF1、接收 ID 默认 0xF2,IDE 默认扩展帧。 |

3.4 固件边界参数

参数 默认值与作用
APP 起始地址 0x08020000。地址型固件的起始地址必须与该值一致;选择地址型固件后程序会按文件起始地址自动更新。
APP 最大容量 0x1C0000 字节。用于限制升级镜像;选择地址型固件后当前程序按实际镜像长度更新该值。
最大读取大小 0x1000000 字节,即 16 MiB,用于限制固件文件读取和地址跨度。

4. 固件文件与解析规则

格式 当前实现
Intel HEX (.hex) 校验每行记录,支持扩展线性地址和扩展段地址;数据按最小地址到最大地址生成连续镜像,空洞填充 0xFF。
Motorola S-record (.mot/.s19/.s28/.s37) 支持 S1、S2、S3 数据记录;S0、S5、S6、S7、S8、S9 按记录类型处理并校验每行和。
ELF / AXF 支持 32 位小端 ELF;读取可装载段和已分配节,地址冲突或文件结构越界会拒绝。
BIN (.bin) 按原始字节读取,不包含起始地址;使用"APP 起始地址"和"APP 最大容量"进行发送边界检查。
COD (.cod) 按密文二进制读取并保留密文标志;新的串口 IAP 协议拒绝密文固件,CAN/USB 代码路径可继续处理字节流。
  • 文件扩展名不区分大小写;不要只修改扩展名来转换固件格式。
  • 同一地址出现不同数据时视为文件冲突并拒绝载入。
  • 地址型文件的连续镜像会包含地址空洞,空洞内容为 0xFF。
  • 串口每页 32 字节;CAN 每帧携带 4 字节。协议页数和实际容量还受目标 Bootloader 分区限制。

5. 串口 / RS485 升级协议

串口升级帧采用小端格式。程序以 0xAA 作为帧头,接收端支持拆包、粘包和连续帧;CRC 不正确或字段不匹配的 ACK 不会推进进度。

5.1 上位机发送帧:52 字节

字节范围 字段 说明
0 帧头 固定 0xAA。
1-4 总线地址 32 位小端;高 24 位为电路板代号,低 8 位为电路板位号。
5-6 总帧长度 固定 52,16 位小端。
7 协议版本 V0.0 对应 0。
8 命令 0 表示升级数据帧。
9-12 总页数 32 位小端。
13-16 当前页数 从 0 开始,32 位小端。
17-48 程序数据 最多 32 字节;最后一页不足部分填 0xFF。
49 有效字节数 从 1 到 32,表示本页前部有效数据长度。
50-51 CRC16 对字节 0 到 49 计算,结果按小端发送。

5.2 下位机 ACK:19 字节

字节范围 字段 说明
0 帧头 固定 0xAA。
1-4 总线地址 必须与当前升级目标一致。
5-6 总帧长度 固定 19,16 位小端。
7 协议版本 必须与发送帧一致。
8 状态 0:本页接收成功;1:请求重发当前页。
9-12 总页数 应与上位机当前会话一致。
13-16 当前页数 应与上位机等待确认的页一致。
17-18 CRC16 对字节 0 到 16 计算,结果按小端发送。

5.3 串口会话流程

  1. 上位机发送当前页;发送首帧时日志会显示完整 52 字节内容及字段解析。
  2. 在 ACK 超时时间内持续接收串口数据,按帧头和长度字段组帧。
  3. 校验地址、长度、版本、状态、总页数、当前页和 CRC;全部匹配后进度加 1。
  4. ACK 状态为 1 或超时,则保持当前页并按 ACK 超时设置重发。
  5. 最后一页 ACK 有效后进度变为 100%,日志显示完成。

|--------------------------------------------------------------------------|
| 协议提示首帧可能触发目标板擦除 APP 区,ACK 可能明显晚于普通数据页;应通过 ACK 超时和重发机制等待,不要在擦除期间强制退出。 |

6. CAN 升级协议

6.1 发送数据帧:8 字节

字节范围 字段 说明
0-1 总页数 16 位小端。
2-3 当前页数 16 位小端,从 0 开始。
4-7 程序数据 每帧 4 字节;最后一帧不足部分填 0xFF。

6.2 ACK 帧:4 字节

字节范围 字段 说明
0-1 总页数 应与发送帧一致。
2-3 当前页数 应与上位机当前等待页一致。

6.3 CAN 会话规则

  • 发送帧使用界面设置的发送 ID 和发送 IDE,ACK 使用接收 ID 和接收 IDE。
  • 接收帧 ID 或 IDE 不匹配时直接忽略,不会误推进页面。
  • CAN 页面字段为 16 位,因此当前协议的页数上限为 65535 页;按每页 4 字节计算,单次 CAN 镜像理论上限约 256 KiB,实际还受目标 APP 分区约束。
  • "CAN 帧间隔"主要控制未收到有效 ACK 时的重发等待;收到正确 ACK 后下一页立即发送。驱动、目标响应和系统负载会使实际间隔增加。

7. 调试模式

在升级主界面点击"调试模式"后,主界面隐藏并打开"调试"窗口。调试窗口点击"返回"或右上角"X"都会返回升级界面,已有表格、映射文件和工程数据不因返回而清空。

7.1 解析变量地址文件

  1. 点击"选择解析文件",选择 .a2l、.elf、.axf、.map 或整理好的 .txt。
  2. 解析成功后,程序生成或加载四列 TXT 映射表:变量名、地址、数据类型、数组维度。
  3. 点击"地址映射表"可用系统默认程序打开生成的 TXT 文件。
  4. 新解析文件不会自动把前 5 个变量填入表格;右键表格可执行"添加变量""修改变量""删除变量"。
文件 可解析内容
A2L MEASUREMENT、CHARACTERISTIC、AXIS_PTS、BLOB 等定义;可读取常见数据类型和 MATRIX_DIM。
ELF / AXF 符号地址、DWARF 类型、结构体成员、数组成员和成员路径。
MAP 数据段、BSS、只读数据和常见链接器符号地址。
TXT 推荐制表符分隔四列;也兼容两列"变量名 地址"格式。后两列可为空。

7.2 变量配置

配置项 规则
显示名称 可重命名,支持简体中文;只改变调试界面显示,不改变实际符号地址。
类型 Boolean、uint_8、int8、uint16、int16、uint32、int32、uint64、int64、single、double。
权限 只读或读写。只有读写变量的值单元格允许编辑。
单位 显示在值的右侧,可填写工程单位。
读取间隔 支持 ms 和 s,换算后最快不得低于 50 ms。
启用 勾选后连接时自动轮询;未勾选的变量保留在表格中但不自动读取。

|-----------------------------------------------------------------------------------|
| 写入行为修改"值"单元格并结束编辑后只发送一次写入命令;写入成功会安排一次读取,用下位机实际值刷新显示。读写命令串行执行,避免半双工总线同时发送多条命令。 |

7.3 串口 XCP

串口调试使用当前工程定义的 XCP 传输封装,地址与升级地址相同:高 24 位为电路板代号,低 8 位为电路板位号,全部多字节字段采用小端。

传输字段 长度 说明
帧头 2 固定 0x55 0xAA。
版本 1 当前传输版本 0x01。
地址 4 32 位小端板卡地址。
帧类型 1 当前命令/响应使用 CTO 类型 0。
序号 1 每条命令递增,用于匹配响应。
负载长度 2 16 位小端。
XCP 负载 1-256 包含 PID 和命令参数。
CRC16 2 覆盖头部和负载,低字节先发送。
  • 连接命令 PID:0xFF;断开命令 PID:0xFE。
  • 读变量使用 SHORT_UPLOAD PID 0xF4,单次读取 1 到 56 字节。
  • 写变量使用 SHORT_DOWNLOAD PID 0xED,单次写入 1 到 56 字节。
  • 正常响应 PID 为 0xFF,错误响应 PID 为 0xFE;响应必须匹配地址、帧类型和序号。

7.4 CAN CCP

CAN 调试使用 CCP 客户端,当前发送和接收均按标准帧处理,发送 ID 默认 0x7E8,接收 ID 默认 0x7EA。命令响应使用 8 字节 CAN 数据区,并通过字节 1 的计数器匹配请求。

命令 PID 用途
CONNECT 0x01 建立 CCP 会话。
SET_MTA 0x02 设置读写地址。
DNLOAD 0x03 写入数据。
SHORT_UP 0x0F 读取数据。
DISCONNECT 0x07 结束 CCP 会话。

8. 调试工程与数据记录

8.1 调试工程 (.iapdbg)

  • 点击"保存调试工程"保存当前通信参数、解析符号、变量显示名、类型、权限、间隔、启用状态和值。
  • 双击 .iapdbg 文件可启动软件并恢复调试界面;程序会注册当前用户范围的文件关联,不需要管理员权限。
  • 工程文件内嵌符号映射,因此原始 ELF/A2L/MAP 移动后,已经添加的变量仍可恢复;若需要继续搜索新变量,需保证映射源文件仍可访问。
  • 调试窗口关闭时,如果已经打开过工程,会自动保存当前工程。

8.2 记录导出

  • 在调试表格勾选需要记录的变量,点击"开始记录";再次点击停止并写入 XLSX。
  • 记录文件默认保存到解析文件所在目录,命名格式为"调试yyyy.MM.dd.HH.mm.ss.xlsx"。
  • XLSX 中包含时间、序号、变量名称、单位、数据类型和读取间隔;超过单表行数上限时自动分片。
  • "打开记录"可打开最近一次生成的记录文件。

9. 日志、进度与错误处理

日志内容 含义
连接成功 显示驱动、端口/通道和波特率。
固件载入 显示文件名、字节数、地址范围和密文状态。
开始升级 显示总包数、通信 ID/IDE、等待时间或串口地址和 ACK 超时。
首帧发送内容 串口升级首次发送时显示完整 52 字节和字段解析,便于 APP 检测复位帧。
帧错误 记录 CRC 错误、ACK 状态错误、页号不匹配、ID/IDE 不匹配和超时重发。
升级完成 最后一页有效 ACK 后显示完成包数和错误摘要。

|------------------------------------------------------------------------------|
| 进度显示进度以有效 ACK 为准。程序后台持续处理通信,界面进度更新按约 50 ms 节流,因此不会因为每个 ACK 都立即刷新窗口而阻塞发送。 |

10. 故障排查

现象 常见原因 处理方法
连接失败 / 找不到串口 端口被其他程序占用、驱动未安装或端口号已变化。 关闭占用串口的程序,重新插拔设备,在"参数设置"中重新选择带设备信息的 COM 项。
PCAN 初始化失败 PCAN 驱动、PCANBasic.dll 位数或通道号不匹配。 安装 32 位 PCAN-Basic,确认程序为 x86,选择正确的 PCAN 通道和波特率。
CAN 持续重发 发送 ID/IDE、接收 ID/IDE、波特率或目标协议不一致。 先用 500 Kbps,逐项核对四个 ID/IDE;查看是否收到目标 ACK。
串口持续重发第 0 页 目标正在擦除 APP、总线地址错误、协议版本错误或 APP 未按首帧复位。 等待首帧擦除完成;核对代号/位号、V0.0 和 CRC;检查下位机是否收到 0xAA 首帧并跳转 Bootloader。
固件载入失败 格式校验失败、地址冲突、地址跨度过大或文件超过最大读取大小。 重新导出真实格式文件,检查 HEX/MOT 校验和和 ELF/AXF 是否为 32 位小端。
调试连接超时 目标未运行 XCP/CCP、调试地址或 CAN ID 错误。 先确认目标程序已注册对应协议处理函数,再核对 XCP 板卡地址或 CCP 收发 ID。
变量读取报地址或长度错误 变量地址超过 32 位、类型长度与实际内存不一致或结构体成员地址无效。 重新解析 ELF/AXF/A2L,修改变量类型和数组维度,确认目标程序链接地址与下载地址一致。
写入后值立即变化 目标程序周期任务又改写了变量,或变量被配置为只读/受保护。 确认变量权限为读写,暂停目标周期写入逻辑,观察写入后自动回读值。

11. 使用前检查清单

  • 目标板供电稳定,通信线 A/B 或 CANH/CANL 接线正确,地线共地。
  • 串口:COM 号、波特率、板卡代号、位号、协议 V0.0 和 ACK 超时正确。
  • CAN:PCAN 通道、波特率、发送/接收 ID、发送/接收 IDE 正确。
  • 固件:格式真实有效,起始地址与 APP 分区匹配,文件大小未超过目标容量。
  • 升级期间:不要切换窗口中的通信参数,不要让其他软件占用同一通信设备。
  • 调试期间:变量地址来自当前构建产物,类型和数组长度与下位机声明一致。

|---------------------------------------------------------------------------------------------------|
| 版本边界本手册描述的是当前 C# WinForms 工程的实际实现。若下位机更改帧布局、CRC、APP 起始地址、CAN 页字段或 XCP/CCP 命令处理,必须同步更新上位机和本手册。 |

12. V1.1 版本设置

本版本保留经典 CAN V0.0、经典 CAN V0.1 和 CAN FD V1.0 升级协议。主界面的"版本号"用于选择升级协议;"关于"窗口显示上位机软件版本 V1.1。

12.1 CAN FD 数据波特率

在"参数设置 → CAN"中,周立功 USBCANFD-200U 的 CAN FD 数据波特率新增 8000 Kbps。只有"调试模式 CAN FD"选择"启用"时,才显示"CAN FD 数据波特率"选项;选择"不启用"时隐藏该选项。隐藏不会清除已保存的数据波特率。仲裁波特率仍由"波特率"单独设置。

12.2 经典 CAN V0.1 的 ACK 应答时间

主界面选择 CAN V0.1 后,显示"CAN 帧间隔 (ms)"和"ACK 应答时间 (ms)"。ACK 应答时间与串口要求一致:50~60000 ms,默认 100 ms。发送前置帧、起始帧或数据帧后,超过 ACK 应答时间仍未收到正确反馈时,重发当前帧。收到正确反馈后,按 CAN 帧间隔控制相邻发送帧的最短间隔,再发送下一帧。

13. 经典 CAN V0.1 升级协议

协议版本号为 0x01,使用经典 CAN 2.0 的 8 字节数据帧。上位机采用已设置的发送 CAN ID 和 IDE,下位机反馈采用已设置的接收 CAN ID 和 IDE。先进行前置帧确认,再发送起始帧和固件数据帧;每步收到与当前发送帧完全匹配的反馈后才能继续。V0.0 协议保持独立可用。

13.1 前置帧 上位机发送与下位机反馈

字节范围 字段 说明
0 帧头 固定 0xAA。
1 协议版本 固定 0x01,表示经典 CAN V0.1。
2--4 电路板代号 24 位小端:低位字节在前,高位字节在后。
5 电路板位号 8 位无符号整数。
6--7 CRC16 对字节 0--5 计算;计算方法见第 15 章,结果按 16 位小端写入。

反馈必须逐字节回显完整的 8 字节前置帧,包括 CRC16。CRC、板号、位号或版本不匹配时,不发送起始帧;等待正确反馈或在 ACK 应答时间到期后重发前置帧。

13.2 起始帧 上位机发送与下位机反馈

字节范围 字段 说明
0--3 当前页号 32 位小端,固定为 0。
4--7 固件数据帧总数 32 位小端;N = 固件字节数向上取整除以 4,不包含前置帧和起始帧。

下位机反馈须逐字节回显该 8 字节起始帧。只有页号为 0 且总帧数与本次升级一致,才发送第 1 帧固件数据。

13.3 数据帧 上位机发送与下位机反馈

字节范围 字段 说明
0--3 当前页号 32 位小端;数据帧从 1 开始编号,依次为 1 至 N。
4--7 固件数据 每帧 4 字节;最后一帧不足 4 字节时,其余位置填 0xFF。

下位机反馈须逐字节回显当前 8 字节数据帧。页号或数据不一致时保持当前页,不推进进度;ACK 应答时间到期后重发。最后一帧的正确反馈收到后,升级完成。

13.4 会话与时间参数

ACK 应答时间为 50~60000 ms,默认 100 ms。每次发送后等待正确反馈;等待超时则重发同一帧。CAN 帧间隔为相邻两次发送之间的最短时间,范围 0~60000 ms,默认 100 ms;收到正确反馈后也须满足这一间隔才发送下一帧。第 13 章各帧均为 8 字节,起始帧和数据帧自身没有 CRC 字段。

14. CAN FD V1.0 升级协议

协议版本号为 0x10。该协议将原有串口 IAP 帧原样承载在 CAN FD 数据区中,使用主界面设置的发送和接收 CAN ID、IDE;仲裁波特率与数据波特率分别设置。每页承载最多 32 字节固件数据,页号从 0 开始。

14.1 上位机发送帧 52 字节协议数据

字节范围 字段 说明
0 帧头 固定 0xAA。
1--4 目标地址 32 位小端;高 24 位为电路板代号,低 8 位为电路板位号。
5--6 协议帧长度 16 位小端,固定 52。
7 协议版本 固定 0x10。
8 命令 固定 0,表示升级数据帧。
9--12 总页数 32 位小端;固件字节数向上取整除以 32。
13--16 当前页号 32 位小端,从 0 开始。
17--48 固件数据 最多 32 字节;末页不足部分填 0xFF。
49 有效字节数 当前页实际固件字节数,范围 1~32,不计填充。
50--51 CRC16 对协议字节 0--49 计算;计算方法见第 15 章,结果按 16 位小端写入。

CAN FD 的有效物理载荷长度没有 52 字节档位,因此发送时扩展至 64 字节,协议字节 52--63 填 0xFF。CRC 只覆盖 52 字节协议帧的前 50 字节,不包含 CRC 字段或物理填充。

14.2 下位机 ACK 19 字节协议数据

字节范围 字段 说明
0 帧头 固定 0xAA。
1--4 目标地址 32 位小端,必须与当前目标一致。
5--6 协议帧长度 16 位小端,固定 19。
7 协议版本 固定 0x10。
8 状态 0 为接收成功;1 为请求重发当前页。其他值无效。
9--12 总页数 32 位小端,必须与本次升级一致。
13--16 当前页号 32 位小端,必须对应当前等待确认的页。
17--18 CRC16 对协议字节 0--16 计算;计算方法见第 15 章,结果按 16 位小端写入。

ACK 在 CAN FD 总线上使用 20 字节物理载荷;协议只检查前 19 字节,尾部 1 字节为物理填充。只有 ID、IDE、地址、帧长、版本、CRC、总页数和页号匹配且状态为 0 时才推进一页。状态 1 请求重发当前页;没有有效 ACK 时按 ACK 应答时间重发。

14.3 会话规则

每次只发送当前页并等待反馈。ACK 应答时间为 50~60000 ms,默认 100 ms;超时后重发同一页。最后一页得到有效成功 ACK 后,进度达到 100%。CAN FD V1.0 与经典 CAN V0.0、V0.1 由主界面的版本号分别选择。

15. CRC16 计算方法

V0.1 前置帧和 V1.0 协议帧沿用现有 CRC16 算法。初值为 0xFFFF,逐字节处理,低位在先;每个字节先与当前 CRC 的低 8 位异或,再循环 8 次:若当前 CRC 最低位为 1,则右移 1 位后与 0xA001 异或;否则仅右移 1 位。每一步结果限制为 16 位。全部输入字节处理结束后,交换结果的高、低字节,再以 16 位小端写入帧的 CRC 字段。

示例:输入 ASCII "123456789" 的 9 个字节,逐位计算后为 0x4B37;交换后返回 0x374B;按小端写入的两个 CRC 字节为 0x4B、0x37。不能直接把未交换的 0x4B37 按小端写入。

字节范围 字段 说明
V0.1 前置帧 字节 0--5 CRC 写在字节 6--7。
V1.0 发送帧 字节 0--49 CRC 写在字节 50--51;64 字节物理填充不参加计算。
V1.0 ACK 字节 0--16 CRC 写在字节 17--18;20 字节物理填充不参加计算。
相关推荐
ebiobiz2 小时前
STM32F4 Unity 单元测试与多次测试失败率统计详细步骤
stm32·unity·单元测试
Brilliantwxx3 小时前
【STM32】 I2C 中断模式收发数据实战:从阻塞到中断的架构改造(AT24C02)
stm32·单片机·嵌入式硬件
李永奉3 小时前
中科蓝讯SDK开发-一拖多烧录盒烧录使用教程
单片机·嵌入式硬件·物联网·智能手机·电脑
星河单片机4 小时前
单片机成品方案:基于STM32单片机智能门禁系统
stm32·单片机·嵌入式硬件
jianqiang.xue4 小时前
【CStackGUI 实战】采集记录器:模拟采集 + 双曲线 + CSV 落盘 + 回放
单片机·嵌入式·cstackgui·c语言gui·可视化拖拽
硅基手札5 小时前
【risc-v专栏03】CSR 速查与特权架构 M/S/U
单片机·架构·risc-v
单片机设计·······5 小时前
【dz-1162】汽车前玻璃雨刮器设计
c++·单片机·嵌入式硬件
兴通物联科技5 小时前
对俄出口诚实标识 2026 时间节点与产线赋码采集技术方案
大数据·服务器·单片机·嵌入式硬件·深度学习·计算机视觉
en.en..6 小时前
STM 与 ARM
stm32