- 相關(guān)推薦
設計封裝串口數據通信論文
1協(xié)議的設計
1.1數據報格式
數據報分為報文頭部和數據部?jì)刹糠,其格式如圖2所示。報文頭部由6字節組成,第1、2字節AB表示報文長(cháng)度,即報文頭部長(cháng)度加上數據部長(cháng)度;第3、4字節CD表示整個(gè)報文的校驗和;第5、6字節XX表示應答ACK;第7、8字節GH表示報文序號。數據報長(cháng)度AB范圍為0~65535,所以一個(gè)報文最大為8KB。數據部長(cháng)度等于報文長(cháng)度(AB)減去報文頭長(cháng)度(8B)。2.2數據處理與報文處理數據處理包括分割上層應用提供的數據,以及從報文還原拼接數據;報文處理包括格式化報文以提供給串口發(fā)送以及從串口讀取報文、校驗報文、提取數據。
1.2.1數據分割
協(xié)議從應用程序接口獲取應用程序提供的數據并以流式數據寫(xiě)入發(fā)送方數據緩沖區;然后以事先設定的數據分割長(cháng)度取數據,長(cháng)度不足的部分則全部取出,取數據指針移動(dòng)相應距離。
1.2.2報文組裝
報文的組裝過(guò)程如下:
。1)計算取出數據的長(cháng)度,填入報文第1、2字節;
。2)報文第3~6字節全部置0;
。3)計算報文序號GH;
。4)計算校驗和,從第1字節開(kāi)始,每?jì)蓚(gè)字節為一個(gè)單元進(jìn)行分割,末尾不足兩字節則在其后補0,再將這些單元進(jìn)行二進(jìn)制反碼求和,結果存在檢驗和字段中第3、4字節;
。5)將取出的數據接在報文頭部后面,將整個(gè)報文寫(xiě)入報文緩沖區。
1.2.3報文拆分
報文拆分的具體步驟如下:
。1)從報文緩沖區按報文長(cháng)度獲取報文數據;
。2)計算校驗和,方法同報文組裝里的計算方法:如果校驗和不為0xFFFF,則傳輸過(guò)程中發(fā)生差錯,丟棄此報文;如果校驗和為0xFFFF,取出報文長(cháng)度及報文序號,計算數據部長(cháng)度,取出數據。
1.2.4數據拼接
將從報文取出的數據填入接收方數據緩沖區,寫(xiě)數據指針移動(dòng)相應距離;接收完最后一個(gè)數據后,協(xié)議將數據緩沖區中的數據提供給上層應用程序,寫(xiě)數據指針恢復初始值。
1.3數據報傳輸過(guò)程
數據報傳輸情況分為考慮定時(shí)器超時(shí)和不考慮定時(shí)器超時(shí)兩種,定時(shí)器超時(shí)處理應屬于中斷調用。
1.3.1傳輸過(guò)程數據報傳輸過(guò)程如下:
。1)在進(jìn)行數據報傳輸前,發(fā)送方將數據分割并裝進(jìn)報文,ACK置為0x0000,計算報文序號,再將報文送入報文緩沖區。
。2)開(kāi)始發(fā)送時(shí),串口按已經(jīng)設定的工作方式和波特率工作,從報文緩沖區獲取報文數據并發(fā)送。
。3)發(fā)送方發(fā)送完畢一個(gè)數據報后,停止發(fā)送,啟動(dòng)定時(shí)器計時(shí),準備接收響應。
。4)接收方串口接收數據并填入報文緩沖區。
。5)接收方從報文緩沖區獲取報文數據,進(jìn)行校驗:
、偃艚邮辗叫r灲Y果為正確,則取出數據;若接收的ACK=0x0011并且收到的序號等于前面一個(gè)報文的序號,則將數據覆蓋到前一塊數據,否則將數據填入數據緩沖區;記錄報文序號,發(fā)送數據部為空、ACK=0x1111的報文。
、谌艚邮辗叫r灲Y果為錯誤,則丟棄數據報,發(fā)送數據部為空、ACK=0x1110的報文,通知發(fā)送方重發(fā)。
。6)接收方每次處理完數據報均初始化并啟動(dòng)定時(shí)器計時(shí),剛收到數據報時(shí)關(guān)閉定時(shí)器。
。7)發(fā)送方收到響應報文,校驗通過(guò)則關(guān)閉定時(shí)器,獲取ACK,若ACK=0x1111,則發(fā)送下一個(gè)數據報;若ACK=0x1110,則重發(fā)當前數據報(ACK置0x0011)。如果校驗不通過(guò)就丟棄此數據報,仍保持定時(shí)器計時(shí)。
。8)雙方重復以上步驟直到最后一個(gè)報文發(fā)送完畢。
。9)發(fā)送方發(fā)送最后一個(gè)報文完成后,發(fā)送數據部為空、ACK=0x0001的報文提示數據傳輸完畢,若此報文發(fā)送后收到重傳響應,則重發(fā)此數據報(ACK仍置0x0001)。
1.3.2定時(shí)器超時(shí)處理
若發(fā)送方定時(shí)器達到發(fā)送方超時(shí)等待時(shí)間仍未收到響應報文,則重傳當前數據報(ACK置0x0011),連續超時(shí)三次還沒(méi)收到應答則停止發(fā)送數據報,清空報文緩沖區和數據緩沖區,并向應用程序返回通信失敗。若接收方定時(shí)器達到接收方超時(shí)等待時(shí)間仍未收到報文,清空報文緩沖區和數據緩沖區,關(guān)閉定時(shí)器,并向上層應用程序返回通信失敗。
2結論
本文所設計的協(xié)議封裝串口通信是為了更方便和安全地傳送數據,從上文可以看到,在發(fā)送大數據報時(shí),串口的速度其實(shí)不高,而本協(xié)議若需控制在毫秒級的處理,所發(fā)數據不能超過(guò)1192B。報文長(cháng)度字節AB范圍為0~65535,故每個(gè)報文大小為8B~8KB,數據部大小為0~8184B,所以數據分割范圍為0~8184B。故本協(xié)議更適用于小數據量傳送,比如在信號采集后的數據傳送等,傳輸一個(gè)雙精度浮點(diǎn)數需要14ms左右。
【設計封裝串口數據通信論文】相關(guān)文章:
微電子封裝業(yè)和微電子封裝設備論文09-06
射頻和微波微電子封裝論文08-01
數據通信及應用前景論文09-02
USB數據通信系統探析論文09-08
基于A(yíng)MF的Android數據通信論文10-29
數據通信的應用前景研究論文10-09
構建鐵路數據通信論文05-14
地鐵信號系統數據通信論文10-11