子功能參數定義
UDS協議中,有些診斷服務是帶有子功能的。子功能參數的取值范圍為0x00 - 0x7F。細心的同學應該發現了,子功能參數占用了一個字節,可用的數值范圍為0~0xFF。但子功能的最大取值只到0x7F,那么最高位去哪了呢。這個子功能參數的最高位就是我們今天要聊的診斷服務肯定響應抑制位SuppressPosRspMsgIndicationBit,簡寫為SPRMIB。
如下是診斷服務子功能參數的格式定義。其中的最高位Bit7就決定了ECU是否需要給出肯定響應。
子功能參數格式定義
肯定響應抑制位的作用
ECU收到SPRMIB為1的服務時,不需要給出肯定響應。相反,當ECU收到SPRMIB為0的服務時,需要給出肯定響應。
例如,ECU收到診斷儀發來的Tester Present服務為$02 3E 00時,需要給出$02 7E 00的肯定響應。同樣是Test Present服務,如果ECU收到的是$02 3E 80,則無需給出肯定響應。
例外情況
ECU在響應某些診斷服務時,由于執行時間較長,無法立即給出肯定響應。此時ECU會先給出NRC為0x78的否定響應。然后等到所請求的服務執行完后,給出最終的肯定響應或否定響應。這種情況下,即使ECU收到的診斷服務請求中子功能參數肯定響應抑制位為1,最終的肯定響應也不會被抑制。
例如在如下的診斷通信中, 即使ECU收到了子功能為0x82的診斷會話控制(DiagnosticSessionControl)服務,最終仍然需要給出肯定響應。
Tester : $02 10 82
ECU : $03 7F 10 78
ECU : $06 50 02 00 32 01 F4
我們來分析一下這個過程。首先Tester請求ECU進入編程回話(Programming session),但不希望ECU給出肯定響應。但是進入編程回話通常需要ECU復位,重新啟動后進入Bootloader。這個過程所需要的時間會超過P2CAN_Server (通常為50ms)。所以ECU會先給出NRC為0x78的否定響應,用以通知Tester診斷請求已經正確接收了,正在處理,稍后給出響應。
當ECU成功執行了切換到Programming Session的操作后,由于之前給出了NRC為0x78的否定響應,此時必須給出肯定響應,用以通知Tester診斷請求已經被成功執行了。
-
復位器
+關注
關注
0文章
5瀏覽量
6850 -
診斷儀
+關注
關注
1文章
79瀏覽量
8964 -
ECU軟件
+關注
關注
1文章
13瀏覽量
10361
發布評論請先 登錄
相關推薦
UDS在CAN和以太網上的實現方案

誰能幫我解答下CAN總線中的UDS診斷?
Labview 基于CAN UDS燒錄Hex文件
UDS診斷命令備忘錄
OBDII與UDS的區別是什么
基于MM32F0140系列MCU實現UDS Bootloader的設計
UDS診斷協議在純電動汽車電機控制器中的應用說明
UDS常用診斷服務

UDS之19服務中04子服務:讀取快照數據

UDS診斷服務響應規則介紹

汽車UDS協議棧與XCP協議棧

評論