1.介绍:XModem协议是一种在串口通信中广泛使用的异步文件传输协议,最早由Ward Christensen在20世纪70年代提出并实现。它分为两种版本:XModem和1k-XModem,前者使用128字节的数据块,后者使用1024字节的数据块。
XModem信息包格式(128字节) | |||||
---|---|---|---|---|---|
Byte1 | Byte2 | Byte3 | Byte4-Byte131 | Byte132 | |
SOH(头) | 包序号 | 包序号反码 | 128字节的数据 | CRC校验和 |
2. 校验和的计算
所有的数据字节都将参与和运算,由于校验和只占一个字节,如果累加的和超过255将从零开始继续累加。
3. 字段定义
<SOH> 01H
<EOT> 04H
<ACK> 06H
<NAK> 15H
<CAN> 18H
4.传输流程
(1)接收方发送字符'C'请求以CRC16校验方式发送数据。
(2)发送方发送数据包,接收方校验数据。
(3)数据正确则接收方发送ACK信号,错误则发送NAK信号要求重传。
(4)数据传输完成后,发送方发送EOT信号结束传输。
5.
------------------------------------------------------------------------------
| SENDER | | RECIEVER |
| | <--- | NAK |
| | | Time out after 3 second |
| | <--- | NAK |
| SOH|0x01|0xFE|Data[0~127]|CheckSum| | ---> | |
| | <--- | ACK |
| SOH|0x02|0xFD|Data[0~127]|CheckSum| | ---> | |
| | <--- | NAK |
| SOH|0x02|0xFD|Data[0~127]|CheckSum| | ---> | |
| | <--- | ACK |
| SOH|0x03|0xFC|Data[0~127]|CheckSum| | ---> | |
| | <--- | ACK |
| . | | . |
| . | | . |
| . | | . |
| | <--- | ACK |
| EOT | ---> | |
| | <--- | ACK |
------------------------------------------------------------------------------
对于发送方仅仅支持校验和的传输方式,接收方应首先发送NAK信号来发起传输,如果发送方没有数据发送过来,需要超时等待3秒之后再发起NAK信号来进行数据传输。
如果数据传输正确,接收方需要发送ACK信号来进行确认,
如果数据传输有误,则发送NAK信号,发送方在接收到NAK信号之后需要重新发起该次数据传输,
{ 数据传输是否正确,通过CRC方式计算接受到的数据,得到CRC值。通过收到的CRC值和自己计算出的CRC值进行比较,来确定数据是否接受成功。 }
如果数据已近传输完成,发送方需要发送EOT信号,来结束数据传输。
无条件取消数据传输:当接收方发送CAN表示无条件结束本次传输过程,发送方收到CAN后,无需发送EOT来确认,直接停止数据的发送。
作者:无痕幽雨
链接:XModem协议详解与实现-CSDN博客
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。