XMODEM-1K 协议流程梳理
Xmodem-1K 是 XMODEM 协议的一个高效扩展版本,主要用于串行通信中的可靠文件传输。后续将用于自己的BootLoader中。
协议背景与目的
核心设计目标:在高误码率、低带宽的串行链路上,实现简单而可靠的数据传输。
原始版本Xmodem使用 128 字节数据块 + 1 字节校验和,效率较低。协议逻辑简单,代码量小;点对点的半双工通信;数据被分为固定大小的“块”进行传输;错误校验;等待式ARQ。
Xmodem-1K :数据块大小提升至 1024 字节(1KB);支持 CRC-16 校验(更可靠的错误检测);使用不同起始字符以区分协议版本。
数据包结构
每个数据包的格式如下(共1029字节)
|
字段 |
长度 |
说明 |
|
起始字符 |
1 字节 |
STX(0x02) —— 区别于标准XMODEM 的 SOH(0x01) |
|
包序号 |
1 字节 |
从 1 开始递增,模 256 循环 |
|
包序号反码 |
1 字节 |
序号按位取反 |
|
数据 |
1024 字节 |
实际传输内容;若不足 1024 字节,末尾用 0x1A(SUB)填充 |
|
CRC 校验 |
2 字节 |
CRC-16(多项式 0x1021),高位在前 |
控制字符定义
|
字符 |
十六进制 |
含义 |
|
SOH |
0x01 |
标准 XMODEM 起始(128B 包) |
|
STX |
0x02 |
Xmodem-1K 起始(1024B 包) |
|
EOT |
0x04 |
传输结束 |
|
ACK |
0x06 |
确认(接收成功) |
|
NAK |
0x15 |
否认(请求重传或启动) |
|
CAN |
0x18 |
取消传输(通常连发 2 次) |
|
C |
0x43 |
请求使用 CRC 模式(包括 Xmodem-1K) |
工作流程
接收方发起传输:
发送 C(表示支持 CRC 模式)
发送方响应:
收到 C → 启动 Xmodem-1K + CRC 模式
发送第一个数据包(STX + 序号=1 + ~1 + 1024B数据 + CRC)
接收方处理:
校验序号、反码、CRC
正确 → 发送 ACK
错误 → 发送 NAK,请求重传当前包
继续传输:
发送方收到 ACK → 发送下一包(序号+1)
最后一个包发完 → 发送 EOT
结束确认:
接收方收到 EOT → 回复 ACK,传输完成
错误处理与重传机制
序号校验:检查 seq + (~seq) == 0xFF,防止序号错乱
CRC 校验:比简单校验和更严格
重传策略:接收方发 NAK → 发送方重发当前包,接收方可根据包序判断是否重复包处理
超时机制:发送方等待 ACK
总结
简单,校验完整,广泛应用固件升级,bootloader,通信
无流控,逐包确认效率低,无断点续传,无时间戳
浙公网安备 33010602011771号