YMODEM协议笔记

基本字符

 

字符 ASCII码16进制 含义说明
SOH 0x01  
STX 0x02  
ACK 0x06 接收正确应答
NAK 0x15 重传
EOT 0x04 文件传输结束
CAN 0x18 Cancel,取消传输
C 0x43  

 

帧格式

在这里插入图片描述

帧头

在这里插入图片描述

包序号

数据包序号只有1字节,因此计算范围是0~255;对于数据包大于255的,序号归零重复计算。

帧长度

【1】以SOH(0x01)开始的数据包,信息块是128字节,该类型帧总长度为133字节。

【2】以STX(0x02)开始的数据包,信息块是1024字节,该类型帧总长度为1029字节。

校验

Ymodem采用的是CRC16校验算法,校验值为2字节,传输时CRC高八位在前,低八位在后;CRC计算数据为信息块数据,不包含帧头、包号、包号反码。

 

帧结构

 

1.起始帧

Ymodem起始帧并不直接传输文件内容,而是先将文件名和文件大小置于数据帧中传输;起始帧是以SOH 133字节长度帧传输,格式如下。

在这里插入图片描述

其中包号为固定为0;Filename为文件名称,文件名称后必须加0x00作为结束;Filesize为文件大小值,文件大小值后必须加0x00作为结束;余下未满128字节数据区域,则以0x00填充。

 

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

起始帧是文件传输发送端发的第一条重要消息.

filename表示传输文件的文件名.

filesize表示需要传输文件的大小.

CRCH + CRCL 表示整条帧(去掉前三个字节)的CRC16校验.

 

2.数据帧

Ymodem数据帧传输,在信息块填充有效数据。

帧头 包号 包号反码 有效数据 校验高位 校验低位SOH/STX PN XPN DATA CRC-H CRC-L

传输有效数据时主要考虑的是最后一包数据的是处理,SOH帧和STR帧有不同的处理。

【1】对于SOH帧,若余下数据小于128字节,则以0x1A填充,该帧长度仍为133字节。

【2】对于STX帧需考虑几种情况:

●余下数据等于1024字节,以1029长度帧发送;
  ●余下数据小于1024字节,但大于128字节,以1029字节帧长度发送,无效数据以0x1A填充。
  ●余下数据等于128字节,以133字节帧长度发送。
  ●余下数据小于128字节,以133字节帧长度发送,无效数据以0x1A填充。

 

 

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

 

SOH 表示有128个字节, 有的也只用SOH传输数据.

STX 表示有1024个字节.

 

CRCH + CRCL 表示整条帧(去掉前三个字节)的CRC16校验.

 

如果文件数据的最后剩余的数据在128~1024之前,则还是使用STX的1024字节传输,但是剩余空间全部用0x1A填充,如下结构:

STX 01 FE data[1024] 1A 1A……… CRCH CRCL

有一种特殊的情况:如果文件大小小于等于128字节或者文件数据最后剩余的数据小于128字节,则YModem会选择SOH数据帧用128字节来传输数据,如果数据不满128字节,剩余的数据用0x1A填充这是数据帧的结构就变成了:

 SOH 01 FE data[ ] 1A ...1A CRCH CRCL

 

 

3.结束帧

Ymodem的结束帧采用SOH 133字节长度帧传输,该帧不携带数据(空包),即数据区、校验都以0x00填充。

在这里插入图片描述

 

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

结束帧同样以SOH开头,表示后面跟着128字节大小的数据;结束帧的帧序也认为是00 FF;结束帧的128字节的数据部分不存放任何信息,即全部用00填充。

 

文件传输过程

 

握手信号

握手信号由接收方发起,在发送方开始传输文件前,接收方需发送YMODEM_C (字符C,ASII码为0x43)命令,发送方收到后,开始传输起始帧。

 

传输流程

 

发送端                                                                                        接收端       

 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   C

SOH 00 FF "[55 53…6E 00]" "[32…30 00]'' NUL[96] CRC CRC >>>

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<    ACK

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<    C

STX 01 FE data[1024] CRC CRC>>>>>>>>>>>>>>>>>>>>>>     

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   ACK

STX 02 FD data[1024] CRC CRC>>>>>>>>>>>>>>>>>>>>>

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   ACK

STX 03 FC data[1024] CRC CRC>>>>>>>>>>>>>>>>>>>>>

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   ACK

STX 04 FB data[1024] CRC CRC>>>>>>>>>>>>>>>>>>>>>

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   ACK

SOH 05 FA data[100]  1A[28] CRC CRC>>>>>>>>>>>>>>>>

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   ACK

EOT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   NAK

EOT>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   ACK

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   C

SOH 00 FF NUL[128] CRCCRC >>>>>>>>>>>>>>>>>>>>>>>

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   ACK

你可能感兴趣的:(嵌入式软件开发)