子功能參數(shù)定義
UDS協(xié)議中,有些診斷服務是帶有子功能的。子功能參數(shù)的取值范圍為0x00 - 0x7F。細心的同學應該發(fā)現(xiàn)了,子功能參數(shù)占用了一個字節(jié),可用的數(shù)值范圍為0~0xFF。但子功能的最大取值只到0x7F,那么最高位去哪了呢。這個子功能參數(shù)的最高位就是我們今天要聊的診斷服務肯定響應抑制位SuppressPosRspMsgIndicationBit,簡寫為SPRMIB。
如下是診斷服務子功能參數(shù)的格式定義。其中的最高位Bit7就決定了ECU是否需要給出肯定響應。
子功能參數(shù)格式定義

肯定響應抑制位的作用
ECU收到SPRMIB為1的服務時,不需要給出肯定響應。相反,當ECU收到SPRMIB為0的服務時,需要給出肯定響應。
例如,ECU收到診斷儀發(fā)來的Tester Present服務為$02 3E 00時,需要給出$02 7E 00的肯定響應。同樣是Test Present服務,如果ECU收到的是$02 3E 80,則無需給出肯定響應。
例外情況
ECU在響應某些診斷服務時,由于執(zhí)行時間較長,無法立即給出肯定響應。此時ECU會先給出NRC為0x78的否定響應。然后等到所請求的服務執(zhí)行完后,給出最終的肯定響應或否定響應。這種情況下,即使ECU收到的診斷服務請求中子功能參數(shù)肯定響應抑制位為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診斷請求已經(jīng)正確接收了,正在處理,稍后給出響應。
當ECU成功執(zhí)行了切換到Programming Session的操作后,由于之前給出了NRC為0x78的否定響應,此時必須給出肯定響應,用以通知Tester診斷請求已經(jīng)被成功執(zhí)行了。
-
復位器
+關注
關注
0文章
5瀏覽量
6946 -
診斷儀
+關注
關注
1文章
83瀏覽量
9514 -
ECU軟件
+關注
關注
1文章
13瀏覽量
10536
發(fā)布評論請先 登錄
UDS在CAN和以太網(wǎng)上的實現(xiàn)方案
【CPKCOR-RA8D1】+ 6. 使用RA8D1實現(xiàn)UDS診斷之27安全訪問
UDS診斷命令備忘錄
OBDII與UDS的區(qū)別是什么
基于MM32F0140系列MCU實現(xiàn)UDS Bootloader的設計
UDS診斷協(xié)議在純電動汽車電機控制器中的應用說明
UDS常用診斷服務
UDS之19服務中04子服務:讀取快照數(shù)據(jù)
UDS診斷服務響應規(guī)則介紹
汽車UDS協(xié)議棧與XCP協(xié)議棧
盟通方案|如何集成UDS協(xié)議
《CAN(FD)總線十萬個為什么》之UDS診斷(上)
在CANdelaStudio中如何修改肯定響應抑制位
淺析UDS中的肯定響應抑制SPRMIB
評論