研究Xmodem协议必看11个问题
原文地址:~type=v5_one&label=rela_prevarticle
Xmodem协议作为串口数据传输关键方法之一,恐怕只有做过bootloader才有机会 接触一下,网上相关该协议内容要么是英语要么讲解不具体。笔者以前写bootloader时研究过1k-Xmodem,参考了不少相关资料。这里和大家交流一下我对Xmodem了解,多多指教!
1.Xmodem协议是什么?
XMODEM协议是一个串口通信中 广泛用到异步文件传输协议。分为标准Xmodem和1k-Xmodem两种,前者以128字节块形式传输数据,后者字节块为1k即1024字节,而且 每个块全部使用一个校验和过程来进行错误检测。在校验过程中假如接收方相关一个块校验和和它在发送方校验和相同时,接收方就向发送方发送一个确定字节 (ACK)。因为Xmodem需要对每个块全部进行认可,这将造成性能有所下降,尤其是延时比较长场所,这种协议显得效率更低。
除了Xmodem,还有Ymodem,Zmodem协议。她们协议内容和Xmodem类似,不一样是Ymodem许可批处理文件传输,效率更高;Zmodem则是改善了Xmodem,它只需要对损坏块进行重发,其它正确块不需要发送确定字节。降低了通信量。
2.Xmodem协议相关控制字符
SOH 0x01
STX 0x02
EOT 0x04
ACK 0x06
NAK 0x15
CAN 0x18
CTRLZ 0x1A
3.标准Xmodem协议(每个数据包含有128字节数据)帧格式
_______________________________________________________________
| | | | | |
| SOH | 信息包序号 | 信息包序号补码 | 数据区段 | 校验和 |
|_____|____________|___________________|__________|____________|
4.1k-Xmodem(每个数据包含有1024字节数据)帧格式
_______________________________________________________________
| | | | | |
| STX | 信息包序号 | 信息包序号补码 | 数据区段 | 校验和 |
|_____|____________|___________________|__________|____________|
5.数据包说明
对于标准Xmodem协议来说,假如传送文件不是128整数倍,那么最终一个数据包有效内容肯定小于帧长,不足部分需要用CTRL- Z(0x1A)来填充。这里可能有些人会问,,mcu收到后碰到0x1A字符会怎么处理?其实如 果传送是文本文件,那么接收方对于接收内容是很轻易识别,因为CTRL-Z不是前128个ascii码,不是通用可见字符,假如是二进制文件,mcu其实也不会把它看成代码来实施。哪怕是excel文件等,因为其内部会有些结构表示各个字段长度等,所以不会读取多出填充字符。不然 Xmodem太弱了。对于1k-Xmodem,同上理。
6.怎样开启传输?
传输由接收方开启,方法是向发送方发送"C"或NAK(注意哦,这里提到NAK是用来开启传输。以下我们会看到NAK还能够用来对数据产生重传机 制)。接收方发送NAK信号表示接收方计划用累加和校验;发送字符"C"则表示接收方想计划使用CRC校验(具体校验规则下文Xmodem源码,源码胜于 雄辩)。
7.传输过程
当接收方发送第一个"C"或NAK抵达发送方,发送方认为能够发送第一个数据包,传输已经开启。发送方接着应该将数据以每次128字节数据加上包头,包号,包号补码,末尾加上校验和,打包成帧格式传送。
发送方发了第一包后就等候接收方确实定字节ACK,收到接收方传来ACK确定,就认为数据包被接收方正确接收,而且接收方要求发送方继续发送下一个包; 假如发送方
2021年Xmodem协议详解以及源代码 来自淘豆网www.taodocs.com转载请标明出处.