- 48
- 0
- 约9.11千字
- 约 10页
- 2021-06-13 发布于广东
- 举报
传播优秀Word版文档 ,希望对您有帮助,可双击去除!
传播优秀Word版文档 ,希望对您有帮助,可双击去除!
传播优秀Word版文档 ,希望对您有帮助,可双击去除!
研究Xmodem协议必看的11个问题
原文地址:/s/blog_4db10c6c0100av57.html~type=v5_onelabel=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 ? ? ? ? 0x1A3.标准Xmodem协议(每个数据包含有128字节数据)帧格式??_______________________________________________________________|? ???|? ?? ?? ?? ?|? ?? ?? ?? ?? ?? ? |? ?? ?? ? |? ?? ?? ?? ?|| SOH | 信息包序号? ?|??信息包序号的补码? ? | 数据区段??|??校验和? ?? ?||_____|____________|___________________|__________|____________|4.1k-Xmodem(每个数据包含有1024字节数据)帧格式??_______________________________________________________________|? ???|? ?? ?? ?? ?|? ?? ?? ?? ?? ?? ? |? ?? ?? ? |? ?? ?? ?? ?|| STX | 信息包序号? ?|??信息包序号的补码? ? | 数据区段??|??校验和? ?? ?||_____|____________|___________________|__________|____________|5.数据包说明
传播优秀Word版文档 ,希望对您有帮助,可双击去除!
传播优秀Word版文档 ,希望对您有帮助,可双击去除!
传播优秀Word版文档 ,希望对您有帮助,可双击去除!
? ? 对于标准Xmodem协议来说,如果传送的文件不是128的整数倍,那么最后一个数据包的有效内容肯定小于帧长,不足的部分需要用CTRL- Z(0x1A)来填充。这里可能有人会问,如果我传送的是bootloader工程生成的.bin文件,mcu收到后遇到0x1A字符会怎么处理?其实如 果传送的是文本文件,那么接收方对于接收的内容是很容易识别的,因为CTRL-Z不是前128个ascii码,不是通用可见字符,如果是二进制文件,mcu其实也不会把它当作代码来执行。哪怕是excel文件等,由于其内部会有些结构表示各个字段长度等,所以不会读取多余的填充字符。否则 Xmodem太弱了。对于1k-Xmodem,同上理。6.如何启动传输?? ? 传输由接收方启动,方法是向发送方发送C或者NAK(注意哦,这里提到的NAK是用来启动传输的。以下我们会看到NAK还可以用来对数据产生重传的机 制)。接收方发送NAK信号表示接收方打算用累加和校验;发送字符C则表示接收方想打算使用CRC校验(具体校验规则下文Xmodem源码,源码胜于 雄辩)。7.传输
原创力文档

文档评论(0)