新版YMODE協議

2021-07-11 19:15:36 字數 2063 閱讀 1995

一、ymodem協議學習的目的

1、ymodem協議的應用

開啟超級終端,在傳送主選單裡,有接收檔案和傳送檔案的子選單。也就是超級終端可以與連線的物件之間相互傳送檔案。

開啟傳送檔案選項,可知,只需要選擇「檔名」和「協議」兩個選項,就可以進行檔案的傳送了。

協議的型別有7中,xmodem及改進的1k-xmodem,ymodem和ymodem-g,zmodem及其改進協議,以及kermit,我這次主要學習嵌入式系統中用得較多的ymodem協議。

2、學習的目標

(1)傳送檔案的實現

新增乙個命令,fsend,這個命令接受乙個引數,就是檔案的最終存放目錄。當開發板接收到這個命令後,做好接收檔案的準備。與超級終端進行協商後,將收到的檔案寫入指定位置。

(2)接收檔案的實現

新增乙個命令frecv,這個命令接受乙個引數,就是超級終端所要索取的檔案。當開發板接收到這個命令後,就等待終端傳送索取檔案的協商要求。

二、ymodem協議分析

1、明確概念

一步一步來,先把概念搞清楚。

ymodem協議是一種傳送並等待的協議。即傳送方傳送乙個資料報以後,都要等待接收方的確認。如果是ack訊號,則可以傳送新的包。如果是nak訊號,則重發或者錯誤退出。

2、檔案傳輸過程

檔案傳輸過程的開啟:

(1)開啟是由接收方開啟傳輸,它發乙個大寫字母c開啟傳輸。然後進入等待(soh)狀態,如果沒有回應,就會超時退出。

(2)傳送方開始時處於等待過程中,等待c。收到c以後,傳送(soh)資料報開始訊號,傳送序號(00),補碼(ff),「檔名」,「\0」「檔案大小」「除去序號外,補滿128位元組」,crc校驗兩個位元組。進入等待(ack)狀態。

(3)接收方收到以後,crc校驗滿足,則傳送ack。傳送方接收到ack,又進入等待「檔案傳輸開啟」訊號,即重新進入等待「c」的狀態。

(4)前面接收方只是收到了乙個檔名,限制正式開啟檔案傳輸,ymodem支援128位元組和1024位元組乙個資料報。128位元組以(soh)開始,1024位元組以(stx)開始。

接收方又發出乙個「c」訊號,開始準備接收檔案。進入等待「soh」或者「stx」狀態。

(5)傳送接收到「c」以後,傳送資料報,(soh)(01序號)(fe補碼)(128位資料)(crc校驗),等待接收方「ack」。

(6)檔案傳送完以後,傳送方發出乙個「eot」訊號,接收方也以「ack」回應。

然後接收方會再次發出「c」開啟另一次傳輸,若接著傳送方會發出乙個「全0資料報」,接收方「ack」以後,本次通訊正式結束。

(7)當然ymodem相對於xmodem改進的地方就在於傳輸再次開啟以後,又可以傳送另外乙個檔案,即一次傳輸允許傳送多個檔案,但這個特性我就不準備實現了。

3、所用到的符號

#define modem_soh 0x01 //資料塊起始字元

#define modem_stx 0x02 //1028位元組開始

#define modem_eot 0x04 //檔案傳輸結束

#define modem_ack 0x06 //確認應答

#define modem_nak 0x15 //出現錯誤

#define modem_can 0x18 //取消傳輸

#define modem_c 0x43 //大寫字母c

4、crc計算方法

(以下一段**摘錄自網上,還沒有經過驗證)

in_ptr = mblock->buf; //指向要計算crc的緩衝區開頭 cksum = 0; //初始化為0

for (stat=mblock->len ; stat>0; stat--) //len是所要計算的長度

cksum = cksum^(int)(*in_ptr++) << 8; //這句我沒搞明白。

for (i=8; i!=0; i--)

if (cksum & 0x8000)

cksum = cksum << 1 ^ 0x1021;

else

cksum = cksum << 1;

現在對這些壓縮、解碼、校驗、加密的原理和演算法,還沒有濃厚的興趣,所以只了解一下過程就行了,特別是在接收的時候,如果校驗演算法不對,則可以跳過去。當然傳送的時候,就避免不了。

ymode協議不同工具之間的區別

最近在使用ymode協議進行檔案傳輸的過程中發現一些問題,因而做一下總結。協議的接收是自己實現的,協議的傳送使用的是pc上的現有工具 超級終端 和 securecrt 7.3 使用 超級終端 用的比較多,協議最開始的除錯也是用的 超級終端 那麼問題來了。1 超級終端和securecrt 7.3到底有...

Ymode 公升級速度測試

測試使用串列埠公升級,發現自己兩個pl2303 傳送資料 mcu都無法接收到,測試pl2303 tx管腳是1v多,電壓不正常,嘗試在mcu端的rx管腳設定為輸入上拉,設定過後,連線pl2303測試rx腳還是1v左右,於是換了乙個ch340,測試rx電壓3.3v正常,測試在2m 波特率下傳輸ok,速度...

新版期貨資料交換(FTD)協議報文分析

因為需要開發模擬ctp後台服務,實現一鍵切換ctp,所以我們需要分析ctp報文。基於ftd協議2004版改進 網上公開的只能找到04年老版本,和現前報文格式出入較大。參考 本人花了幾個晚上用wireshark抓包分析,已經可以完整還原新版ftd協議流程。先簡單介紹ctp平台工作流程,大致分為三種通訊...