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,通信

无流控,逐包确认效率低,无断点续传,无时间戳

posted on 2026-03-09 10:40  应该会好起来的  阅读(82)  评论(0)    收藏  举报

导航