Ymodem協議詳解

Xmodem、Ymodem和Zmodem協議是最常用的三種通信協議。

Xmodem協議是最早的,傳輸128字節信息塊。

Ymodem是Xmodem的改進版協議,具有傳輸快速穩定的優點。它可以一次傳輸1024字節的信息塊,同時還支持傳輸多個文件。

平常所說的Ymodem協議是指的Ymodem-1K,除此還有Ymodem-g(沒有CRC校驗,不常用)。

YModem-1K用1024字節信息塊傳輸取代標準的128字節傳輸,數據的發送回使用CRC校驗,保證數據傳輸的正確性。它每傳輸一個信息塊數據時,就會等待接收端迴應ACK信號,接收到迴應後,纔會繼續傳輸下一個信息塊,保證數據已經全部接收。

1.起始幀的數據格式

YModem的起始幀並不直接傳輸文件的數據,而是將文件名與文件的大小放在數據幀中傳輸,它的幀長=3字節數據首部+128字節數據+2字節CRC16校驗碼=33字節。它的數據結構如下:

SOH 00 FF  filename  filezise NUL  CRCH CRCL

其中SOH=0x01,表示這個數據幀中包含着128個字節的數據(STX表示1024字節,初始幀只有128個),00表示數據幀序號,初始是0,依次向下排,FF是幀序號的取反,filename是要傳輸的文件名,如USTB_V3_1.0.1.26_NMEA.Bin,它在數據幀中的格式爲:55 53 54 42 5F 56 33 5F 31 2E 30 2E 31 2E 32 36 5F 4E 4D 45 41 2E 42 69 6E 00,也就是把ASCII碼轉成十六進制,但是最後一定要在文件名後加上00,表示文件名的結束;filesize表示文件的大小,如上面的USTB_V3_1.0.1.26_NMEA.Bin大小是132KB,也就是135168Byte,轉換成十六進制就是0x21000,它在數據幀中的格式就是32 31 30 30 30 00,也就是ASCII的“21000”,同樣最後要加上00表示結束,NUL就是數據部分的128字節中除去文件名和文件大小佔據的剩下的字節都用00填充,CRCH和CRCL分別表示16位CRC校驗碼的高8位與低8位。

2.數據幀的數據格式

    YModem的數據幀中會預留1024字節空間用來傳輸文件數據,它跟起始幀接收差不多,如下:

       STX 01 FEdata[1024] CRCH CRCL

其中STX=0x02,表示這幀數據幀後面包含着1024字節的數據部分;01是表示幀序號,FE是它的取反,再下一幀數據就是02 FD,以此類推;data[1024]表示存放着1024字節的文件數據;CRCH與CRCL是CRC16檢驗碼的高8位與低8位。

如果文件數據的最後剩餘的數據在128~1024之前,則還是使用STX的1024字節傳輸,但是剩餘空間全部用0x1A填充,如下結構:

STX 01 FE data[1024] 1A 1A……… CRCH CRCL

有一種特殊的情況:如果文件大小小於等於128字節或者文件數據最後剩餘的數據小於128字節,則YModem會選擇SOH數據幀用128字節來傳輸數據,如果數據不滿128字節,剩餘的數據用0x1A填充這是數據幀的結構就變成了:

文件大小小於128字節:               SOH 01 FE data[ ] 1A ...1A CRCH CRCL  

文件最後剩餘數據小於128字節:  SOH 01 FE data[ ] 1A...1A CRCH CRCL

3.結束幀數據結構

    YModem的結束幀數據也採用SOH的128字節數據幀,它的結構如下:

SOH 00 FF NUL[128] CRCH CRCL

結束幀同樣以SOH開頭,表示後面跟着128字節大小的數據;結束幀的幀序也認爲是00 FF;結束幀的128字節的數據部分不存放任何信息,即全部用00填充。

4.文件傳輸過程

       文件的傳輸過程,以具體的例子說明。把USTB_V3_1.0.1.26_NMEA.Bin,大小爲135168Byte(16進製爲0x21000,它在數據幀中的格式就是32 31 30 30 30 00)的文件作爲傳輸的對象,則它的傳輸過程如下:

發送端                                                                                        接收端       

 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   C

SOH 00 FF [55 53…6E 00]" "[32…30 00]'' NUL[96] CRC CRC >>>

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<    ACK

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<    C

STX 01 FE data[1024] CRC CRC>>>>>>>>>>>>>>>>>>>>>>     

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   ACK

STX 02 FD data[1024] CRC CRC>>>>>>>>>>>>>>>>>>>>>

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   ACK

STX 03 FC data[1024] CRC CRC>>>>>>>>>>>>>>>>>>>>>

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   ACK

STX 04 FB data[1024] CRC CRC>>>>>>>>>>>>>>>>>>>>>

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   ACK

SOH 05 FA data[100]  1A[28] CRC CRC>>>>>>>>>>>>>>>>

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   ACK

EOT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   NAK

EOT>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   ACK

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   C

SOH 00 FF NUL[128] CRCCRC >>>>>>>>>>>>>>>>>>>>>>>

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   ACK

發佈了2 篇原創文章 · 獲贊 0 · 訪問量 3399
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章