风险投资基金邮箱:Xmodem说明书
1.1. Xmodem简介
FTP即File Transfer Protocol的缩写,串行通信的文件传输协议主要有:Xmodem、Ymodem、Zmodem和KERMIT等。
Xmodem 协议一般支持128 字节的数据包,并且支持累加和校验、CRC 两种校验方式,在出现数据包错误的情况下支持多次重传(一般为10次)。Xmodem 协议传输由接收程序和发送程序完成。先由接收端发送协商字符,协商校验方式,协商通过之后发送端就开始发送数据包,接收程序接收到完整的一个数据包之后按照协商的方式对数据包进行校验。校验通过之后发送确认字符,然后发送程序继续发送下一包;如果校验失败,则发送否认字符,发送程序重传此数据包。
1.2. Xmodem协议
1.2.1.相关说明
1> 控制字符定义:
SOH 0x01
EOT 0x04
ACK 0x06
NAK 0x15
CAN 0x18
2> UART格式: Asynchronous(异步)、8Bit data (8Bit数据)、no
parity(无校验)、one stop bit(1个停止位)
1.2.2.协议简介
Xmodem协议是由Ward Chritensen于70年代提出并实现的,传输数据单位为信息包,包含一个标题开始字符
Byte1
Byte2
Byte3
Byte4--131
Byte132
Start of Hearder
Package Number
~(Package Number)
Package Data
Check Sum
图1-1校验和信息包格式
Xmodem协议的数据包格式在90年代经过一次修改,传输数据单位仍为信息包,包含一个标题开始字符SOH,一个单字节包序号,一个包序号的补码,128个字节数据和一个双字节的CRC16校验。所以新的协议格式信息包如图1-2所示。
Byte1
Byte2
Byte3
Byte4--131
Byte132--133
Start of Hearder
Package Number
~(Package Number)
Package Data
16-Bit CRC
图1-2 CRC校验信息包格式
1.2.3. 校验和信息包
1> 信息包校验和
其中:
<255-blk #> =信息包序号的补码。
2> 校验和方式数据传输流程
接收方要求发送方以校验和方式发送时以NAK来请求,发送方将对此做出应答。如表1-1所示传输5包数据的示意过程。
Sender
Flow
Receiver
ß
NAK
Time out after 3 Second
ß
NAK
SOH|0X01|0XFE|DATA[0--127]|CHKSUM
à
Packed Ok
ß
ACK
SOH|0X02|0XFD|DATA[0--127]|CHKSUM
à
Line hit during transmission
ß
NAK
SOH|0X02|0XFD|DATA[0--127]|CHKSUM
à
Packed Ok
ß
ACK
SOH|0X03|0XFC|DATA[0--127]|CHKSUM
à
Packed Ok
ACK get garbaged
ß
ACK
SOH|0X03|0XFC|DATA[0--127]|CHKSUM
à
Duplicate Packed
ß
NAK
SOH|0X04|0XFB|DATA[0--127]|CHKSUM
à
Uart Framing err on any byte
ß
NAK
SOH|0X04|0XFB|DATA[0--127]|CHKSUM
à
Packed Ok
ß
ACK
SOH|0X05|0XFA|DATA[0--127]|CHKSUM
à
UART Overrun err on any byte
ß
NAK
SOH|0X05|0XFA|DATA[0--127]|CHKSUM
à
Packed Ok
ß
ACK
EOT
à
Packed Ok
ACK get garbaged
ß
ACK
EOT
à
Packed Ok
Finished
ß
ACK
表1-1 校验和数据传输过程
1.2.4.CRC校验信息包
1、CRC校验信息包
<255-blk #> = 信息包序号的补码。
2、CRC描述
计算16-BitCRC校验的除数多项式为X^16 + X^12 + X^5 + 1,信息包中的128数据字节将参加CRC校验的计算。在发送端CRC16的高字节在先,低字节在后。
如表1-2所示传输3包数据的示意过程。
Sender
Flow
Receiver
ß
‘C’
Time out after 3 Second
ß
‘C’
SOH|0X01|0XFE|DATA[0--127]|CRC16
à
Packed Ok
ß
ACK
SOH|0X02|0XFD|DATA[0--127]|CRC16
à
Line hit during transmission
ß
NAK
SOH|0X02|0XFD|DATA[0--127]|CRC16
à
Packed Ok
ß
ACK
SOH|0X03|0XFC|DATA[0--127]|CRC16
à
Packed Ok
ß
ACK
EOT
à
Packed Ok
ACK get garbaged
ß
ACK
EOT
à
Packed Ok
Finished
ß
ACK
表1-2 CRC校验数据传输过程
3、CRC校验方式数据传输流程
接收方要求发送方以CRC校验方式发送时以‘C’来请求,发送方将对此做出应答。
4、在发送方仅支持校验和传输方式时,就应对其请求NAK,要求以CheckSum的校验方式来发送数据,如表1-1所示过程。如果发送方仅仅支持CRC校验的传输方式,应以’C’来请求发送,如表1-2所示过程。如果两者都支持的话,将优先以’C’来请求发送。所以接收程序的实现过程将如表1-3所示。
Sender
Flow
Receiver
ß
‘C’
Time out after 3 Second
ß
NAK
Time out after 3 Second
ß
‘C’
Time out after 3 Second
ß
NAK
SOH|0X01|0XFE|DATA[0--127]|CHKSUM
à
ß
ACK
SOH|0X02|0XFD|DATA[0--127]|CHKSUM
à
Line hit during transmission
ß
NAK
SOH|0X02|0XFD|DATA[0--127]|CHKSUM
à
Packed Ok
ß
ACK
SOH|0X03|0XFC|DATA[0--127]|CHKSUM
à
Packed Ok
ß
ACK
EOT
à
Packed Ok
ACK get garbaged
ß
ACK
EOT
à
Packed Ok
Finished
ß
ACK
5、信息包中如果剩余的数据不足128-Byte信息包的格式为:
【SOH 04 0xFB Data[100] CPMEOF[28] CRC CRC】,不足的CPMEOF[28]将以0x1A(^Z)填充。