最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

UDS 診斷教程 (二)

2023-03-20 22:16 作者:一只開心的鳥  | 我要投稿

UDS 定義的診斷服務從邏輯來說分為以下幾類:

1. Diagnostic and Communication Management (診斷和通信管理)

2. Data Transmission (數(shù)據(jù)傳輸)

3. Stored Data Transmission (存儲數(shù)據(jù)傳輸,用于操作 DTC)

4. InputOutput Control (IO 控制)

5. Routine Control (不知如何翻譯好,作用是調(diào)用 ECU 內(nèi)部的預置函數(shù))

6. Upload Download (上傳下載)

UDS 規(guī)定使用 1 個 byte 來表示診斷服務,即所謂的 Service ID,簡稱 SID。本文介紹一下

Diagnostic and Communication Management 這一類診斷服務中的一部分。

DiagnosticSessionControl (0x10)

DiagnosticSessionControl 診斷 request 的格式

DiagnosticSessionControl 這個服務的 SID 是 0x10,request 固定為 2 個 byte,第一個

byte 是 SID,第二個 byte 的低 7bit 是 sub-function,用于指示 ECU 將進入的 session。

UDS 定義的 session 包括:

0x00 ISOSAEReserved(保留)

0x01 defaultSession

0x02 ProgrammingSession

0x03 extendedDiagnosticSession

0x04 safetySystemDiagnosticSession

0x05 – 0x3F ISOSAEReserved(保留)

0x40 – 0x5F vehicleManufacturerSpecific(由整車廠自定義使用)

0x60 – 0x7E systemSupplierSpecific(由 ECU 供應商自定義使用)

0x7F ISOSAEReserved(保留)

DiagnosticSessionControl 用于控制 ECU 在不同的 session 之間進行轉換,session 可以

看作是 ECU 所處的一種軟件狀態(tài),在不同的 session 中診斷服務執(zhí)行的權限不同。 ECU

上電之后,默認處在 defaultSession 中,在這個 session 中很多診斷服務不可以執(zhí)行,很

多診斷相關的數(shù)據(jù)不能讀取或?qū)懭?。一般的診斷儀啟動之后,會給 ECU 發(fā)送 10 03,即

讓 ECU 進入 extendedDiagnosticSession 中,在這個 session 中可執(zhí)行的診斷服務就很

多了。而如果要讓 ECU 保持在 non-defaultSession 中,則需要診斷儀每隔固定的時間發(fā)

送 0x3E 服務,ECU 才會知道診斷儀有和自己通信的需求,從而保持在 non-

defaultSession 中。另一個常用的 session 是 ProgrammingSession,在這個 session 中

可以進行軟件刷寫的一系列診斷服務。0x40 – 0x5F 這個范圍中的 session 由整車廠自定

義使用,比如,某些診斷服務或診斷數(shù)據(jù)的操作需要在生產(chǎn)線上執(zhí)行,即所謂的 End-Of-

Line,整車廠可以從這個范圍中選擇一個值來表示 EOL session;又或者在開發(fā)階段需要

某種“超級”session,則也可以從這里選一個值用來使 ECU 進入開發(fā)模式的 session。

DiagnosticSessionControl 這個服務非常簡單,但是它卻是 ECU 和診斷通信的第一條診斷

命令。

DiagnosticSessionControl 診斷
response 的格式

這個診斷服務的 response 分為三部分,第一部分是 0x50,作為 SID 的 echo;第二部分

是進入的 session,作為 sub-function 的 echo;第三部分是 4 個字節(jié),前兩個字節(jié)代表

P2Server_max,即 ECU 在應用層上對診斷命令的響應時間,后兩個字節(jié)代表

P2*Server_max

,即 ECU 在暫時無法處理當前診斷命令(具體表現(xiàn)為發(fā)送了 NRC 0X78),在應用層上

對診斷命令響應的最長時間。

ECUReset (0x11)

ECUReset 這條指令的用途是通過診斷請求使 ECU 重啟。

ECUReset 診斷 request 的格式

ECUReset 這個服務的 SID 是 0x11,request 固定為 2 個 byte,第一個 byte 是 SID,第

二個 byte 的低 7bit 是 sub-function,用于指示 ECU 將模擬哪種方式進行重啟。

常用的 sub-function 包括(只舉 2 個例子,UDS 還定義了很多其他的值)

0x01 hardReset 模擬 KL30 的重啟

0x02 keyOffOnReset 模擬 KL15 的重啟

當我們通過診斷命令改寫了 ECU 的某些數(shù)據(jù),或者對 ECU 進行了某些設置,只有將

ECU 重啟才能將這些配置生效,所以就有了這個診斷命令。在 ECUReset 執(zhí)行之后,

ECU 會從 Non-defaultsession 回退到 defaultsession 中。

SecurityAccess (0x27)

廠家可能會為 ECU 定義某些安全級別稍微高一些的診斷服務,在執(zhí)行此類服務之前,就

需要執(zhí)行 SecurityAccess 這個診斷命令,進行一個簡單的身份驗證。

完成 SecurityAccess 有以下步驟:

1. 診斷儀向 ECU 請求“Seed”(通常是一個與時間相關的偽隨機數(shù)),

2. ECU 向診斷儀發(fā)送“Seed”,

3. 診斷儀向 ECU 發(fā)送“Key” (根據(jù)請求得到的 Seed 和一個本地的密碼進行計算得來)

4. ECU 判斷診斷儀發(fā)來的“Key”是否有效

根據(jù) UDS 的定義,0x03, 0x05, 0x07 – 0x41 這個范圍留給用于 requestSeed 的 sub-

function;0x04, 0x06, 0x08 – 0x42 這個范圍留給用于 sendKey 的 sub-function。具體選

擇哪對值,由整車廠自己定義。整車廠也可以選擇多對 sub-function,用于不同等級的安

全訪問。

下面我舉一個完成 SecurityAccess 的診斷命令的例子,假設 0x05 用于 requestSeed,

0x06 用于 sendKey。

診斷儀發(fā)送 27 05

ECU 響應 67 05 01 01 01(seed 是 01 01 01)

診斷儀發(fā)送 27 06 02 03 04(key 值是 02 03 04,seed 是 01 01 01,假設本地密碼為 01

02 03,而算法就是將密碼與 seed 相加)

ECU 驗證成功 67 06

此時 ECU 就處于 unlocked 的狀態(tài)了,那些被保護起來的診斷服務和診斷數(shù)據(jù)可以被操作

了。通常來說,如果 ECU 重啟,或者回到了 default session,unlocked 狀態(tài)就失效了,

如果要執(zhí)行相關診斷服務,則需要再次執(zhí)行上面描述的過程。

時間有限,這篇文章里就介紹這三個診斷服務,即 0x10, 0x11, 0x27,后續(xù)有時間我再補

充其他的服務。


UDS 診斷教程 (二)的評論 (共 條)

分享到微博請遵守國家法律
安化县| 芦溪县| 太谷县| 涟源市| 元阳县| 安化县| 潜江市| 景宁| 淮北市| 阳城县| 高要市| 洛浦县| 莱芜市| 连江县| 湟中县| 交口县| 离岛区| 邻水| 益阳市| 东莞市| 孙吴县| 恩平市| 宜兴市| 南宫市| 肇庆市| 关岭| 永州市| 肥城市| 丁青县| 南康市| 南陵县| 萨嘎县| 鸡西市| 江源县| 余庆县| 湖南省| 红河县| 棋牌| 夹江县| 远安县| 缙云县|