野火串口助手协议发送文件通讯协议——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位
SOH0x010xFEdata[128]CRCHCRCL
  • 协议头: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位
STX0x010xFEdata[1024]CRCHCRCL
  • 协议头: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位
SOH0x000xFFfilenamefileziseNULCRCHCRCL
  • 协议头: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位
STX0x010xFEdata[1024]CRCHCRCL
  • 协议头: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位
SOH0x000xFFNUL[128]CRCHCRCL

结束帧以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给发送方来取消文件传输。

野火大学堂——(敲黑板)这是重点,要考的

【野火大学堂】简介

Image text

野火大学堂是一个电脑客户端,主要用来方便用户下载野火所有产品的资料,是一款集资料下载,在线文档,在线视频和资料更新推送于一体的软件,
免费登录,下载速度快过百度云。以后野火的资料发布和更新主要是通过野火大学堂来完成。
以后嵌入式学习,不妨来【野火大学堂】看看,stm32,rt1052,linux,fpga,freertos,rt-thread,ucos,liteos,emwin,emxgui,lwip等资料应有尽有,一站式学习,省时又省力。

【野火大学堂】下载地址(复制至浏览器打开)

  • 下载地址1:http://t.cn/A6w7JiKs (境外,sourceforge)
  • 下载地址2:https://cloud.embedfire.com/software/FireClass/package/FireClass-Installer-x64-v1.0.2.4.exe
  • 下载地址3:https://pan.baidu.com/s/1N6ODCAO4i2x8rXXOLMJm4Q 提取码:hn4w(百度云下载)

【野火大学堂】登录方式

  1. 微信:手机微信扫码登录(推荐);
  2. 野火论坛:论坛帐号登录,没有帐号的可以先到野火论坛www.firebbs.cn先注册个帐号(推荐);
  3. QQ:要想使用QQ扫码登录,必须先绑定论坛帐号,如果没有论坛帐号的可以先到野火论坛www.firebbs.cn先注册个帐号,并将论坛帐号与QQ绑定;
  4. Github:Gitbub帐号登录。
  • 4
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值