1.1. Xmodem簡介
FTP即File Transfer Protocol的縮寫,串行通信的文件傳輸協(xié)議主要有:Xmodem、Ymodem、Zmodem和KERMIT等。
Xmodem 協(xié)議一般支持128 字節(jié)的數(shù)據(jù)包,并且支持累加和校驗、CRC 兩種校驗方式,在出現(xiàn)數(shù)據(jù)包錯誤的情況下支持多次重傳(一般為10次)。Xmodem 協(xié)議傳輸由接收程序和發(fā)送程序完成。先由接收端發(fā)送協(xié)商字符,協(xié)商校驗方式,協(xié)商通過之后發(fā)送端就開始發(fā)送數(shù)據(jù)包,接收程序接收到完整的一個數(shù)據(jù)包之后按照協(xié)商的方式對數(shù)據(jù)包進行校驗。校驗通過之后發(fā)送確認(rèn)字符,然后發(fā)送程序繼續(xù)發(fā)送下一包;如果校驗失敗,則發(fā)送否認(rèn)字符,發(fā)送程序重傳此數(shù)據(jù)包。
1.2. Xmodem協(xié)議
1.2.1.相關(guān)說明
1> 控制字符定義:
SOH 0x01
EOT 0x04
ACK 0x06
NAK 0x15
CAN 0x18
2> UART格式: Asynchronous(異步)、8Bit data (8Bit數(shù)據(jù))、no
parity(無校驗)、one stop bit(1個停止位)
1.2.2.協(xié)議簡介
Xmodem協(xié)議是由Ward Chritensen于70年代提出并實現(xiàn)的,傳輸數(shù)據(jù)單位為信息包,包含一個標(biāo)題開始字符<SOH>,一個單字節(jié)包序號,一個包序號的補碼,128個字節(jié)數(shù)據(jù)和一個單字節(jié)的校驗和。它把數(shù)據(jù)劃分成128個字符的小包進行發(fā)送,每發(fā)送一個小包都要檢查是否正確,如果信息包正確接收方發(fā)送一個字節(jié)<ACK>的應(yīng)答;有錯重發(fā)則發(fā)送一個字節(jié)<NAK>應(yīng)答,要求重發(fā)。因此Xmodem是一種發(fā)送等待協(xié)議,具有流量控制功能。優(yōu)點:簡單通用,幾乎所有通信軟件都支持該協(xié)議。缺點:慢。檢驗和信息包格式如圖1-1所示。
Byte1 | Byte2 | Byte3 | Byte4--131 | Byte132 |
Start of Hearder | Package Number | ~(Package Number) | Package Data | Check Sum |
圖1-1校驗和信息包格式
Xmodem協(xié)議的數(shù)據(jù)包格式在90年代經(jīng)過一次修改,傳輸數(shù)據(jù)單位仍為信息包,包含一個標(biāo)題開始字符SOH,一個單字節(jié)包序號,一個包序號的補碼,128個字節(jié)數(shù)據(jù)和一個雙字節(jié)的CRC16校驗。所以新的協(xié)議格式信息包如圖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> 信息包校驗和
<SOH><blk #><255-blk #><--128 databytes--><cksum>
其中:
<SOH> =01hex
<blk #> =信息包序號,從 01開始以發(fā)送一包將加1,加到FF hex將循環(huán)。
<255-blk #> =信息包序號的補碼。
<cksum> =保留字節(jié),丟掉進位的和校驗。
2> 校驗和方式數(shù)據(jù)傳輸流程
接收方要求發(fā)送方以校驗和方式發(fā)送時以NAK來請求,發(fā)送方將對此做出應(yīng)答。如表1-1所示傳輸5包數(shù)據(jù)的示意過程。
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 校驗和數(shù)據(jù)傳輸過程
1.2.4.CRC校驗信息包
1、CRC校驗信息包
<SOH><blk #><255-blk #><--128 databytes--><CRC hi><CRC lo>其中:
<SOH> =01 hex
<blk #> = 信息包序號,從 01開始以發(fā)送一包將加1,加到FF hex將循環(huán)。
<255-blk #> = 信息包序號的補碼。
<CRC hi> = CRC16高字節(jié)。
<CRC lo> = CRC16低字節(jié)。
2、CRC描述
計算16-BitCRC校驗的除數(shù)多項式為X^16 + X^12 + X^5 + 1,信息包中的128數(shù)據(jù)字節(jié)將參加CRC校驗的計算。在發(fā)送端CRC16的高字節(jié)在先,低字節(jié)在后。
如表1-2所示傳輸3包數(shù)據(jù)的示意過程。
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校驗數(shù)據(jù)傳輸過程
3、CRC校驗方式數(shù)據(jù)傳輸流程
接收方要求發(fā)送方以CRC校驗方式發(fā)送時以‘C’來請求,發(fā)送方將對此做出應(yīng)答。
4、在發(fā)送方僅支持校驗和傳輸方式時,就應(yīng)對其請求NAK,要求以CheckSum的校驗方式來發(fā)送數(shù)據(jù),如表1-1所示過程。如果發(fā)送方僅僅支持CRC校驗的傳輸方式,應(yīng)以’C’來請求發(fā)送,如表1-2所示過程。如果兩者都支持的話,將優(yōu)先以’C’來請求發(fā)送。所以接收程序的實現(xiàn)過程將如表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、信息包中如果剩余的數(shù)據(jù)不足128-Byte信息包的格式為:
【SOH 04 0xFB Data[100] CPMEOF[28] CRC CRC】,不足的CPMEOF[28]將以0x1A(^Z)填充。
聯(lián)系客服