YModem传输形式:YModem,YModem-1K,YModem-g。
YModem-1k用124字节信息快传输取代标准的128字节传输,数据使用CRC教研,保证数据传输的准确性。
YModem-g取消了数据的CRC校验码,发送完一个数据块信息后,不会等待接受度蛋的ACK信号,而是直接传输下一个数据块。
通常所说的都是YModem或者YModem-1K。
1.起始帧格式
SOH 00 FF filename[] filesize[] NULL[] CRCH CRCL
SOH 00 FF 为帧头,中间是128字节的数据,尾部是16位CRC校验。
SOH:0x01 表示数据帧包含128字节内容
00:表示数据帧序号,起始帧为00,第一镇为01
FF:帧序号的取反
filename:文件名后跟00表示文件名结束 如foo.c,66 6F 6F 2E 63 00
filesize:文件的大小后跟00表示文件结束 如1024Byte,34 30 30 00,即0x400的字符表示
NULL:数据部分128字节,除去文件名和文件大小,剩余的字节数全部用00填充
CRC:只计算数据区
2数据帧格式
STX 01 FE data[1024] CRCH CRCL
STX:0x02 表示数据帧后面包含1024字节数据
01:表示第一帧数据
FE:01的取反
data:1024字节的数据
CRC:1024字节数据的校验码
如果文件数据最后声音忽的数据在128~1024之间,则韩式使用STX的1024字节传输,但是剩余空间用0x1A填充:
STX num -num data[] 1A...1A CRCH CRCL
如果文件大小小于128字节,则会用SOH数据帧来传输,如果不满128字节剩余的就用0x1A来填充。
SOH 01 FE data[] 1A...1A CRCH CRCL
如果文件最后的一帧数据小于128字节。
SOH num ~num data[] 1A...1A CRCH CRCL
3结束帧数据结构
结束帧数据也采用SOH128字节数据帧,结构如下:
SOH 00 ff NUM[128] CRCH CRCL
结束帧数据全部用00填充。
4文件传输过程
假设有一个文件foo.c,大小为4196Byte ,0x1064字节的文件。则其传输过程如下:
发送端 接收端
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< C //接收端发送大写字母C启动传输
SOH 00 FF "foo.c" 1064 NUL[118] CRCH CRCL>>>>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ACK
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< C //收到第0帧数据后,反馈ACK 以及C启动第一帧传输
STX 01 FE data[1024] CRCH CRCL>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ACK
STX 02 FD data[1024] CRCH CRCL>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ACK
STX 03 FC data[1024] CRCH CRCL>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ACK
STX 04 FB data[1024] CRCH CRCL>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ACK
SOH 05 FA data[100] 1A[28] CRCH CRCL>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ACK
EOT>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< NAK
EOT>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ACK
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< C
SOH 00 FF NUL[128] CRCH CRCL>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ACK
信号数据及含义如下
符号 | 数值 | 含义 |
---|---|---|
SOH | 0x01 | 128字节数据 |
STX | 0x02 | 1024字节数据 |
EOT | 0x04 | 结束传输 |
ACK | 0x06 | 回应 |
NAK | 0x15 | 不回应 |
CA | 0x18 | 传输中止 |
C | 0x43 | 请求数据包 |
CA中止传输信号由发送端发送