如何理解ISO15765-4協議——一個OBD診斷協議

首先給出ISO15765-4協議中對數據發送的要求

ISO_15765-4_cn_圖文_百度文庫

從這個協議中我們知道了幾個知識點:

① ISO15765-4是一個基於CAN匯流排的診斷協議。

② ISO15765-4有可能是一個CAN標準幀(11-bit),也有可能是一個CAN擴展幀(29-bit)。

③ ISO15765-4的波特率有可能是500kbps,也有可能是250kbps。

④ ISO15765-4的CAN通信是有請求,才會有回應的。並不是像J1939那樣廣播式的。

然後講下怎麼脫離枯燥的理論來感受ISO15765-4協議。我們在這裡以標準幀來舉例。

ISO15765-4協議中標準幀的幀ID

上面這個圖說明了ISO15765-4協議的幀ID有0x7DF、0x7E0、0x7E8、0x7E1、0x7E9等等(0x在這裡表示16進位)。看描述就能得知,0x7DF是外部測試設備發出的請求幀,而0x7E8是1號ECU發出的回應幀。好的,我們好像得到了一些線索,這些幀ID是ISO15765-4協議的顯著特徵。

要理解一個協議最好的方法是什麼呢?拿著協議,然後找到一個滿足這個協議的設備把玩一下。

在這裡給出一個很久以前買來的15765協議,下面是鏈接。

OBD2-iso15765不完全協議-僅供參考_百度文庫

部分ISO15765-4協議內容

在上面的圖中我們可以看到,我們的老朋友7DF和7E8,這兩個是幀ID,也就是CAN匯流排的「地址」。這個「xx」是可選位元組,根據你不同的需求,在這個位置填入不同的數據。我們用車速來舉一個簡單易懂的例子。

車速ISO15765-4協議中的表示方法

我們可以看到車速的可選位元組是「0D」,後面的意思是:Byte3(從左往右數第四個)的數值表示了車速。

現在我們驗證一下,選用廣成科技USBCAN-II Pro分析儀,將兩個通道短接在一起。之後選擇500k波特率,進入ECANTools軟體,選擇2通道,將0x7E8填入幀ID一欄,將06 41 0D 7B 00 00 00 00依次填入幀數據一欄,之後點擊發送。在OBD II界面中我們可以看到儀錶盤發生了轉動。這說明我們發送了正確的數據。我們看到儀錶盤顯示的車速是123,怎麼來的呢?幀數據的第四個位元組0x7B轉成16進位就得到了123。

填入正確的數據

車速發生了變化

以上是我們的一個簡單的模擬。並不是車上真實發生的事情,只是幫助您理解協議。

那這個OBD II界面在真實的試車環境下如何使用呢?這個界面的正確用法是,將CAN線(1通道)接入到車輛CAN匯流排上面。如果該車輛滿足ISO15765-4協議,那麼點擊「循環獲取實時數據」,軟體將自動發送幀ID為0x7DF的請求數據。要注意,第三個位元組是在變化的。

發送了很多幀ID為0x7DF的請求數據

從上面的圖中我們可以看到,我們發出了對「0D」這個可選位元組的請求。相應的車輛將會把「0D」的這個信息回應給我們。

得到了幀ID為0x7E8的回應

我們模擬了一下,真實車輛環境下還是有很多數據回應的。解讀下上面的圖,0x7E8表示這數據是1號ECU作出的回應。06 和 41是幀頭不用管,0D代表我這一包數據是代表車速,58代表真實的車速值是0x58,也就是88。

相信您已經大體上了解了ISO15765-4這個診斷協議,如果有什麼問題歡迎留言,我會對文章進行補充,感謝讀到這裡的各位。886

886


推薦閱讀:

車載乙太網物理層
汽車控制器(ECU)中DTC的狀態位

TAG:CAN匯流排 | OBD | 汽車電子控制 |