《Xmodem文件傳輸協(xié)議》由會員分享,可在線閱讀,更多相關(guān)《Xmodem文件傳輸協(xié)議(10頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、52IC.NET 我愛IC導(dǎo)航網(wǎng)
郵絡(luò):iepixie@
Xmodem文件傳輸協(xié)議 www.52ic. net
1
52IC.NET 我愛IC導(dǎo)航網(wǎng)
Xmodem文件傳輸協(xié)議 www.52ic. net
#
52IC.NET 我愛IC導(dǎo)航網(wǎng)
Xmodem文件傳輸協(xié)議
1.1 Xmodem 簡介
Xmodem協(xié)議足-種使用撥1 弓調(diào)制解調(diào)器的個人訃算機(jī)通信中廣泛使用的異步文件運輸協(xié)議。標(biāo)準(zhǔn)分 為Xmodem fll lk-Xmodem兩種,前者以128 了節(jié)塊的形式傳輸數(shù)據(jù),厲考字節(jié)塊為lk即1024字節(jié),并 H?支持
2、一般校驗和、CRC兩種校驗方式,在出現(xiàn)數(shù)據(jù)包錯碾的情況卜?支持多次電傳(一般為10次)。 Xmodem協(xié)議傳輸由接收程序和發(fā)送程序完成。先由接收程序發(fā)送協(xié)商字符,協(xié)商校驗方式,協(xié)商通過之 后發(fā)送陽$就開始發(fā)送數(shù)據(jù)包,接收世序接收到完整的 個數(shù)據(jù)包Z后按照協(xié)商的方式對數(shù)據(jù)包進(jìn)行校驗。 校驗通過Z后發(fā)送確認(rèn)7符,然后發(fā)送程序繼續(xù)發(fā)送卜?一包;如果校驗失敗,則發(fā)送否認(rèn)字符,發(fā)送程序 咆傳此數(shù)據(jù)包。由J* Xmodem需耍對每個塊都進(jìn)行認(rèn)町,這將導(dǎo)致性能有所卜?降,特別是延時比較長的場 合,這種協(xié)議顯得效率更低。
除\ Xmodem,述-fj" Ymodem, Zmodem協(xié)議。他們的協(xié)議內(nèi)容和Xm
3、odem類似,不同的是Ymodem 允許批處理文件傳輸,效率更高:Zmodem則是改進(jìn)的了 Xmodem?它只石要對損壞的塊進(jìn)彳j?巫發(fā),其它 正確的塊不需要發(fā)送確認(rèn)字節(jié)。減少了通信量。
1.2 Xmodem 協(xié)議
1.2.1相關(guān)定義說明
01H
02H
04H
06H
15H
18H
1AH
// Xmodem數(shù)據(jù)頭
// 1K-Xinodem 數(shù)據(jù)頭
//發(fā)送結(jié)束
//認(rèn)可響應(yīng)
//不認(rèn)可響應(yīng)
//撤銷傳送
//填允數(shù)據(jù)包
1.2.2協(xié)議簡介
Xmo
4、dem協(xié)議的傳輸數(shù)據(jù)卩位為信息包,包金一個標(biāo)題開始字符<SOH>或<STX>, 一個單字節(jié)包序 號,一個包序號的補碼,128/1024個字節(jié)數(shù)據(jù)和一個雙字節(jié)的CRC16校驗。它把數(shù)據(jù)劃分成128/1024個 字符的小包進(jìn)行發(fā)送,毎發(fā)送一個小包都要檢査是否正確,如果借息包正確接收方發(fā)送一個字節(jié)<ACK>的 應(yīng)答:仃錯巫發(fā)則發(fā)送-?個字W<NAK>應(yīng)答,耍求巫發(fā)。因此1K-Xmodem是一種發(fā)送等待協(xié)議,八仃流 靈控制功能.優(yōu)點:簡單通用,幾乎所仃通信軟件都支持該協(xié)議。缺點:慢。Xmodem包格式如卜我所示。
表1 Xmodem包格式
Bytel
Byte2
Byte3
Byte4 ?1
5、31
Byte132-133
Start Of Hearder
Packet Nuinbei
^(Packet Numbei)
Packet Data
16-Bit CRC
郵|g: iepixie(g)
表2 1K-Xmodem包格式
Bytel
Byte2
Byte3
Byte4 -1027
Bytel 028-1029
Start Of Hearder
Packet Number
^(Packet Numbei)
Packet Data
16-Bit CRC
1.2.3數(shù)據(jù)包說明
対「?標(biāo)準(zhǔn)Xmodem協(xié)議來說,如果傳送的文件不是128或者10
6、24的整數(shù)倍,那么最后一個數(shù)據(jù)包的 何效內(nèi)容掙定小幀長,不足的部分礙耍用CTRL-Z(OxlA)來填充。如果傳送的是bootloader工程生成的.bin 文件,mcu收到后遇到OxlA字符會怎么處理?其實如果傳送的是文本文件,那么接收方對接收的內(nèi)容 是很容易識別的,因為CTRL-Z不是前128個ascH碼,不是通用可見字符,如果是一?進(jìn)制文件,mcu K實 也不會把它半作代碼來執(zhí)行。哪怕是excel文件等,由「貞內(nèi)部會仃些結(jié)構(gòu)表示各個字段長度等,所以不 會讀収多余的填允字符。否則Xmodem A弱了。對J* lk-Xniodem,同上理。
1.2.4如何啟動傳輸
傳輸由接收方心動,方法是
7、向發(fā)送方發(fā)送”C”或者NAK(注意哦,這里提到的“C”是用來川動傳輸?shù)摹?以卜我們會看到”C”還可以用來對數(shù)據(jù)產(chǎn)牛幣:傳的機(jī)制)。接收方發(fā)送NAK信號表示接收方打算用累加和校 驗;發(fā)送字符”C“則表示接收方想打算使用CRC校驗。
1.2.5傳輸過程
為接收方發(fā)送的第一個”C”或者NAK到達(dá)發(fā)送方,發(fā)送方認(rèn)為可以發(fā)送第一個數(shù)據(jù)包,傳輸已經(jīng)泉動。 發(fā)送方接著應(yīng)該將數(shù)據(jù)以毎次128字節(jié)的數(shù)據(jù)加上包頭,包號,包號補碼,末尾加上校驗和,打包成幀格 式傳送。
發(fā)送方發(fā)了第一包后就等待接收方的確認(rèn)字節(jié)ACK,收到接收方傳來的ACK確認(rèn),就認(rèn)為數(shù)據(jù)包被 接收方正確接收,并且接收方耍求發(fā)送方繼續(xù)發(fā)送卜一個
8、包;如果發(fā)送方收到接收方傳來的NAK(這里, NAK用來告訴發(fā)送方亞傳,不是用來啟動傳輸)字節(jié),則表示接收方請求直發(fā)剛才的數(shù)據(jù)包:如果發(fā)送方 收到接收方傳來的CAN字節(jié),則表示接收方請求無條件停止傳輸。
1.2.6如何結(jié)束傳輸
如果發(fā)送方止常傳輸完全部數(shù)據(jù),需耍結(jié)束傳輸,正常結(jié)束帶耍發(fā)送方發(fā)送EOT字節(jié)通知接收方。 接收方回以ACK進(jìn)行確認(rèn)。當(dāng)然接收方也可強制停止傳輸,當(dāng)接收方發(fā)送CAN字節(jié)給發(fā)送方,農(nóng)示接收 方想無條件停止傳輸,發(fā)送方收到CAN后,不需耍再發(fā)送EOT確認(rèn)。
1.2.7特殊處理
雖然數(shù)據(jù)包是以SOH來標(biāo)志一個信息包的起始的,但在SOH位置上如果出現(xiàn)EOT則衷示數(shù)據(jù)傳輸
9、結(jié)束,再也沒何數(shù)據(jù)傳過來。接收方首先應(yīng)確認(rèn)數(shù)據(jù)包序號的完整性,通過對數(shù)據(jù)包序號取補,然后和數(shù) 據(jù)包序號的補碼異或,結(jié)果為0表示正確,結(jié)果不為0則發(fā)送NAK請求車傳。
接收方桶認(rèn)數(shù)據(jù)包序號正確后,然后檢査是否期型的序號。如果不是期盥得到的數(shù)據(jù)包序號,說明發(fā) 生嚴(yán)巫錯決,應(yīng)該發(fā)送一個CAN來中止傳輸。如果接收到的數(shù)據(jù)包的包序號和詢 包相同,那么m收方 會忽略這個重復(fù)包,向發(fā)送方發(fā)出ACK ,準(zhǔn)備接收卜-一個包。
接收方確認(rèn)了倍息包序號的完整性和是正確期望的后,只対128寧節(jié)的數(shù)據(jù)區(qū)段進(jìn)彳」:算術(shù)和校驗,結(jié)
Xmodem文件傳輸協(xié)議 www.52ic. net
#
52IC.NET
10、
我愛IC導(dǎo)航網(wǎng) 郵輜:iepixie@
果與幀中繪后一個字節(jié)(算術(shù)校驗和)比較,相同發(fā)送ACK,不同發(fā)送NAKo
1.2.8校驗和的說明
Xmodem協(xié)議支持2種校驗和,它們是累加和與CRC校驗。7W K”\2{.C(n
當(dāng)接收方一開始啟動傳輸時發(fā)送的是NAK,表示它希里以累加和方式校驗。 當(dāng)接收方一開始啟動傳輸時發(fā)送的是字符“C”,表示它希里以CRC方式校驗。
1.2.9傳輸邏輯
1、 收發(fā)雙方撥號連通后,發(fā)送方等待接收方傳來NAK信號。當(dāng)?shù)谝粋€NAK到達(dá),發(fā)送方解釋為 開始發(fā)送第一個包。
2、 發(fā)送方一口收到第一個NAK ,啟動了傳輸,發(fā)送方就將數(shù)據(jù)以每次128/102
11、4字節(jié)打包成幀格式 傳送.再等待接收方的確認(rèn)信號。
3、 發(fā)送方收到接收方傳來的ACK信號,解釋為信息包被正確接收,并尙發(fā)送卜一個包的含義
4、 發(fā)送方收到接收方傳來的NAK信號,解釋為請求重發(fā)同數(shù)據(jù)包。
5、 發(fā)送方收到接收方傳來的CAN信號,解釋為請求無條件停止傳輸過程。
6、 發(fā)送方正常傳輸完全部數(shù)據(jù),需要正常結(jié)束,發(fā)送EOT信號通知接收方。接收方用ACK進(jìn)行 確認(rèn)。
7、 接收方發(fā)送CAN無條件停止傳輸過程,發(fā)送方收到CAN后,不發(fā)送EOT確認(rèn)。
8、 雖然信息包是以SOH來標(biāo),忐一個信息包的起始的,但在SOH位置上出現(xiàn)的EOT則表示數(shù)據(jù) 傳輸結(jié)束,再也沒有數(shù)據(jù)傳過來。
12、9、 接收方首先應(yīng)確認(rèn)信息包洋號的完整性,通過對信息包丿嚴(yán);取補,然后和信息包序兮的補碼異或, 結(jié)果為0表示正確,結(jié)果不為0則發(fā)送NAK請求重傳。
10、 接收方確認(rèn)信息包序號正確后,然后檢査是否期望的序弓。如果不是期型得到的信息包序號,說 明發(fā)生嚴(yán)重錯誤,應(yīng)該發(fā)送一個CAN來中止傳輸。
11、 對J - 10>情況的唯-例外,是收到的包的信息包用號與前一個信息包序兮相同,此中情況,接收 方簡單忽略這個重復(fù)的包,向發(fā)送方發(fā)出ACK ,準(zhǔn)備接收下一個包。
12、 接收方確認(rèn)了信息包序號的完整性和是正確期里的厲,對數(shù)據(jù)區(qū)段進(jìn)行算術(shù)和校驗,結(jié)果與幀中 最后一個字節(jié)(算術(shù)校驗和)比較,相同發(fā)送A
13、CK,不同發(fā)送NAK。
1.2.10 超時處理
1、 接收方等待-?個(3息包的到來所JI?仃的超時時限為10秒,每個超時后發(fā)送NAK.
2、 當(dāng)收到包時,接收過程中每個字符的超時間隔為1秒。
3、 為保持“接收方騾動”,發(fā)送方在等待一個啟動字節(jié)時不應(yīng)該采用超時處理。
4、 一口傳輸開始,發(fā)送方采用單獨的1分鐘超時時限,給接收方允足的時間做發(fā)送ACK, NAK, CAN之前的必須處理。
5、 所有的超時及錯謀事件至少覓試10次。
Xmodem文件傳輸協(xié)議
3
52IC.NET
我愛IC導(dǎo)航網(wǎng)
郵絡(luò):
iepixie@
Xmodem文件傳輸協(xié)議 ww
14、w.52ic. net
#
52IC.NET
我愛IC導(dǎo)航網(wǎng)
Xmodem文件傳輸協(xié)議 www.52ic. net
#
52IC.NET
我愛IC導(dǎo)航網(wǎng)
1.2.11 Xmodem協(xié)議發(fā)送流程圖
Xmodem文件傳輸協(xié)議 www.52ic. net
#
52IC.NET
我愛IC導(dǎo)航網(wǎng)
Xmodem文件傳輸協(xié)議 www.52ic. net
#
52IC.NET
我愛IC導(dǎo)航網(wǎng)
圖1 Xmodem服務(wù)器接收啟動發(fā)送指令
15、
Xmodem文件傳輸協(xié)議 www.52ic. net
#
我愛I c導(dǎo)航網(wǎng)
郵絡(luò):iepixie@
52IC,NET www-52icnet
Xmodem文件傳輸協(xié)議 www.52ic. net
5
Xmodem文件傳輸協(xié)議 www.52ic. net
#
1
圖2 Xmodem發(fā)送數(shù)據(jù)
16、
Xmodem文件傳輸協(xié)議 www.52ic. net
#
郵絡(luò):
iepixie@
Xmodem文件傳輸協(xié)議 www.52ic. net
7
Xmodem文件傳輸協(xié)議 www.52ic. net
#
圖3 Xmodem發(fā)送結(jié)束處理
1-2.12 CRC校驗信息包
1. CRC校驗信息包
17、TX>
其中:
< STX > - 02 hex
■信息包序號,從01開始以發(fā)送一包將加1,加到FFhcx將循環(huán)。
<255 blk#>=信息包序號的補碼。
= CRC16 高字節(jié)。
Xmodem文件傳輸協(xié)議 www.52ic. net
#
我愛I c導(dǎo)航網(wǎng)
郵絡(luò):iepixie@
52IC,NET www-52icnet
= CRC16 低字節(jié)。
2. CRC描述
計算16-Bit CRC校驗的除數(shù)筋項式為XT6
18、 + XT2 + XT + 1,信息包中的1024數(shù)據(jù)字節(jié)將參加CRC 校驗的計算c在發(fā)送端CRC16的高字節(jié)在先,低字節(jié)在后。
3. CRC校驗方式數(shù)據(jù)傳輸流程
接收方要求發(fā)送方以CRC校驗方式發(fā)送時以y,來請求,發(fā)送方將對此做出應(yīng)答。如表3所示傳輸3 包數(shù)據(jù)的示意過程。
表3 CRC校驗傳輸過程
Sender
Flow
Receiver
C
Time out
C
STX 0x01 OxFE Data[l-1024] CRC16
Packet OK
ACK
STX 0x02 OxFD Data[ 1025-2048] CR
19、C16
—>
Line lut during transmission
NAK
STX 0x02 OxFD | Data[1025-2048] CRC16
—?
Packet OK
ACK
STX 0x03 OxFC Data[2049-3072] CRC16
Packet OK
ACK
EOT
—>
Packet OK
ACK get garbaged
?0—
ACK
EOT
—?
Packet OK
Finished
ACK
1.3支持Xmodem服務(wù)器軟件
1.3.1超級終端
超級終端是Wm 20
20、00系統(tǒng)自帶的調(diào)試工貝,支持串II,以太網(wǎng)等多種調(diào)試方式,支持的串II傳輸協(xié) 議也非常的豐富,可惜wmdows7默認(rèn)已經(jīng)不再提供“超級終端”組件。
Xmodem文件傳輸協(xié)議 www.52ic. net
9
52IC.NET 我愛IC導(dǎo)航網(wǎng)
郵絡(luò):iepixie@
圖4超級終端
1.3.2 Ecom 串 口助手
ecom串I I助手是-款出丨l(RS232)調(diào)試軟件。由我愛IC導(dǎo)航網(wǎng)(http:/A^)工作室開發(fā)。ecom 串II助手支持常用的1200 ~ 921600bps波特率,能設(shè)炭校驗、數(shù)據(jù)位和停止位,能以ASCn碼或十六進(jìn)制 接收或發(fā)送任何數(shù)據(jù)或字符(包括屮文),能發(fā)送任意人小的文本文件,町以任意設(shè)定自動發(fā)送周期,并能 將接收數(shù)據(jù)保存成文木文件。文件傳輸協(xié)議支持Xmodem, 1K-Xiiiodem,同時支持命令挖制lK-Xmodem 自動發(fā)送文件。
圖5 ECOM串口助手
Xmodem文件傳輸協(xié)議 www.52ic. net
#