下面設計的串列埠通訊協議用於完成雙機互聯程式的檔案傳輸功能,簡稱spcp。設計思想基於枕幀傳輸方式,即在向串列埠傳送資料時是一幀一幀地傳送。為了保證可靠傳輸,通過握手建立連線,在每一幀的傳輸中,採用傳送/應答/重連/失敗方式。
一、幀格式
雙機互聯採用3種幀:控制幀、資料幀與短語幀。控制幀與資料幀用於檔案傳輸,短語幀用於短訊息傳送。
1.資料幀
包括幀頭、負載資料和校驗和。幀頭6個位元組,如下圖所示,其中count表示負載資料的位元組數,check1表示第2與第3位元組校驗和。01
2345
0x00
0x00
count
check1
圖1 資料幀頭
負載資料長count位元組,最多不超過0x1000位元組。校驗和佔2個位元組,是對負載資料計算校驗和的結構。
2.控制幀
控制幀和控制訊號合作完成通訊同步與控制任務,它只有幀頭,長為6位元組。01
2345
0x00
0x01
npack
check2
圖2 傳輸起始控制幀
npack表示本次傳輸共傳送幀數,便於讓接收方控制進度,check2為第2,3位元組的校驗和。當npack=check2=0時,表示本次傳輸結束,當接收方收到該幀時,不管是否已收到應收的幀數,都將結束此次傳輸。在沒有發生傳輸錯誤的情況下,一次傳輸只會出現兩次控制幀,第一次在傳輸開始時,第二次在傳輸結束時。
3.短語幀
短語幀中負載均為文字資料。傳送與接收該幀不需要建立連線也沒有錯誤控制,只是在幀頭和幀尾插入了同步訊號。
0x03
文字資料
0x03
圖3 短語幀結構
二、控制訊號
為提高通訊效率,spcp使用控制訊號進行通訊同步、糾錯燈各種控制人物。spcp定義了6中控制訊號:
const byte syn[1] = ; //請求
const byte ack[1] = ; //響應
const byte resend[1] = ; //重發
const byte busy[1] = ; //忙
const byte bye[3] = ; //斷開連線
const byte str[1] = ; //簡訊息同步訊號
三、資料分幀及資料重組
應用程式傳送過來的資料作為乙個流按spcp進行分幀,切割後為每幀加上幀頭和校驗和,放入spcp內部緩衝區內準備傳送;在接收端,分幀的資料去掉幀頭重新歸到接收緩衝區流,由應用程式接收。
圖4 資料分幀過程
圖5 資料重組過程
四、傳輸流程
在傳送資料前,spcp傳送方將應用程式希望傳送的資料進行分幀,然後按照下面的步驟通訊。
1.握手
由傳送端傳送syn訊號,等待反饋;
接收端收到syn後返回ack訊號;
傳送端接收到ack訊號後,由傳送端傳送控制首幀;
接收到收到控制首幀後,checksum錯誤則傳送resend訊號,然後重複步驟c~d;如果正確,發ack訊號;
傳送端收到ack訊號後,轉到2資料傳輸的步驟a。
2.資料傳輸
由傳送端傳送第i幀幀頭,等待反饋;若傳送方發現該幀是控制結束幀,則轉到3斷開連線的步驟a;
接收端收到幀頭後,幀長度校驗和錯誤則發resend訊號,然後重複步驟a~b。如果正確,發ack訊號;
若傳送端收到ack訊號,則傳送幀中資料和校驗和;
接收端收到資料後,資料校驗和錯誤則發resend訊號,然後重複步驟c~d。如果正確,發ack訊號;
若傳送端收到ack訊號,則該幀資料傳送成功。傳送端傳送syn訊號,開始下一幀的握手過程;
若接收端收到syn訊號,則傳送ack訊號進行確認;
若傳送端接收到ack訊號,則重複a~e步驟進行下一幀的傳輸。
3.斷開連線
傳送方傳送控制結束幀,準備結束此次通訊;
若接收端接收控制結束幀,則傳送ack訊號,準備結束此次通訊;
若傳送端收到ack訊號,則傳送bye控制訊號;
若接收方收到bye訊號,則拆除此次連線,同時傳送ack訊號;
傳送方收到ack訊號後,拆除連線。
注意:上述3個階段的所有步驟中都存在超時處理,即若通訊的某一方在限定時間內沒有收到答覆,則將斷開連線,結束此次通訊。此外,如果因為某錯誤而引起的重發次數超過3次,也就中斷此次通訊。
FPGA 之串列埠通訊協議
串列埠通訊協議 串列埠通訊 uart 是一種用兩線 rx 傳送端 tx 接收端 實現的非同步 全雙工通訊方式。由於串列埠通訊沒有時鐘訊號線,由此而出現波特率 baundrate 即接收和傳送雙方規定好相同的波特率 以此來保證傳送的資料的正確性 波特率 一秒鐘內傳送的位元組數目。如下圖1是串列埠通訊協...
微控制器(記憶體篇) 通訊工程專業筆記
儲存器及儲存空間 特殊功能暫存器 高128位元組,sfr 擴充套件 d7d6 d5d4 d3d2 d1d0 cyac f0rs1 rs0ovf1p rs1,rs0 暫存器組選擇位,用來選擇當前的工作暫存器組。f0,f1 使用者標識位0,1 p 奇偶校驗位,如果a暫存器中1的個數字奇數時,p位置1,為...
通訊工程師讀《產品設計與開發》之第七章 概念生成
從這一章開始,做不做 和 做什麼 已經基本明確,進入了對 怎麼做 的討論。本書中提到的 概念生成 類似於我們的方案論證,主要工作內容是針對已經明確的功能效能指標,形成盡可能多的初步解決方案,並從中優選出可實現性最高的乙個或兩個方案,轉入下一階段工作 關鍵技術研究 概念生成階段,要 全面撒網,重點培養...