没志青年
发布于 2025-06-13 / 26 阅读
0

X、Y、Zmodem 文件传输协议

MSY32

Xmodem

  • Xmodem:8 位CRC校验,很早期的,不用了。

  • Xmodem-CRC:16 位 CRC 校验。

  • Xmodem-1K:使用1024字节数据块,提高大文件传输效率。

帧格式

图片中的是补码,不是反码!

数据帧:

字段

字节

说明

帧头

1

  • Xmodem-CRC:SOH 标识

  • Xmodem-1K:STX 标识

帧序号

1

标记帧的数据,防止数据混乱。

帧序号补码

1

用来检测帧序号是否传输出错。

数据

  • Xmodem-CRC:128

  • Xmodem-1K:1024

CRC

2

仅计算数据

字节总数:

  • Xmodem-CRC:133 Byte

  • Xmodem-1K:1029 Byte

控制命令:

控制命令

说明

SOH

0x01

128字节数据块开始

STX

0x02

1024字节数据块开始(XMODEM-1K)

EOT

0x04

传输结束

ACK

0x06

确认

NAK

0x15

否定确认/请求重发

CAN

0x18

取消传输

Xmodem 协议中无法传输文件的长度。

若数据不足一个完整的数据块(128字节或1024字节),使用填充字节来补全数据块,填充字节为 0x1A

数据传输流程

Xmodem-CRC

Xmodem-1K

Ymodem

由 Xmodem 协议改进而来。

  • Ymodem-1K

  • Ymodem-G:仅适用于可靠的数据链路。

帧格式

控制命令:

控制命令

说明

SOH

0x01

128 数据包开始

STX

0x02

1024 数据包开始

EOT

0x04

传输结束

ACK

0x06

确认

NAK

0x15

否定确认

CAN

0x18

取消传输

C

0x43

即字符 'C', 请求命令

起始帧

字段

字节

说明

帧头

1

  • Xmodem-CRC:SOH 标识

  • Xmodem-1K:STX 标识

帧序号

1

标记帧的数据,防止数据混乱。

帧序号补码

1

用来检测帧序号是否传输出错。

数据

  • Xmodem-CRC:128

  • Xmodem-1K:1024

CRC

2

仅计算数据

数据帧

字段

字节

说明

帧头

1

  • Xmodem-CRC:SOH 标识

  • Xmodem-1K:STX 标识

帧序号

1

标记帧的顺序,防止数据混乱。

帧序号补码

1

用来检测帧序号是否传输出错。

数据

  • Xmodem-CRC:128

  • Xmodem-1K:1024

CRC

2

仅计算数据

结束帧

字段

字节

说明

帧头

1

  • Xmodem-CRC:SOH 标识

  • Xmodem-1K:STX 标识

帧序号

1

标记帧的数据,防止数据混乱。

帧序号补码

1

用来检测帧序号是否传输出错。

数据

  • Xmodem-CRC:128

  • Xmodem-1K:1024

CRC

2

仅计算数据

数据传输流程

发送端(上位机) 接收端(单片机)

------------------------------------<<<------------------------------ 【C字符】

|||||||||||||||||||| 数据传输部分开始 ||||||||||||||||||||

【起始帧】------------------------------------>>>------------------------------

------------------------------------<<<------------------------------ 【ACK】

------------------------------------<<<------------------------------ 【C字符】

【数据帧1】------------------------------------>>>------------------------------

------------------------------------<<<------------------------------ 【ACK】

【数据帧2】------------------------------------>>>------------------------------

------------------------------------<<<------------------------------ 【ACK】

【数据帧3】------------------------------------>>>------------------------------

------------------------------------<<<------------------------------ 【ACK】

【EOT】 ------------------------------------>>>------------------------------

------------------------------------<<<------------------------------ 【NAK】

【EOT】------------------------------------>>>------------------------------

------------------------------------<<<------------------------------ 【ACK】

|||||||||||||||||||| 数据传输部分结束 ||||||||||||||||||||

接收端尝试接收第二个文件,若发送方没有则发送结束帧结束通信,若有则重复上面的数据传输过程

------------------------------------<<<------------------------------ 【C字符】

【结束帧】 ------------------------------------>>>------------------------------

------------------------------------<<<------------------------------ 【ACK】

Zmodem

不再是数据块传输,而是流式传输。

帧格式

数据传输流程