Xmodem、Ymodem和Zmodem协议是最常用的三种通信协议。
1.Xmodem协议是最早的,传输128字节信息块。是一种发送等待协议,具有流量控制功能。收、发方均采用包传送。每个包由包头、数据、包尾组成。
包头:包开始(SOH),包编号和包编号补码;
数据:固定的128字节;
包尾:存放校验和checksum。
2.Ymodem协议是Xmodem的改进版协议,具有传输快速稳定的优点。它可以一次传输1024字节的信息块,同时还支持传输多个文件。
Ymodem协议指的就是Ymodem-1K,除此还有Ymodem-g(没有CRC校验,不常用)。
Ymodem-1K用1024字节信息块传输取代标准的128字节传输,数据的发送会使用CRC校验,保证数据传输的正确性。它每传输一个信息块数据时,就会等待接收端回应ACK信号,接收回应后,才会继续传输下一个信息块,保证数据已经全部接收。
YModem协议是由XModem协议演变而来的,每包数据可以达到1024字节,是一个非常高效的文件传输协议,支持16位CRC校验
3.Zmodem协议是针对modem的一种错误校验协议。利用Zmodem协议,可以在modem上发送512字节的数据块。如果某个数据块发生错误,接收端会发送“否认”应答,因此,数据块就会被重传。
它是Xmodem文件传输协议的一种增强形式,不仅能传输更大的数据。而且错误率小。包含一种名为检查点重启的特性,如果通信链接在数据传输过程中中断,能从断点处而不是从开始处恢复传输。
Ymodem协议常用字符
字符 | ASCII码16进制 |
---|---|
SOH | 0x01 |
STX | 0x02 |
ACK | 0x06 |
NAK | 0x15 |
EOT | 0x04 |
C | 0x43 |
Ymodem协议的传输过程:
(这个协议常用于文件传输,比如在线升级过程中传输的bin文件或者传输一些码库文件。
在Xshell软件中的串口传输过程中就有这种传输方式)
1.起始帧的数据格式
Ymodem的起始帧并不直接传输文件的数据,而是将文件名与文件的大小放在数据帧中传输。
帧长 = 3字节数据首部+ 128字节数据+2字节CRC16位校验码=133字节
数据格式如下:
SOH + 00 + FF + filename + filesize + NULL + CRCH + CRCL
起始帧是文件传输发送端发的第一条重要消息
其中:
SOH = 0x01 表示这个数据帧中包含着128个字节的数据(STX表示1024字节,初始帧只有128个);
00表示数据帧序号,初始是00依次向下排;
FF表示帧序号的取反;
filename表示要传输的文件名;
filesize表示文件的大小;
NULL表示数据部分的128字节中除去文件名和文件大小占据的剩下的字节都用00填充;
CRCH和CRCL分别表示16位CRC校验码的高8位和低8位(注意是整条帧去掉前三个字节的CRC校验)
2.数据帧的数据结构
YModem的数据帧中会预留1024字节空间用来传输文件数据
数据格式如下:
STX/SOH + [编号] + 编号的反码 + data[0] + data[1] + data[2] + … + CRCH + CRCL
STX 01 FE data[1024] CRCH CRCL
其中:
STX = 0x02 表示这帧数据后面包含着1024字节的数据部分;
01表示帧序号,FF表示帧取反;再下一帧就是02 FD依次类推;
data[1024]表示存放着1024字节的文件数据;
CRCH+CRCL 表示整条帧(去掉前三个字节)的CRC16校验。
注意:
(如果最后一条数据的大小在128~1024字节之间,则还使用STX的1024字节传输,剩余空间全部用0x1A填充)
(如果最后一条数据的大小小于128字节,则用SOH的128字节传输,剩余空间全部用0x1A填充)
例如:
STX 01 FE data[1024] CRCH CRC
STX 02 FD data[1024] CRCH CRC
STX 03 FC data[1024] CRC CRC
STX 04 FB data[1024] CRC CRC
SOH 05 FA data[100] 1A[28] CRC CRC
3.结束帧的数据结构
YModem的结束帧数据也采用SOH的128字节数据帧
数据格式如下:
SOH + 00 + FF + NULL[128] + CRCH + CRCL
其中:
SOH = 0x01 表示这个数据帧中包含着128个字节的数据(结束帧只有128个);
结束帧的帧序也是00 FF;
结束帧的128字节的数据部分不存放任何信息,即全部用00填充;
CRCH+CRCL 表示整条帧(去掉前三个字节)的CRC16校验。
传输过程: