pc機與嵌入式裝置通訊協議設計原則
嵌入式裝置在執行中需要設定引數,這個工作經常由pc機來實現,需要為雙方通訊設計協議,有代表性協議是
如下三種:
表1 三種常見通訊協議 名稱
固定二進位制
變長二進位制
純文字協議 代表
dl645
asn.1
xml 例項
vog:4bytes
cur:4bytes
01 04 vol
02 04 cur
vol=100v,
cur=5a
適合場合
長度內容固定
單幀資料較短
提供資料模型
長度靈活可變
資料內容、長度、
交換格式不受限 優點
編譯碼簡單,效率高,占用記憶體少
長度靈活,可以實現巢狀
可讀性極佳,十分靈活,跨平台 缺點
可讀性差,長度
受限,不易擴充套件
可讀性較差,
編譯碼較複雜
占用記憶體多,編譯碼耗時
從上表可以看到,一般嵌入式裝置記憶體和運算效能都有限,因此固定二進位制是首選通訊協議。
一. 簡單性
保證協議是乙個簡單的方案,晦澀難懂往往意味著實現困難和容易出錯。協議的結構宜採用平面方式,每個域作用明確,資料域盡可能設計得長度和位置固定,注釋詳盡,文件清晰,例項豐富,讓人盡快上手和理解。
二. 可擴充套件
必須保證將來增加功能和更改硬體後協議仍能勝任工作,這往往是通過預留空間來實現,協議的變更應該只是量的增加,不至於引起協議結構的變化。
三. 低耦合
理想情況下每個協議包是原子資訊,即本協議包不與其他協議包牽連,以防止通訊丟幀和設定牽連帶來的錯誤。
四. 穩定性
協議包長度適宜:太小包含的資訊過少,協議包的種類繁多,容易引起通訊混亂和牽連錯誤;太大包含的資訊過多,可讀性較差,組幀和解幀的工作困難,還會帶來通訊易受干擾的缺陷,一般協議長度以最小原子性資訊為標尺。
協議必須包括校驗機制,以便於接收方判別協議包正確完整接收,如果出錯需要較好的機制來確保通訊成功
(如重傳)。
五. 高效率
按資訊型別區分協議包類別,如:設定網路資訊引數,設定當前執行引數,可以區分開來,方便程式處理。
將同種操作編碼為乙個子集是一種高效手段,如read操作,編碼為0x0010,write操作,編碼為0x0020。
資料盡可能設計成同構模式,如果實在有差異,至少將同型別資料放置在一起,這樣程式可以充分利用指標和線性定址加速處理。
六. 易實現
儘量減少複雜演算法的使用,如,通訊鏈路穩定,資料幀的校驗碼可以由checksum代替crc。除非資源非常緊張,否則不要將過多的資訊擠壓在乙個資料裡,因為它會帶來可讀性差和實現困難。
七.軟體開發
盡可能地讓硬體isr完成驅動工作,不要讓「程序」參與複雜的時序邏輯,否則處理器將步履蹣跚且邏輯複雜!如:
接收固定長度的資料幀,可以使用dma,每接收完一幀dma_isr向程序發訊息。小心處理dma斷層異常(接收的資料幀長度正常但資料錯誤,資料為上幀的後半部分+本幀的前半部分)。
接收不定長的資料幀,可以使用狀態機,當接收到「幀尾資料」時向程序發訊息。小心資料紊亂和超時異常(資料紊亂時需要將狀態機及時復位,超時一般使用定時器監控)。
八. 考慮硬體
如果通訊鏈路是高速匯流排(如sport可達100mbps),一般設計成一幀產生一次中斷,它通過長度觸發的dma來實現,需要將協議設計成固定長度,如附錄a。它具備高效率,但靈活性較差。
如果通訊鏈路是低速匯流排(如uart一般100kbps),一般接收一位元組產生一次中斷,可以將協議設計成變長幀,如附錄b。它具備高靈活性,但效率較低。
附錄a 乙個基於dma傳輸固定長度的協議例項。
圖1顯示了pc傳送資料幀的格式,總長為64位元組,是4位元組的整倍數,符合絕大部分32位處理器結構體對齊的特性。
0x3c:int8u,幀頭,可見字元』
len:int8u,本幀的總資料長度,在圖4即為64
dst:int8u,標識目標裝置的id號
src:int8u,標識源裝置的id號
data:56位元組的儲存區,內容依賴於具體的通訊幀(例項見表2)
cmd:int16u,資料幀的類別
cs:int8u, 對它前面所有資料(62位元組)進行8位累加和校驗
0x7d:int8u, 幀尾,可見字元』}』
圖1 pc傳送資料幀
表2 data域資料結構例項
目的
給m&m08配置iec61850協議通用部分
命令字
0x0010/0x0020/0x0030(1/2/3mu)
名稱
位元組
單位
說明
目標mac 6
/傳送資料報的目標mac位址
源mac 6
/傳送資料報的源mac位址
vlan 4
/0表示不新增,其他為vlan值
通道對映 32
/源資料對映到asdu的資料集2
/應用識別符號
asdu數 1
/應用服務資料單元個數
資料域總長度 51
/不能超過圖1資料幀的data總長
附錄b 乙個基於變長格式的uart通訊協議例項。
pc與iwl880a(一種無線通訊產品,詳見www.rimelink.com)通訊幀採用
變長格式,如下圖所示。大部分裝置(常見為pc機)對於接收以「回車符」的機制很好處理,協議中的tail就等於0x0d(換行符)。
嵌入式通訊協議 SPI
spi 序列外設介面,是一種高速的 全雙工,同步的通訊匯流排。spi的通訊原理很簡單,它以主從方式工作,這種模式通常有乙個主裝置和乙個或多個從裝置,需要至少4根線,事實上3根也可以 單向傳輸時 也是所有基於spi的裝置共有的,它們是mosi 資料輸入 miso 資料輸出 sclk 時鐘 cs 片選 ...
嵌入式軟體 自學 通訊協議
嵌入式通訊協議 分為 大協議 和 小協議 兩種 大協議 主要用來進行系統外的整個系統之間的通訊,協議如ethernet usb sata pcie等,傳輸速率在數百甚至上千mb s。小協議 主要用於系統內各個晶元間的通訊,協議如i2c spi uart協議,傳輸速率在幾kb s到幾mb s。小協議 ...
嵌入式硬體相關通訊協議
spi是序列外圍裝置介面 serial peripheral inte ce 是motorola首先在其mc68hcxx系列處理器上定義的。是一種高速的 全雙工的和同步的序列通訊匯流排。乙個主裝置和乙個從裝置使用4根線進行通訊 具有多個從裝置時,主裝置會給每乙個從裝置分配乙個cs腳,以便於選擇相應的...