好多同學第一次定義通信協議的時候比較懵,包括我第一次搞串口通信的時候,好長時間都沒想明白應該怎么進行兩塊開發板之間進行資料通信,如何通過一塊開發板去操控另外一塊開發板,因此寫此文章,以供大家參考
首先明白啥是通信協議,參考百度百科 通信協議_百度百科 給出的定義,通信協議是指雙方物體完成通信或服務所必須遵循的規則和約定,其實光看這個定義絕對云里霧里的,不知所云,下面按照我的理解進行分解吧,
通信協議總共分三部分:
一:規定通信硬體介面方式,如通過串口,網路,藍牙或者其它方式進行通信
二:規定硬體通信的語法,如:串口需要規定 波特率 資料位 停止位 奇偶校驗位(比較常用的就是 115200 8 N 1 或 9600 8 N 1兩種),在比如 網路規定TCP傳輸還是UDP傳輸,傳輸埠號為多少等
三:規定通信規則,如
| 幀頭 (2位元組) | 功能碼 (1位元組) | 引數 (1位元組) | 資料長度 (1位元組) | 資料 (N位元組) | crc校驗 (2位元組) | 幀尾 (1位元組) | |||
| 一幀資料的開頭2位元組,定義為幀頭,比如為0x5A和0x54 | 這一位元組分為高低四位 | 引數標號0x01~0x07分別表示不同的引數,例如引數1為IP地址,引數2為子網掩碼,引數3為默認網關,引數4為http埠號 | 資料長度+資料(取值1~255) | 要發送的資料內容,存盤順序全部為網路位元組序 | CRC_16校驗,回圈冗余校驗碼(CRC),用來檢驗資料是否正確,如果資料有誤則棄包, | 一幀 結束 標志 0xEE | |||
| 高四位為讀寫位: | |||||||||
| 低四位為回復位, | |||||||||
| 讀取0x10* | |||||||||
| 下置0x20* | |||||||||
| 回復讀取0x01* | |||||||||
| 回復下置0x02* | |||||||||
上面為總括規則,后面則根據上面規則進行詳細的資料定義,比如:想定義一條設定IP的通信協議,則 可以如下設定
| 幀頭 (2位元組) | 功能碼 (1位元組) | 引數 (1位元組) | 資料長度 (1位元組) | 資料 (4位元組) | crc校驗 (2位元組) | 幀尾 (1位元組) | |||
| 0x5A,0x54 | 設定網路引數:0x11 | IP地址: 0x01 | 5 | IP地址 | CRC_16校驗 | 結束0xee | |||
上面的通信協議僅僅是舉例,實際協議則根據自己的專案需求進行對應更改即可,比如幀尾變成兩個位元組,功能碼和引數合二為一,CRC校驗采用1個位元組的累加校驗,超過255就溢位,只保留低八位即可等等
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/302297.html
標籤:其他
上一篇:??[資料結構]動圖詳解鏈表(單鏈表/雙鏈表……)(動圖+實體)【建議收藏】!??
下一篇:RM-串口的讀取
