UDS學習之 ISO 14229 簡介

2021-10-10 15:18:43 字數 2561 閱讀 2059

由於工作中經常用到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極簡實現

在拉鉤訓練營學習已經有一段時間了,感覺這段時間的收穫遠比自己獨自學習強的多,自己學習的時候經常會因為惰性,無法堅持,在這裡有班主任時刻關注你的學習進度 感覺對我這種懶人蠻好的 最重要的是有了乙個學習的計畫,不用無頭蒼蠅一樣東一點西一點,最後什麼都沒記住。學習都是需要方法和技巧的,在訓練營會有專業的老...