考慮到嵌入式設備的內(nèi)存、算力有限,固定二進制是首選通信協(xié)議。
下文簡析嵌入式設備通信協(xié)議應該有的特點。
簡單性
保證協(xié)議是一個簡單的方案,晦澀難懂往往意味著實現(xiàn)困難和容易出錯。協(xié)議的結(jié)構(gòu)宜采用平面方式,每個域作用明確,數(shù)據(jù)域盡可能設計得長度和位置固定,注釋詳盡,文檔清晰,實例豐富,讓人盡快上手和理解。
協(xié)議一般都需要以下域:幀頭,長度,幀類型,目標地址,源地址,數(shù)據(jù),校驗,幀尾。
串口通信數(shù)據(jù)包格式如下圖所示。
可擴展
必須保證將來增加功能和更改硬件后協(xié)議仍能勝任工作,這往往是通過預留空間來實現(xiàn),協(xié)議的變更應該只是量的增加,不至于引起協(xié)議結(jié)構(gòu)的變化。
低耦合
理想情況下每個協(xié)議包是原子信息,即本協(xié)議包不與其他協(xié)議包牽連,以防止通訊丟幀和設置牽連帶來的錯誤。
穩(wěn)定性
協(xié)議包長度適宜:太小包含的信息過少,協(xié)議包的種類繁多,容易引起通訊混亂和牽連錯誤;太大包含的信息過多,可讀性較差,組幀和解幀的工作困難,還會帶來通訊易受干擾的缺陷,一般協(xié)議長度以最小原子性信息為標尺。
協(xié)議必須包括校驗機制,以便于接收方判別協(xié)議包正確完整接收,如果出錯需要較好的機制來確保通訊成功(如重傳)。
高效率
按信息類型區(qū)分協(xié)議包類別,如:設置網(wǎng)絡信息參數(shù),設置當前運行參數(shù),可以區(qū)分開來,方便程序處理。
將同種操作編碼為一個子集是一種高效手段,如Read操作,編碼為0x0010,Write操作,編碼為0x0020。
數(shù)據(jù)盡可能設計成同構(gòu)模式,如果實在有差異,至少將同類型數(shù)據(jù)放置在一起,這樣程序可以充分利用指針和線性尋址加速處理。
易實現(xiàn)
盡量減少復雜算法的使用,如,通訊鏈路穩(wěn)定,數(shù)據(jù)幀的校驗碼可以由CheckSum代替CRC。除非資源非常緊張,否則不要將過多的信息擠壓在一個數(shù)據(jù)里,因為它會帶來可讀性差和實現(xiàn)困難。
盡可能地讓硬件ISR完成驅(qū)動工作,不要讓“進程”參與復雜的時序邏輯,否則處理器將步履蹣跚且邏輯復雜!如:
接收固定長度的數(shù)據(jù)幀,可以使用DMA,每接收完一幀DMA_ISR向進程發(fā)消息。小心處理DMA斷層異常(接收的數(shù)據(jù)幀長度正常但數(shù)據(jù)錯誤,數(shù)據(jù)為上幀的后半部分+本幀的前半部分)。
接收不定長的數(shù)據(jù)幀,可以使用狀態(tài)機,當接收到“幀尾數(shù)據(jù)”時向進程發(fā)消息。小心數(shù)據(jù)紊亂和超時異常(數(shù)據(jù)紊亂時需要將狀態(tài)機及時復位,超時一般使用定時器監(jiān)控)。狀態(tài)機相關文章請移步此處:談談單片機編程思想——狀態(tài)機。
兼容硬件
如果通信鏈路是高速總線(如SPORT可達100Mbps),一般設計成一幀產(chǎn)生一次中斷,它通過長度觸發(fā)的DMA來實現(xiàn),需要將協(xié)議設計成固定長度,如附錄A。它具備高效率,但靈活性較差。
如果通信鏈路是低速總線(如UART一般100kbps),一般接收一字節(jié)產(chǎn)生一次中斷,可以將協(xié)議設計成變長幀,一個基于變長格式的UART通信協(xié)議實例:
它具備高靈活性,但效率較低。
上圖顯示了PC發(fā)送數(shù)據(jù)幀的格式,總長為64字節(jié),是4字節(jié)的整倍數(shù),符合絕大部分32位處理器結(jié)構(gòu)體對齊的特性。
0x3C:INT8U,幀頭,可見字符’《’
Len:INT8U,本幀的總數(shù)據(jù)長度,在圖4即為64
Dst:INT8U,標識目標設備的ID號
Src:INT8U,標識源設備的ID號
Data:56字節(jié)的存儲區(qū),內(nèi)容依賴于具體的通信幀(實例見表2)
Cmd:INT16U,數(shù)據(jù)幀的類別
CS:INT8U, 對它前面所有數(shù)據(jù)(62字節(jié))進行8位累加和校驗
0x7D:INT8U, 幀尾,可見字符’}’
Data域數(shù)據(jù)結(jié)構(gòu)實例:
-
嵌入式
+關注
關注
5150文章
19665瀏覽量
317452 -
通信協(xié)議
+關注
關注
28文章
1034瀏覽量
41160 -
硬件
+關注
關注
11文章
3483瀏覽量
67486
原文標題:嵌入式設備的通信協(xié)議特點
文章出處:【微信號:c-stm32,微信公眾號:STM32嵌入式開發(fā)】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
嵌入式領域中常用的5種通信協(xié)議是什么
嵌入式系統(tǒng)通信協(xié)議及具體程序?qū)崿F(xiàn)方法是什么
基于嵌入式Linux的RS485通信協(xié)議
EPA 通信協(xié)議在μC/OS-II嵌入式系統(tǒng)中的設計與實現(xiàn)
基于嵌入式的實時通信協(xié)議棧研究與設計
結(jié)合內(nèi)部CAN總線與外部網(wǎng)絡通信協(xié)議的嵌入式系統(tǒng)開發(fā)
在FPGA中實現(xiàn)嵌入式TCP/IP通信協(xié)議棧

II嵌入式的EPA通信協(xié)議與模型設計

PC機與嵌入式設備通信協(xié)議設計原則

IOT(物聯(lián)網(wǎng))的七大通信協(xié)議之Http協(xié)議

評論