下载此文档

Xmodem协议详解以及源代码剖析.docx


文档分类:IT计算机 | 页数:约13页 举报非法文档有奖
1/13
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/13 下载此文档
文档列表 文档介绍
NAK 0x15
研究Xmodem协议必看的11个问题
Xmodem协议作为串口数据传输主要的方式之一,恐怕只有做过bootloader的才 有机会接触一下,网上有关该协议的内容要么是英语要么讲解不详细。 笔者以前
写bootloader时研究 过1k-Xmodem,参考了不少相关资料。这里和大家交流一下我 对Xmodem的理解,多多指 教!
. Xmodem协议是什么?
XMODEM协议是一种串口通信中 广泛用到的异步文件传输协议。分为标准 Xmodem和1k-Xmodem两种,前者以128字节块的形式传输数据,后者字节块为1k 即1024字节,并且每个块都使用一个校验和过程来进行错误检测。在校验过程中 如果接收方关于一个块的 校验和与它在发送方的校验和相同时,接收方就向发送方 发送一个确认字节(ACK。由于Xmodem需要对每个块都进行认可,这将导致性能 有所下降,特别是延时比较长的场合,这种协议显得效率更低。
除了 Xmodem,还有Ymodem , Zmodem协议。他们的协议内容和 Xmodem类 似,不同的是Ymodem允许批处理文件传输,效率更高;Zmodem则是改进的了 Xmodem,它只需要对 损坏的块进行重发,其它正确的块不需要发送确认字节。减少 了通信量。
. Xmodem协议相关控制字符
SOH 0x01
STX 0x02
EOT 0x04
ACK 0x06
CAN 0x18
NAK 0x15
CTRLZ 0x1A
.标准Xmodem协议(每个数据包含有128字节数据帧格式
| SOH |信息包序号|信息包序号的补码|数据区段|校验和|
I I I I I I
. 1k-Xmodem (每个数据包含有1024字节数据帧格式
I STX I信息包序号I信息包序号的补码I数据区段I校验和I
I I I I I I
.数据包说明
对于标准Xmodem协议来说,如果传送的文件不是128的整数倍,那么最后一个 数据包的有效内容肯定小于帧长,不足的部分需要用CTRL- Z(0x1A来填充。这里 可能有人会问,,mcu收到后遇到 0x1A字符会怎么处理?其实如果传送的是文本文件,那么接收方对于接收的内容是 很容易识别的,因为CTRL-Z不是前128个ascii码,不是通用可见字符,如果是二进 制文件,mcu其实也不会把它当作代码来执 行。哪怕是excel文件等,由于其内部会 有些结构表示各个字段长度等,所以不会读取多余的填充字符。否则Xmodem太弱 了。对于1k-Xmodem,同上理。
.如何启动传输?
#define NAK 0x15
传输由接U方启动,方法是向发送方发送"C"或者NAK(注意哦,这里提到的 NAK是用来启动传输的。以下我们会看到NAK还可以用来对数据产生重传的机 制。接收方发送NAK信号表示接收方打算用累加和校验;发送字符"C"则表示接 收方想打算使用CRC校验(具体校验 规则下文Xmodem源码,源码胜于 雄辩。
.传输过程
当接收方发送的第一个"C"或者NAK到达发送方,发送方认为可以发送第一个 数据包,传输已经启动。发送方接着应该将数据以每次128字节的数据加上包头,包 号包号补码,末尾加上校验和,打包成帧格式传送。 发送方发了第一包后就等待接 收方的确认字节ACK ,收到接收方传来的ACK确认,就认为数据包被接收方正确接 收,并且接收方要求发送方继续发送下一个包;如果发送方收到接收方传来的 NAK(这里,NAK用来告诉发送方重传,不是用来启动传输 字节,则表示接收方请求 重发刚才的数据包;如果发送方收到接收方传来的CAN字节,则表示接收方请求无 条件停止传输。
.如何结束传输?
如果发送方正常传输完全部数据,需要结束传输,正常结束需要发送方发送 EOT字节通知接收方。接收方回以ACK进行确认。当然接收方也可强制停止传 输,当接收方发送CAN字节给发送方,表示接收方想无条件停止传输,发送方收到 CAN后,不需要再发送EOT确认(因为接收方已经不想理它了,呵呵。
.特殊处理
虽然数据包是以SOH来标志一个信息包的起始的,但在SOH位置上如果出现 EOT则表示数据传输结束,再也没有数据传过来。
接收方首先应确认数据包序号的完整性,通过对数据包序号取补,然后和数据包 序号的补码异或,结果为0表示正确,结果不为0则发送NAK请求重传。接收方确 认数据包序号正确后,然后检查是否期望的序号。如果不是期望得到的数据包序号 ,
NAK 0x15
#define NAK 0x15
说明发生严重错误,应该发送一个CAN来中止传输。如果接收

Xmodem协议详解以及源代码剖析 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数13
  • 收藏数0 收藏
  • 顶次数0
  • 上传人cby201601
  • 文件大小17 KB
  • 时间2021-10-20