Skip to content

传输流程

数据包开始信号发送序号发送序号反码数据区CRC高字节CRC低字节
SOH/STX01FE
1Byte1Byte1Byte128/1024Byte1Byte1Byte
  1. 开启是由接收方开启传输,接收方发送一个字符'C',然后进入等待(SOH)状态,如果没有回应,就会超时退出。

  2. 发送方开始时处于等待过程中,等待字符'C'。发送方收到'C'后,发送第一帧数据包,内容如下:

    SOH 00 FF Foo.c NUL[123] CRC CRC (Foo.c为文件名,NUL[123]补0)

    进入等待(ACK)状态。

  3. 接收方收到第一帧数据包后,CRC校验满足,则发送ACK。

  4. 发送方接收到ACK,又进入等待“文件传输开启”信号,即重新进入等待“C”的状态。

    上面接收方只是收到了一个文件名,现在正式开启文件传输,Ymodem支持128字节和1024字节一个数据包。128字节以(SOH)开始,1024字节以(STX)开始。

  5. 接收方又发出一个字符'C',开始准备接收文件。进入等待“SOH”或者“STX”状态。

  6. 发送方收到字符'C'后,开始发送第二帧,第二帧中的数据存放的是第一包数据。内容如下:

    (SOH/STX)(01序号)(FE反码)(128/1024字节数据)(CRC校验),等待接收方“ACK”。

  7. 接收方收到数据后,发送一个ACK,然后等待下一包数据传送完毕,继续ACK应答。直到所有数据传输完毕。

  8. 数据传输完毕后,发送方发EOT,第一次接收方以NAK应答,进行二次确认。发送方收到NAK后,重发EOT,接收方第二次收到结束符,就以ACK应答。最后接收方再发送一个字符'C'开启另一次传输,发送方在没有第二个文件要传输的情况下,发送如下数据:SOH 00 FF 00~00(共128个) CRCH CRCL,接收方应答ACK后,正式结束数据传输。

标志码

字符ASCII码16进制
SOH0x01
STX0x02
ACK0x06
NAK0x15
EOT0x04
C0x43

起始帧(133字节)

SOH + 00 + FF + filename + filesize + NULL + CRCH + CRCL

  • 起始帧是文件传输发送端发的第一条重要消息.
  • filename表示传输文件的文件名.
  • filesize表示需要传输文件的大小.
  • CRCH + CRCL 表示整条帧(去掉前三个字节)的CRC16校验.

数据帧格式

STX/SOH + [编号] + 编号的反码 + data[0] + data[1] + data[2] + … + CRCH + CRCL

  • SOH 表示有128个字节, 有的也只用SOH传输数据. STX 表示有1024个字节.
  • CRCH + CRCL 表示整条帧(去掉前三个字节)的CRC16校验. 如果传输最后一条字节不足128个字节, 则用1A填充

结束帧的数据格式

SOH + 00 + FF + NULL + NULL + … + NULL + CRCH + CRCL

Released under the GPL License.