在簡單介紹完J1939協議後,今天咱們來說講J1939的數據鏈路層,熟悉數據鏈路層是開發任何一種協議軟件的基礎,數據鏈路層中的協議數據單元(PDU)格式是很是重要的。
web
SAE J1939 PDU(Protocol Data Unit)編程
P 優先級 數組
這三位僅在總線傳輸中用來優化消息延遲,接收機必須對其作全局屏蔽(即忽略)。消息優先級可從最高 0設置到最低 7。全部控制消息的缺省優先級是 3。其餘全部信息、專用、請求和 ACK 消息的缺省優先級是 6。當定義新的參數組編號,或總線上通訊量變化時,優先級
能夠升高或下降。當消息被添加到應用層,將給出一個推薦的優先級。 OEM 能夠對網絡作相應調整,優先級域應當是可重編程的。
微信
R 保留位網絡
保留此位以備從此開發使用。不能將此位與 CAN 保留位混淆。全部消息應在傳輸中將 SAE 保留位置 0。從此新的定義可能擴展 PDU 格式域,定義新的 PDU 格式,擴展優先級段或增長地址空間
優化
DP 數據頁 spa
數據頁位選擇參數組描述的輔助頁。在分配頁一的 PGN 以前,先分配完頁零的可用 PGN。
.net
PF PDU 格式orm
PF 域,8位。肯定 PDU 的格式,也是肯定數據域對應參數組編號的域之一。參數組編號用來肯定或標識命令、數據、請求、確認和否認等參數組編號所肯定或標識的信息須要一個或多個 CAN 數據幀進行通訊。若消息長於 8 字節,必須將消息分包發送。如消息長小等於 8 字節,則使用單個 CAN 數據幀。
開發
PS 特定PDU
特定 PDU 是一個 8 位域,它的定義取決於 PDU 格式,根據 PDU 格式它多是目標地址或者組擴展。 若 PDU 格式( PF)域的值小於 240,特定 PDU 域是目標地址。
SA 源地址
這個域定義了消息發送的特定目標地址。注意,對於任何設備,若是源地址與接收到消息的目標地址不相同應忽略此消息。全部設備做爲消息響應者應對全局目標地址( 255)做出監聽和響應。
Data 數據域
若是給定參數組用於表示很少於 8 字節的數據時,
可以使用 CAN 數據幀所有的 8 個字節。一般,建議對全部的參數組進行分配時,將 8 個字節分配或保留以備從此擴展之用。這樣能夠很容易地添加新參數,並確保與只定義了部分數據域的舊版本的兼容。當數據長度很少於 8 字節時,將預約義的參數組數據長度值賦予 CAN 數據長度碼( DLC);不然,若是參數組的數據長度大於 8,將 CAN 數據長度碼( DLC)賦值爲 8。
長度從 9 字節到 1785 字節的數據
若是一個給定的參數組數據長度爲 9 至 1785 字節時,數據通訊是經過多個 CAN 數據幀實現的。所以,用「多包「來描述這種類型的參數組編號。若是參數組的定義爲多包,在少數特定場合只傳輸少於 9 字節的數據時,參數組以單幀 CAN 數據幀發送,其中 DLC 置 8。若是某特定參數組傳輸 9 字節或者更多字節,將使用「傳輸協議功能」。經過傳輸協議功能的鏈接管理能力來創建和關閉多包參數組的通訊。傳輸協議功能的數據傳輸能力,經過傳送一系列包含分包數據的 CAN 數據幀(包),能獨自實現數據通訊。另外,傳輸協議功能還提供了對於目標地址特定的傳輸的流控制和握手功能。全部與特定多包應答相關的 CAN 數據幀必須置 DLC 爲 8。
SAE J1939 消息類型:
J1939 的消息類型總共有 命令,請求,確認/響應,組功能
瞭解了數據鏈路層的結構後,那麼在應用中,是如何解析一個參數呢?
PGN(Parameters Group Number)就是解決這一問題的,那麼PGN的格式以及構成能夠經過下圖一目瞭然
其中 61184 和65280~65535是留給用戶自定義的。
本文分享自微信公衆號 - 嵌入式程序猿(InterruptISR)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。