百度百科对Ymodem 协议描述
(Ymodem) Ymodem 协议。Ymodem是一种错误纠正协议。使用较大数据块的调制解调采用这种协议,以获得更高的工作效率。采用Ymodem协议的调制解调器以1024字节数的块发送数据。成功接收的不会被确认。有错误的块被确认(NAK),并重发。Ymodem类似于Xmodem-1K,不同之处是提供批处理模式(batch mode)。在批处理模式下,可以使用一个命令发送一些文件。Ymodem使用循环冗余码校验作为错误校验方式。
等同于Xmodem-1K 加批文件传送的一种文件传送协议 ( 也称 Ymodem Batch) 。它比标准 Xmodem 要快,而且在发送数据之前发送文件名。 Ymodem-G 无需无错误通道的认可或当调制解调器自纠错时就可传送,但是一旦出现错误传送就会取消。
YModem的传输定义的常量
符号 | 数值 | 含义 |
SOH | 0x01 | 128字节数据帧,协议类型 |
STX | 0x02 | 1024字节数据帧,协议类型 |
EOT | 0x04 | 结束传输,发送者发送 |
ACK | 0x06 | 接收者处理成功回应,发送者发现下一包数据(1024或者128) |
NAK | 0x15 | 接收者处理失败回应,发送者需要重发此1024或者128数据 |
CA | 0x18 | 传输中止 |
C | 0x43 | 接收者准备接收时会发连续的C,发送者接收到C开始发送 |
1、起始帧的数据格式
YModem的起始帧并不直接传输文件的数据,而是将文件名与文件的大小放在数据帧中传输,
它的帧长=3字节数据首部+128字节数据+2字节CRC16校验码=33字节。pNum表示数据帧号,2字节长度,从0x00到0xFF循环,文件信息为第一帧数据所以是00,pNumNot表示数据帧号取反,2字节长度,NUL[0] 表示文件名称+文件长度不足128字节时候,用0补齐128字节。它的数据结构如下:
SOH pNum pNumNot [filename] [filezise] NUL[ 0] CRCH CRCL
2、数据帧的数据格式
YModem数据帧有两种长度SOH和STX,两种格式除了数据帧长度不同外无较大区别。由于YModem采用每帧数据校验一次CRC,所以STX传输会减少校验,但是重发时候会增加重发数据量。
SOH pNum pNumNot data[128] CRCH CRCL
STX pNum pNumNot data[1024] CRCH CRCL
3、数据结束帧数据格式
YModem的结束帧数据也采用SOH的128字节数据帧,pNum固定为00,pNumNot固定为FF,它的结构如下:
SOH 00 FF NUL[128] CRCH CRCL
4、取消发送帧数据格式
直接发送5个CA,即1818181818
5、文件传输过程
以SOH举例传输过程。STX只需要将文件信息帧,结束帧保留,文件内容包替换为STX即可