阡陌 发表于 2024-1-11 02:33:36

YMODEM 协议


YMODEM 协议是一种高效的文件传输协议,通常用于调制解调器之间的数据传输。YMODEM 协议的产生是为了解决 XMODEM 协议存在的一些问题。相较于 XMODEM,YMODEM 协议在数据传输效率和稳定性上有所改进。

YMODEM 协议的主要特点包括:

1. 数据包大小:YMODEM 协议支持以 1024 字节(或 1K)的块进行数据传输,这比 XMODEM 协议通常使用的 128 字节块要大得多,从而提高了传输效率。
2. 错误纠正:YMODEM 协议采用循环冗余校验(CRC16)进行错误检测,并在发现错误时请求重发数据块,以确保数据的正确传输。
3. 批处理模式:YMODEM 协议支持批处理模式,允许使用单个命令传输多个文件,这在传输大量文件时非常有用。
4. 文件名传输:在发送文件数据之前,YMODEM 协议会先发送文件名和文件大小等信息,以便接收方能够正确地保存文件。

YMODEM 协议中定义了几种**关键字**:

| 关键字 | 值   | 说明                     |
| ------ | ---- | ------------------------ |
| SOH    | 0x01 | 协议头(128 bytes 类型) |
| STX    | 0x02 | 协议头(1K 类型)      |
| EOT    | 0x04 | 传输结束               |
| ACK    | 0x06 | 接收响应               |
| NAK    | 0x15 | 失败响应               |
| CAN    | 0x18 | 取消传输               |
| C      | 0x43 | 开启文件传输             |
|CPMEOF|0x1A|数据补齐填充字符(^Z,控制字符 Z)|

YMODEM **传输协议**:

SOH

STX

index 是帧序号,0 ~ 255,传输时递增。

index2 是index取反,也即:index2 = ~index = 255 - index

crc16 校验数据域

在 YMODEM 协议的基本流程中,发送方会先发送一个起始帧,其中包含文件名和文件大小等信息。接收方在收到起始帧后,会发送一个确认信号(ACK)。然后,发送方开始以 1024 字节的块发送文件数据,每发送一个数据块后都会等待接收方的 ACK 信号。如果接收方成功接收到数据块并通过 CRC 校验,则发送 ACK 信号;否则,发送否定确认信号(NAK)请求重发。当文件传输完成后,发送方会发送一个结束帧(EOT),接收方在收到结束帧后会再次发送 ACK 信号进行确认。

**交互序列图**:

![](https://file.mculoop.com/images/2024/01/10/202401101847409.png)

![](https://file.mculoop.com/images/2024/01/10/202401101848044.png)

传输时先发送一个 128 字节的文件信息块,将文件名和文件大小发送给设备。

SOH   00   FF            CRCH   CRCL

文件名,如文件名 foo.c,它在数据帧中存放格式为:66 6F 6F 2E 63 00

文件大小,例如大小为 400 bytes,它在数据帧的存放格式为:34 30 30 00,即 “400”。(不同的软件可能有所却别)

表示剩下的字节都用 00 填充

传输文件内容时,如果文件数据的最后剩余的数据在 128 ~ 1024 之间,则还是使用 STX 的 1024 字节传输;如果文件大小小于等于 128 字节,则选择 SOH 数据帧用 128 字节来传输数据。若数据不足一帧,用 CPMEOF 来填充。


协议文本原件《X/YMODEM Protocol Reference June 18 1988》:
**** Hidden Message *****
页: [1]
查看完整版本: YMODEM 协议