1. 简介
YModem协议是Xmodem协议的升级版本,传输数据的大小增加了,可达每帧数据传输1024字节,可作为一个高效的文件数据传输协议。
2. 特点
- 传输数据量大,可达1024字节;
- 错误检验方式:使用循环冗余码校验(CRC校验)。
3. 相关字符和帧格式说明
3.1 字符说明
3.2 帧格式说明
3.2.1 帧格式
帧格式 | |||||
数据包开始信号 (1字节) | 发送序号 (1字节) | 发送序号补码 (1字节) | 数据区 (128/1024字节) | CRC高字节 (1字节) | CRC低字节 (1字节) |
SOH/STX | index | ~index | … | … | … |
STX/SOH | 发送128字节/发送1024字节 |
CRCL | 16位CRC校验码的低8位 |
3.2.2 起始帧(133字节)
起始帧 | |||||
SOH | 00 | FF | filename[]+filesize[]+NULL[](共128字节) | CRCH | CRCL |
filename[] | 存放文件名(存放文件名的十六进制),文件名后一位存放0x00作为结束标志。 |
filesize[] | 存放文件的大小,后加0x00作为结束标志。 |
NULL[] | 表示剩下的字节填充0x00 |
CRCH | 16位CRC校验码的高8位 |
CRCL | 16位CRC校验码的低8位 |
3.2.3 数据帧(133字节/1029字节)
数据帧 | |||||
STX/SOH | [帧序号] | [帧序号的反码] | data[0]+data[1]+data[2]+…..(128字节/1014字节) | CRCH | CRCL |
STX/SOH | 发送128字节/发送1024字节 |
data | 如果传输数据大小不足128字节,则剩余部分全部填充1A |
CRCH | 16位CRC校验码的高8位 |
CRCL | 16位CRC校验码的低8位 |
3.2.4 结束帧(133字节)
结束帧 | |||||
SOH | 00 | FF | NULL+NULL+NULL+…..+NULL(128字节) | CRCH | CRCL |
NULL | 结束帧NULL全部填入0x00 |
4. 传输流程说明
图1. 传输流程示意图
注意的点:
1. 帧的发送之前,都是通过接收端发送字符‘c’来请求;
2. 接收端接收到帧之后,都会进行一次ACK应答。
流程文字说明:
1. 接收方开启传输,接收方发送一个字符’c’,进入等待(SOH)状态,没回应,超时退出;
2. 发送方开始时处于等待状态,等待字符’c’。若发送方收到’C’后,发送第一帧(起始帧)发送完毕后,进入等待(ACK)状态;
3. 接收方收到第一帧数据包后,进行CRC校验,校验通过,则发送ACK;
4. 发送方收到ACK,又进入等待“文件传输开启”信号,进入等待’c’状态;
5. 接收方又发出一个字符’c’,开始准备接收文键。进入等待SOH或STX状态;
6. 发送方收到字符’c’后,开始发送数据帧;
7. 接收方收到数据后,发送一个ACK,若要传输数据包含多帧数据,继续ACK应答,直到所有数据传输完毕;
8. 数据传输完毕后,发送方发送EOT,第一次···以NACK应答,进行二次确认。发送方收到NAK后,重发EOT,接收方第二次收到结束符,就发送ACK应答。最后接收方在发送一个字符’c’开启另一次传输,发送方在没有第二个文件要传输的情况下,发送结束帧,正式结束数据传输。