野⽕串⼝助⼿协议发送⽂件通讯协议——XMODEM协议——YMODEM协议野⽕串⼝助⼿协议发送⽂件通讯协议
修订历史
⽇期版本更新内容
2020/6/220.0.1⾸次发布XMODEM协议
上位机是现实了XModem-CRC16和XModem-1K;
XModem-CRC16使⽤CRC-16校验⽅式,数据长度为128字节
XModem-1K使⽤CRC-16校验⽅式,数据长度为1024字节
XModem协议字段定义大文件发送
缩写⼗六进制含义
SOH0x01数据包的⼤⼩为 128 bytes
STX0x02数据包的⼤⼩为 1024 bytes
EOT0x04传输结束
ACK0x06应答
NAK0x15⾮应答
CAN0x18取消
C0x43启动传输
XModem协议格式详解
XModem-CRC16
在XModem-CRC16的数据帧中使⽤128字节空间⽤来传输⽂件数据,帧格式如下:
协议头帧序号帧序号补码数据CRC⾼8位CRC低8位SOH0x010xFE data[128]CRCH CRCL
协议头:SOH=0x01,表⽰这个数据帧包含128个字节数据;
帧序号、帧序号补码:0x01是表⽰帧序号,0xFE是它的取反,再下⼀帧数据就是0x02 0xFD,以此类推;
数据:存放了128字节的⽂件数据;
CRC⾼8位:CRC-16校验数据的⾼8位;
CRC低8位:CRC-16校验数据的低8位;
如果最后⼀帧剩余的数据⼩于128字节,则剩余空间全部⽤0x1A(Ctrl-Z)填充;
XModem-1K
在XModem-1K的数据帧中使⽤1024字节空间⽤来传输⽂件数据,帧格式如下:
协议头帧序号帧序号补码数据CRC⾼8位CRC低8位
STX0x010xFE data[1024]CRCH CRCL
协议头帧序号帧序号补码数据CRC⾼8位CRC低8位协议头:STX=0x02,表⽰这个数据帧包含1024个字节数据;
帧序号、帧序号补码:0x01是表⽰帧序号,0xFE是它的取反,再下⼀帧数据就是0x02 0xFD,以此类推;
数据:存放了1024个字节的⽂件数据;
CRC⾼8位:CRC-16校验数据的⾼8位;
CRC低8位:CRC-16校验数据的低8位;
如果最后⼀帧剩余的数据⼩于1024字节,则剩余空间全部⽤0x1A(Ctrl-Z)填充;
XModem-CRC16⽂件传输⽰例
下⾯以传输⼀个⽂件为例来具体说明XModem⽂件传输过程。
⽂件名为:foo.c,⽂件⼤⼩为:356字节;
序号发送⽅接收⽅1-C 2STX 0x01 0xFE Data[128] CRC CRC-3-ACK 4STX 0x02 0xFC Data[128] CRC CRC-5-NAK 6STX 0x02 0xFC Data[128] CRC CRC-7-ACK 8SOH 0x03 0xFB Data[100] CPMEOF[28] CRC CRC-9-ACK 10EOT-11-ACK
1. 接收⽅发送C(这⾥C是告诉发送⽅我们要使⽤CRC-16的校验⽅式)给发送⽅,告诉发送⽅可以开始传输数据了,然后发送⽅就会发送
⽂件数据给接收⽅了;
2. 当接收⽅到正确的数据后返回ACK,不正确时返回NAK,此时发送⽅将会重新发送上⼀次的数据;
3. 当⽂件传输完成后,发送⽅会发送EOT,表⽰⽂件发送完了,接收⽅返回ACK表⽰⽂件正式传输完成;
注意: 如果接收⽅不能接收⽂件后,可以发送CAN给发送⽅来取消⽂件传输。
XModem-1K⽂件传输⽰例
下⾯以传输⼀个⽂件为例来具体说明XModem⽂件传输过程。
⽂件名为:foo.c,⽂件⼤⼩为:3048字节;
序号发送⽅接收⽅1-C 2STX 0x01 0xFE Data[1024] CRC CRC-3-ACK
4STX 0x02 0xFC Data[1024] CRC CRC-序号发送⽅接收⽅
5-NAK 6STX 0x02 0xFC Data[1024] CRC CRC-7-ACK 8STX 0x03 0xFB Data[1000] CPMEOF[24] CRC CRC-9-ACK 10EOT-11-ACK
1. 接收⽅发送C(这⾥C是告诉发送⽅我们要使⽤CRC-16的校验⽅式)给发送⽅,告诉发送⽅可以开始传输数据了,然后发送⽅就会发送
⽂件数据给接收⽅了;
2. 当接收⽅到正确的数据后返回ACK,不正确时返回NAK,此时发送⽅将会重新发送上⼀次的数据;
3. 当⽂件传输完成后,发送⽅会发送EOT,表⽰⽂件发送完了,接收⽅返回ACK表⽰⽂件正式传输完成;
注意: 如果接收⽅不能接收⽂件后,可以发送CAN给发送⽅来取消⽂件传输。
YMODEM协议
YModem是XModem的升级版协议,两者最⼤的区别是YModem可以⽀持传输多个⽂件。
通常所说的YModem协议是指的YModem-1K,除此之外还有YModem-G,YModem-G ⽆需⽆错误通道的认可或当调制解调器⾃纠错时就可传送,但是⼀旦出现错误传送就会取消。,上位机没有实现这协议。
YModem协议字段定义
缩写⼗六进制含义
SOH0x01数据包的⼤⼩为 128 bytes
STX0x02数据包的⼤⼩为 1024 bytes
EOT0x04传输结束
ACK0x06应答
NAK0x15⾮应答
CAN0x18取消
C0x43启动传输
YModem协议格式详解
1.起始帧的数据格式
帧长=3字节数据⾸部+128字节数据+2字节CRC16校验码=133字节。它的数据结构如下:
协议头帧序号帧序号补码⽂件名⽂件⼤⼩空CRC⾼8位CRC低8位SOH0x000xFF filename filezise NUL CRCH CRCL
协议头:SOH=0x01,表⽰这个数据帧包含128个字节数据;
帧序号、帧序号补码:表⽰传输的帧数,⼤于0xFF后从0x00重新开始,补码是了为了确保传输的正确性;
⽂件名:要传输的⽂件名,以’\0’结束;
⽂件⼤⼩:要传输的⽂件⼤⼩,⽤字符串表⽰,紧跟在⽂件名后⾯,例如要传输1234个字节的⽂件,那么就是:0x31 0x32 0x33 0x34 0x00;
空:除去⽂件名和⽂件⼤⼩,剩下的数据使⽤0填充;
CRC⾼8位:CRC-16校验数据的⾼8位
CRC低8位:CRC-16校验数据的低8位
2.数据帧的数据格式
在YModem的数据帧中使⽤1024字节空间⽤来传输⽂件数据,它跟起始帧格式差不多,如下:
协议头帧序号帧序号补码数据CRC⾼8位CRC低8位STX0x010xFE data[1024]CRCH CRCL
协议头:STX=0x02,表⽰这个数据帧包含1024个字节数据;
帧序号、帧序号补码:0x01是表⽰帧序号,0xFE是它的取反,再下⼀帧数据就是0x02 0xFD,以此类推;
数据:存放了1024个字节的⽂件数据;
CRC⾼8位:CRC-16校验数据的⾼8位;
CRC低8位:CRC-16校验数据的低8位;
⽂件的最后⼀帧分三种特殊情况:
1. 最后⼀帧剩余的数据⼤于128字节:使⽤STX的1024字节传输,但是剩余空间全部⽤0x1A(Ctrl-Z)填充;
2. 最后⼀帧剩余的数据等于128字节:使⽤SOH的128字节传输;
3. 最后⼀帧剩余的数据⼩于128字节:使⽤SOH的128字节传输,但是剩余空间全部⽤0x1A(Ctrl-Z)填充;
3.结束帧数据结构
YModem的结束帧数据也采⽤SOH的128字节数据帧,它的结构如下:
协议头帧序号帧序号补码数据CRC⾼8位CRC低8位
SOH0x000xFF NUL[128]CRCH CRCL
结束帧以SOH开头,表⽰后⾯数据⼤⼩为128字节,但128字节的数据部分不存放任何信息,即全部⽤00填充;结束帧的帧序号也认为是0x00 0xFF。
YModem⽂件传输⽰例
下⾯以传输两个⽂件为例来具体说明YModem⽂件传输过程。
第⼀个⽂件名为:foo.c,⽂件⼤⼩为:2148字节;
第⼆个⽂件名为:b.c,⽂件⼤⼩为:2024字节。
序号发送⽅接收⽅1C 2SOH 0x00 0xFF [0x66…0x63] 0x00 [0x32…0x38] 0x00 NUL[117] CRC CRC-3-ACK
4-C 序号发送⽅接收⽅5STX 0x01 0xFE Data[1024] CRC CRC-
6-ACK
7STX 0x02 0xFC Data[1024] CRC CRC-
8-NAK
9STX 0x02 0xFC Data[1024] CRC CRC-
10-ACK
11SOH 0x03 0xFB Data[100] CPMEOF[28] CRC CRC-
12-ACK
13EOT-
14-NAK
15EOT-
16-ACK
17-C
18SOH 0x00 0xFF 0x62 0x2E 0x63 0x00 [0x32…0x34] 0x00 NUL[119] CRC CRC-
19-ACK
20-C
21STX 0x01 0xFB Data[1024] CRC CRC-
22-ACK
23STX 0x01 0xFB Data[1000] CPMEOF[24] CRC CRC-
24-ACK
25EOT-
26-NAK
27EOT-
28-ACK
29-C
30SOH 0x00 0xFF NUL[128] CRC CRC-
31-ACK
1. 接收⽅发送C给发送⽅,告诉发送⽅可以开始传输数据了,接收⽅第⼀次收到C后会传输⽂件名和⽂件⼤⼩信息;
2. 接收⽅在次发送C给发送⽅后,就正式开始⽂件内容的传输了;
3. 当接收⽅到正确的数据后返回ACK,不正确时返回NAK,此时发送⽅将会重新发送上⼀次的数据;
4. 当⽂件传输完成后,发送会发送EOT,接收⽅第⼀次收到EOT时应放回NAK,如果再次收到EOT,则返回ACK,这样做的⽬的是确保
⽂件传输结束了,⽽不是其他⼲扰数据;
5. 接收⽅接收完⼀个⽂件后,再次发送C给发送⽅,如果发送⽅还有待发送的⽂件,则会发送带有⽂件名和⼤⼩的SOH帧;如果发送⽅
没有待发送的⽂件,则会发送SOH数据帧,其中128字节数据都是0x00。
注意: 如果接收⽅不能接收⽂件后,可以发送CAN给发送⽅来取消⽂件传输。
野⽕⼤学堂——(敲⿊板)这是重点,要考的