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