What is UDS Service 0x10

2023-03-09 06:02:08

Why need the UDS Service 0x10?

ECU在正常工作時會處於某一個對談模式下,上電後會自動進入預設對談模式,所以ECU啟動後我們不需要輸入0x10 01來進入該對談模式。ECU的不同對談模式間存在一定的狀態轉換關係規則(特定邏輯)。

初次接觸UDS的話,可能不太理解這個0x10服務的含義和用途,我們通過一個隱喻公司的大廳和兩個私密的會議室的例子來進行類比。

例如:我們將ECU之間的通訊類比成兩個員工之間的對話。兩個人在公司的大廳隨便暢所欲言,隨意討論非私密性的話題,這個場景類似預設對談,不會對安全性有要求,無需刻意尋找專門使用場所,即不需要專門對談控制進入此模式,上電即預設進入。

如果兩人想討論機密專案的話題,不想被其他不相關人員知道,於是換個環境,從公司大廳進入了單獨的會議室,這個過程可以類比成從預設對談進入了擴充套件對談,進入會議室後為了確認對方是本人沒被冒充,進行識別鑑權詢問口令「天王蓋地虎」,檢視對方能不能答出「寶塔鎮河妖」,認證鑑權的這個附加過程就屬於跟0x10服務配合使用的安全存取服務0x27,溝通結束退出會議室回到大廳區域,這個過程就是從擴充套件對談退出到預設對談的過程。

而從預設對談進入了程式設計對談,也是類似從公司大廳進入了單獨的會議室溝通,只是這個會議室的功能更高階一點比如可以寫入檔案到ECU等,功能更高階相對應的鑑權也得有所區別,在程式設計對談這個會議室裡,就換一個詢問口令「你知道今天下雨嗎?」,如果對方能答上「今天不下明天下」就認為身份合法。

0x10 types

0x10 對談模式的三種模式:

  • 10 01 預設模式(default session)

    • 在預設對談模式下,一般情況下不允許支援寫服務(Write Data By Identifier 0x2E),也不允許支援請求下載服務(Request Download 0x34)
  • 10 02 程式設計模式(Programming Session)

    • 在程式設計對談模式下,就可以支援(Request Download 0x34)
  • 10 03 擴充套件診斷模式(extended Diagnostic Session)

    • 在拓展診斷對談模式下,就允許支援寫服務(Write Data By Identifier 0x2E)

Conversion between session modes

不同對談模式間的切換存在一定的邏輯關係。下圖顯示的就是一個不同對談間轉換範例圖,需要注意的是不同OEM對於進入程式設計對談通常會有不同的設計要求,具體專案中對談間跳轉關係請依據OEM專案的規範檔案為準。

  • 預設對談
    裝置上電後自動進入預設對談模式,從圖中我們可以看出在預設對談模式下的切換關係。

    本模式重新進入:可以通過0x10 01再次進入預設對談,或通過0x11 01、0x11 03復位服務重啟進入預設對談。

    本模式進入其他模式:預設對談模式可以通過0x10 02進入程式設計對談模式,在有些專案中預設對談是不能直接進入程式設計對談模式,具體專案中是否能夠支援需要查閱專案產品的診斷技術規範;預設對談模式下還可以通過0x10 03進入擴充套件對談模式。

  • 程式設計對談
    啟動程式設計對談ECU會進入boot模式,進入boot模式後ECU可以進行韌體的更新。boot的更新可以通過Jtag介面使用工具進行燒錄,相對來說Jtag介面的許可權等級比較高,可以通過工具直接修改儲存空間中對應地址的資料資訊。

    實際專案會使用CAN網路來軟體刷寫,商用階段去除Jtag介面,這樣處理的話安全性會得到一定保障。同樣的在boot模式下可以刷寫韌體,那很多診斷服務在boot下也可以正常執行,如配合刷寫的0x110x220x2E0x310x280x340x360x370x85等服務。

    本模式重新進入:處於程式設計對談模式下,可以通過0x10 02再次進入程式設計對談。

    本模式進入其他模式:程式設計對談狀態下可以通過0x10 01進入預設對談,或通過0x11 01服務復位ECU來進入預設對談;程式設計對談不能進入擴充套件對談模式。

  • 擴充套件對談

    某些服務需要擴充套件對談的支援才能執行,擴充套件對談下如果不配合使用0x3E服務(保持對談服務),ECU會在數秒後自動退出擴充套件對談模式進入到預設對談模式。

    本模式重新進入:處於擴充套件對談模式下,可以通過0x10 03再次進入擴充套件對談。

    本模式進入其他模式:在不使用0x3E服務保持對談時,可以通過超時自動退出到預設對談模式,可以通過0x10 01進入預設對談,或通過0x11 01、0x11 03服務復位ECU來進入預設對談;在某些專案中僅支援在0x10 03擴充套件模式下,才能進入0x10 02程式設計對談。

