`
lovnet
  • 浏览: 6706478 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

Xmodem

 
阅读更多

转自:http://blog.sina.com.cn/s/blog_6dbbd41a0100tce4.html

<wbr><wbr><wbr>Xmodem协议是一种使用拨号调制解调器的个人计算机通信中广泛使用的异步文件运输协议。这种协议以128字节块的形式传输数据,并且每个块都使用一个校验和过程来进行错误检测。如果接收方关于一个块的校验和与它在发送方的校验和相同时,接收方就向发送方发送一个认可字节。然而,这种对每个块都进行认可的策略将导致低性能,特别是具有很长传播延迟的卫星连接的情况时,问题更加严重。<br><wbr><wbr><wbr>使用循环冗余校验的与Xmodem相应的一种协议称为Xmodem-CRC。还有一种是Xmodem-1K,它以1024字节一块来传输数据。Zmodem是最有效的一个Xmodem版本,它不需要对每个块都进行认可。事实上,它只是简单地要求对损坏的块进行重发。Zmodem对按块收费的分组交换网络是非常有用的。不需要认可回送分组在很大程度上减少了通信量。<br><wbr><wbr><wbr>Ymodem也是一种Xmodem的实现。它包括Xmodem-1K的所有特征,另外在一次单一会话期间为发送一组文件,增加了批处理文件传输模式。</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

<wbr><wbr><wbr>Xmodem协议相关控制字符:<br><wbr><wbr><wbr>SOH<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>0x01<br><wbr><wbr><wbr><wbr>STX<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>0x02<br><wbr><wbr><wbr><wbr>EOT<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>0x04<br><wbr><wbr><wbr><wbr>ACK<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>0x06<br><wbr><wbr><wbr><wbr>NAK<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>0x15<br><wbr><wbr><wbr><wbr>CAN<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>0x18<br><wbr><wbr><wbr><wbr>CTRLZ <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>0x1A<br></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr>标准<span style="word-wrap:normal; word-break:normal">Xmodem</span>协议帧格式(每个数据包含有128字节数据)<wbr><wbr></wbr></wbr></wbr></wbr></wbr>

<wbr>______________________________________________________________<br> |<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>|<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>|<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>|<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>|<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>|<br> | SOH | 信息包序号<wbr><wbr>|<wbr><wbr><wbr><wbr>信息包序号的补码<wbr><wbr><wbr>| 数据区段<wbr><wbr><wbr>|<wbr><wbr><wbr><wbr>校验和<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>|<br> |_____|____________|___________________|__________|____________|<br></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><span style="word-wrap:normal; word-break:normal">1k-Xmodem</span>帧格式(每个数据包含有1024字节数据)</wbr></wbr></wbr>

<wbr>______________________________________________________________<br> |<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>|<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>|<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>|<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>|<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>|<br> | STX | 信息包序号<wbr><wbr><wbr>|<wbr><wbr><wbr><wbr>信息包序号的补码<wbr><wbr>| 数据区段<wbr><wbr><wbr>|<wbr><wbr><wbr><wbr>校验和<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>|<br> |_____|____________|___________________|__________|____________|</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>


说明:

  SOH: 帧的开头字节,代表信息包中的第一个字节;

  信息包序号: 对 256 取模所得到当前包号,第一个信息包的序号为 1 ,而信息包序号范围 0~255;

  信息包序号的补码: 当前信息包号的补码;

  数据区段: 数据区段的长度固定为 128 字节;

<wbr><wbr><wbr>校验和: 1字节的算术校验和,只对数据区段计算后对 256 取模而得。</wbr></wbr></wbr>

<wbr></wbr>

数据包说明

<wbr><wbr><wbr>对于标准Xmodem协议来说,如果传送的文件不是128的整数倍,那么最后一个数据包的有效内容肯定小于帧长,不足的部分需要用CTRL-Z(0x1A)来填充。如果传送的是bootloader工程生成的.bin文件,mcu收到后遇到0x1A字符会怎么处理?其实如果传送的是文本文件,那么接收方对于接收的内容是很容易识别的,因为CTRL-Z不是前128个ascii码,不是通用可见字符,如果是二进制文件,mcu其实也不会把它当作代码来执行。哪怕是excel文件等,由于其内部会有些结构表示各个字段长度等,所以不会读取多余的填充字符。对于1k-Xmodem,同上理。</wbr></wbr></wbr>

启动传输
<wbr><wbr><wbr>传输由接收方启动,方法是向发送方发送"C"或者NAK(这里提到的NAK是用来启动传输的,它也可用来对数据产生重传的机制)。接收方发送NAK信号表示接收方打算用累加和校验;发送字符"C"则表示接收方想打算使用CRC校验。</wbr></wbr></wbr>

传输过程

<wbr><wbr><wbr>当接收方发送的第一个"C"或者NAK到达发送方,发送方认为可以发送第一个数据包,传输已经启动。发送方接着应该将数据以每次128字节的数据加上包头,包号,包号补码,末尾加上校验和,打包成帧格式传送。</wbr></wbr></wbr>

<wbr><wbr><wbr>发送方发了第一包后就等待接收方的确认字节ACK,收到接收方传来的ACK确认,就认为数据包被接收方正确接收,并且接收方要求发送方继续发送下一个包;如果发送方收到接收方传来的NAK(这里,NAK用来告诉发送方重传,不是用来启动传输)字节,则表示接收方请求重发刚才的数据包;如果发送方收到接收方传来的CAN字节,则表示接收方请求无条件停止传输。</wbr></wbr></wbr>

结束传输

<wbr><wbr><wbr>如果发送方正常传输完全部数据,需要结束传输,正常结束需要发送方发送EOT 字节通知接收方。接收方回以ACK进行确认。当然接收方也可强制停止传输,当接收方发送CAN 字节给发送方,表示接收方想无条件停止传输,发送方收到CAN后,不需要再发送 EOT确认。</wbr></wbr></wbr>

特殊处理
<wbr><wbr><wbr>虽然数据包是以 SOH 来标志一个信息包的起始的,但在 SOH 位置上如果出现EOT则表示数据传输结束,再也没有数据传过来。接收方首先应确认数据包序号的完整性,通过对数据包序号取补,然后和数据包序号的补码异或,结果为0表示正确,结果不为0则发送NAK请求重传。</wbr></wbr></wbr>

<wbr><wbr><wbr>接收方确认数据包序号正确后,然后检查是否期望的序号。如果不是期望得到的数据包序号,说明发生严重错误,应该发送一个 CAN 来中止传输。如果接收到的数据包的包序号和前一包相同,那么m收方会忽略这个重复包,向发送方发出 ACK ,准备接收下一个包。<br><wbr><wbr><wbr>接收方确认了信息包序号的完整性和是正确期望的后,只对 128 字节的数据区段进行算术和校验,结果与帧中最后一个字节(算术校验和)比较,相同发送 ACK,不同发送 NAK。</wbr></wbr></wbr></wbr></wbr></wbr>

分享到:
评论

相关推荐

    xmodem通讯协议c#源码全网独一份绝对值3分

    Xmodem 协议传输由接收程序和发送程序完成。先由接收程序发送协商字符,协商校验方式,协商通过之后发送程序就开始发送数据包,接收程序接收到完整的一个数据包之后, 按照协商的方式对数据包进行校验。校验通过之后...

    xmodem协议C语言源码

    C语言写的xmodem协议,可通过PC的超级终端将数据写入单片机扩展的falsh里。

    c语言xmodem文件传输

    xmodem协议详解及xmodm协议在c语言环境下文件传输实现源代码

    MiniSTM32_XModem128_Bootloader.rar

    学习STM32的IAP功能,掌握基于XModem 128字节数据包 校验和模式的IAP的使用. 文件夹说明: BL_XModem : 用于MiniSTM32自举程序,STM32 串口 2400 8N1N,目前只把文件直接写入MCU内部FLASH并运行,没有备份。 Hyper...

    xmodem串口下载工具

    文件里面有安装步骤,如果不行,多试几遍。里面还包含了二进制代码查看器WinHex,下载后可打开调试信息,查看读取下载后的数据,可观察下载的数据是否...还包含了另一种串口Xmodem上位机。软件需要破解,可留下邮箱。

    CRC16数据校验支持ModelBus和XMODEM校验模式(C语言)

    CRC16数据校验支持ModelBus和XMODEM校验模式(C语言) CRC16数据校验支持ModelBus和XMODEM校验模式(C语言) CRC16数据校验支持ModelBus和XMODEM校验模式(C语言)

    1k Xmodem Vb.net实现

    1k Xmodem简单实现 1.标准Xmodem协议(每个数据包含有128字节数据)帧格式 _______________________________________________________________ | | SOH | 信息包序号 | 信息包序号的补码 | 数据区段 | 校验和 |_...

    基于C#的串口调试助手,支持进制转换,可编辑发送队列,支持XModem,YModem,基于.net 2.0开发,单文件免费串口调

    基于C#的串口调试助手,支持进制转换,可编辑发送队列,支持XModem,YModem。基于.net 2.0开发,单文件免费串口调试工具。基本功能:自动识别系统串口号并显示相应的驱动名称。支持常用波特率选择,也可手动输入波特率...

    Xmodem/Ymodem 协议说明(完整版)

    Xmodem/Ymodem 完整版协议说明,STM32 官方 IAP Demo 所使用协议 XMODEM/YMODEM PROTOCOL REFERENCE A compendium of documents describing the XMODEM and YMODEM File Transfer Protocols

    Xmodem串口下载工具

    不仅是一个串口工具,同时也支持XMODEM、YMODEM、ZMODEM协议文件下载

    带移植说明的xmodem源码(STM32)

    带移植说明的xmodem源码(STM32) //移植时,需要修改该函数 //串口收发,实用查询方式。 void xm_port_write(uint8 *ch) { while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET); USART1-&gt;DR = *ch; } ...

    非常好用的xmodem协议

    128字节的xmodem协议传输................................................................................................................................................

    crc16验证C#XModem数据通讯验证源码

    下载地址: https://pan.baidu.com/s/1RAH2MdZyEIDZPpgca_5Wjg 密码:qc2j crc16验证C#XModem数据通讯验证源码

    ECOM串口助手(支持xmodem协议)

    ecom串口助手是一款串口(RS232)调试软件,支持Xmodem功能,支持Xmodem-1k功能,支持命令启动Xmodem-1k功能

    xmodem协议相关经验分享

    xmodem协议相关经验分享 XMODEM协议是一种串口通信中广泛用到的异步文件传输协议。分为标准Xmodem和1k-Xmodem两种

    基于HAL库DMA的485使用xmodem协议发送数据包

    基于HAL库的485串口配置,收发均使用DMA,解放CPU。通过xmodem实现数据包的发送和接收,数据长度可自定义。

    xmodem上位机代码

    xmodem上位机

    超级终端工具(支持Xmodem、Ymodem、Zmodem)

    超级终端工具,实用强大。可用作常规的串口工具,支持多种通讯协议包括Xmodem、Ymodem、Zmodem等。好用方便。

    1K_Xmodem_server.c

    1K XMODEM是基于点对点服务器和客户端之间的文件传输协议,每次固定长度传输,且每个数据包都有应答和重传机制,保证文件的可靠传输,1K_Xmodem_server是通过通用的C代码,实现了1K XMODE服务器端的数据打包和传输

    xmodem-master.zip

    xmodem-master.zip

Global site tag (gtag.js) - Google Analytics