由於工作中經常用到iso-14229,因此決定對該協議做個總體介紹和總結,既是對自己學習的總結,也能夠給初次涉及該協議的朋友乙個參考。
首先簡要介紹什麼是iso-14229,至於可以在網上找到的大篇理論介紹我就略過不講了,有興趣可以自行搜尋。簡單的說,它就是乙個用於汽車行業診斷通訊的需求規範,它只規定了與診斷相關的服務需求,並沒有涉及通訊機制,因此要實現乙個完整的診斷通訊還需要定義網路層協議(比如iso-15765),還有底層硬體實現方式(比如can控制器)。由於不涉及網路通訊機制,可以架設在各種網路之上,因此iso-14229也稱為uds(unified diagnostic services)。
雖然借鑑osi的七層結構,但是診斷通訊分層還是做了一些改變。可以參考如下列表:
osi layer
enhanced diagnostic services
iso 14229
presentation (layer 6) -
session (layer 5)
iso 15765-3
transport (layer 4)
iso 15765-2
network (layer 3)
iso 15765-2
data link (layer 2)
iso 11898
physical (layer 1)
iso 11898
顯然,從上表可以看出診斷通訊分層模型和osi的區別,同時也可以看到iso-14229在該模型中的位置。其實,可以將該模型簡化為:
- 統一診斷服務層 (layer 7)
- 網路服務層 (layers 1 to 6)
因此,在使用iso-14229時,下面的通訊機制可以改變,比如基於can,基於藍芽,基於lan,基於flexray等等。
要了解協議,首先要知曉協議內定義的術語。我挑了一些使用頻率比較高的在此解釋。
1. diagnostic service (診斷服務)
診斷服務是介於診斷裝置和被診斷ecu之間的一種資訊互動方式。通常是由診斷裝置發出請求,被診斷ecu做出回應。
2. diagnostic trouble code (故障碼)
故障碼是用來標記ecu故障的**,它遵循一定的規則(以後會介紹),駐留在ecu的非易失性儲存器中。
3. diagnostic data (診斷資料)
診斷資料是可以被診斷裝置請求的ecu內部資料,它包括:
-當前資料,即ecu正在使用的某個資料,比如車速、節氣門角度等
-儲存資料,即被ecu儲存在儲存器中某一時刻的資料,比如dtc
-靜態資料,即恆定不變的ecu內部資料,比如vin碼。
4. diagnostic session (診斷會話)
可以理解為某種診斷模式或許可權,即在不同的模式下,對不同的診斷服務的使用做了限制。
5. diagnostic routine (診斷例程)
駐留在被診斷ecu中的子程式,它可以被診斷裝置啟動和停止。比如格式化eeprom的子程式。
6. tester, 就理解為診斷裝置或診斷儀吧。
再來說一些跟診斷服務相關的術語。
1 addressing type (定址方式)
定址方式指的是診斷訊息的傳遞方式,有兩種定址方式:
-physical ,物理定址,即1對1通訊,用於知道確切的被診斷ecu的位址
-functional,功能定址,即1對n通訊,或者說廣播傳送,用於不知道確切的被診斷的ecu的位址,向一組或者全體ecu傳送請求
2 result
result指的是tester請求診斷服務執行後,從ecu的返回結果。可以有兩種結果:
-positive response,正響應,即診斷請求執行成功
-negative response,負響應,即診斷請求執行失敗
3 service identifier
service identifier可以簡稱為sid,它是乙個一位元組的無符號整數,用以指代某個診斷服務。診斷協議為每乙個診斷服務都分配了唯一乙個sid,因此更方便協議的軟體實現。同時,在日常工作中工程師們用sid來指代某個診斷服務比說出某個服務的名字更方便簡潔。比如readdatabyidentifier這個服務是去按照id去讀某個診斷資料,直接說22服務會更加方便。
4 data identifier
簡稱did,是2個位元組無符號整數的id,用來標識ecu中貯存的某個診斷資料單元。它的好處是當要讀取某個單元的診斷資料時,只要讀對應的did就可以,不必知道資料的具體位址。即使當ecu中的資料位址發生變化時,只要did和某個位址單元的對映位址改變即可,對於使用者來說did遮蔽了具體實現細節,而將重點放在了資料本身。
5 negative response code
可以簡稱為nrc,或者叫錯誤響應碼,是乙個位元組的無符號整數。它是診斷協議為每一種執行失敗的診斷服務分配的失敗原因代號。
6 sub-function
有些診斷服務可以支援不同的診斷子服務,sub-function就是用來定義這種子服務的,它將某乙個服務細分為更為具體的服務,它是乙個位元組的無符號整數。比如ecureset這個服務就有0x01,0x02,0x03等幾種sub-function指代具體的reset方式。
怎樣學習ISO 14229和ISO 15765
一 iso 14229 uds協議就是iso14229,你需要做的就是了解並牢固掌握iso14229中的內容,但是14229裡的內容實在是太多了,還沒開始看就頭疼了。從作者的學習經歷來看,如果從頭開始看14229是不切實際的,不但需要很長的時間,而且標準裡面的描述非常生硬晦澀難懂,需要有極大的耐心,...
Python學習筆記之exec函式簡析
個人部落格,支援一下唄!本文首發於ray s blog exec 函式的作用 動態執行python 也就是說exec 可以執行複雜的python 而不像eval 函式那樣只能計算乙個表示式的值。舉乙個簡單的小例子,如下 i 12 j 13 exec answer i j print answer i...
Vue原始碼學習之VueRouter極簡實現
在拉鉤訓練營學習已經有一段時間了,感覺這段時間的收穫遠比自己獨自學習強的多,自己學習的時候經常會因為惰性,無法堅持,在這裡有班主任時刻關注你的學習進度 感覺對我這種懶人蠻好的 最重要的是有了乙個學習的計畫,不用無頭蒼蠅一樣東一點西一點,最後什麼都沒記住。學習都是需要方法和技巧的,在訓練營會有專業的老...