1 / 11
文档名称:

Xmodem协议详解以及源代码.doc

格式:doc   大小:36KB   页数:11页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

Xmodem协议详解以及源代码.doc

上传人:drp539606 2019/7/18 文件大小:36 KB

下载得到文件列表

Xmodem协议详解以及源代码.doc

文档介绍

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