天天看點

ISO 14229系列(一)簡介

前言

首先感謝autogeek的分享,原文連結:http://www.cnblogs.com/autogeek/p/4458591.html

由于工作中經常用到ISO-14229,是以決定對該協定做個總體介紹和總結,既是對自己學習的總結,也能夠給初次涉及該協定的朋友一個參考。

首先簡要介紹什麼是ISO-14229,至于可以在網上找到的大篇理論介紹我就略過不講了,有興趣可以自行搜尋。簡單的說,它就是一個用于汽車行業診斷通信的需求規範,它隻規定了與診斷相關的服務需求,并沒有涉及通信機制,是以要實作一個完整的診斷通信還需要定義網絡層協定(比如ISO-15765),還有底層硬體實作方式(比如CAN控制器)。由于不涉及網絡通信機制,可以架設在各種網絡之上,是以ISO-14229也稱為UDS(Unified Diagnostic Services)統一診斷服務。

1. 用途

ISO-14229的用途就是規定了診斷需求,是以想要了解ISO-14229的用途首先要知道診斷的用途。診斷最先用于汽車尾氣排放的監測,後來發展為包括對汽車行駛故障的監測,想知道診斷的發展史,可以維基百科。至少現代的診斷可以粗略的分為排放相關和非排放相關,ISO-14229隻定義非排放相關的診斷需求。非排放相關診斷可以做什麼呢?其實用途很大,基本貫穿整個汽車ECU生命周期。首先,ECU開發時要用到它來建構bootloader,上傳和下載下傳資料;測試時要用它來讀寫RAM、ROM,控制外設;在産線上,要用它來校準機械件,重新整理軟體;在行駛過程中,要用它來監測各種故障,并記下故障碼;在4S店,技師需要用它來讀出故障碼,判斷故障發生點,還可以用來更新ECU程式。現在很火熱的車聯網概念,其中一些就是通過OBD口聯網,讀取車内故障碼,車輛資訊,或者油量、速度等等車相關的參數。

2. 診斷通信分層結構

雖然借鑒OSI的七層結構,但是診斷通信分層還是做了一些改變。可以參考如下清單:

OSI Layer Enhanced Diagnostic Services
Application (layer 7) 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等等。

3. 相關術語

3.1 協定相關術語

要了解協定,首先要知曉協定内定義的術語。我挑了一些使用頻率比較高的在此解釋。

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, 就了解為診斷裝置或診斷儀吧。

3.2 診斷服務相關術語

再來說一些跟診斷服務相關的術語。

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方式。

繼續閱讀