UDS 0x10 Message format

Request Message format

  • SID
    就是0x10
  • Sub-Function
    子服務就是上文講的01預設對談02程式設計對談03擴充套件對談
    當然規範中還存在00保留欄位、04安全系統診斷對談、05-3F保留、40-5F主機廠自定義欄位、60-7E零部件供應商自定義欄位等等(瞭解即可)。
  • parameter
    Parameter項是對應到最詳細子功能的屬性引數設定項,屬性引數的設定也是根據實際情況來進行配備。
    0x10服務沒有引數。

Response Message format

  • SID
    SID的值為請求報文中SID + 0x40 , 為0x50
  • Sub-Function和Parameter
    這兩部分的內容根據具體情況確定,在專案診斷規範中有明確規定。

Negative Response Code - NRC

負響應回覆報文的格式同樣可以分為3個部分:

  • 首先第一個位元組是0x7F,表明請求失敗;
  • 第二個位元組為請求的服務SID ;
  • 第三個位元組為失敗原因程式碼NRC
    NRC程式碼具體對應的失敗原因可以查閱NRC的表格來確定,在具體的專案中這部分內容可以查閱專案中的零部件網路診斷規範。
    注意:負響應NRC程式碼錶一般在專案中是通用的。

負響應報文格式範例:

7F 10 7E
// 7F表明該相應失敗
// 對應的失敗服務是10
// 失敗原因是7E,查閱NRC表知道7E的含義是「Sub-function not supported in active session」,提醒使用請求10 02子功能請求時不應該在當前對談模式下,當前的對談模式不支援10 02子功能請求使用。

UDS 0x10 and 0x27 Process

進入擴充套件模式程式設計模式通常是配合0x27服務一起使用的,所以把這兩個服務一起來進行介紹,是因為通常0x27服務使用的前提就是先進入0x10服務的擴充套件對談,
反過來講0x10服務很少單獨使用,一般都是跟0x27服務配合先完成安全驗證,然後其他服務才能在一定的對談模式和安全接入等級中正常使用。

主機廠和零部件廠商可以通過不同的UDS服務對ECU執行很多操作,這些操作有的會修改ECU設定,有的可以重啟裝置,有的可以讀取資訊等等。顯而易見的是,不同的操作所造成的後果嚴重程度是不一樣的,因此做敏感操作前需要通過安全認證就很有必要。

我們通常把預設狀態下的ECU叫做鎖定狀態(Locked),成功執行完成$27服務後的狀態叫做解鎖(Unlock),只有在解鎖狀態下才能進行資料寫入、修改等等操作。

上位機和ECU的大致互動流程如下:

//UDS or APP
10 03
50 03
27 01
67 xx xx xx xx
27 02 xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx 
67 02
2E xx xx
//BOOT
10 02
50 02
27 11
67 xx xx xx xx
...
34 xx xx

Reference

鑑源丨車載ECU嵌入式裝置的診斷測試 - 對談和安全控制
https://www.freebuf.com/articles/ics-articles/346353.html

CAN診斷輕鬆入門第二講-UDS服務講解
https://zhuanlan.zhihu.com/p/348308023