1. CommunicationControl (0x28) service
該服務是控制某類通訊關閉/開啟接收或者發送。當uds需要下載下傳更新或者傳輸大量資料時需要将can總線資源讓出來,提高傳輸效率。這時候可以通過28服務關閉某類的通訊發送封包到can總線上,待下載下傳更新或傳輸資料完成後再通過28服務将通訊開啟即可。
1.1 請求格式:
由上圖可以28服務請求格式分為四個部分
第一部分:第一位元組為SID 0x28
第二部分:第二位元組為sub function,控制該類通訊的接收和發送是開啟還是關閉
0x00 enableRxAndTx (使能接收和發送)
0x01 enableRxAndDisableTx(使能接收和關閉發送)
0x02 disableRxAndEnableTx(使能發送和關閉接收)
0x03 disableRxAndTx(關閉接收和發送)
0x04 enableRxAndDisableTxWithEnhancedAddressInformation(使能接收和關閉發送,針對特定的位址)
0x05 enableRxAndTxWithEnhancedAddressInformation(使能接收和發送,針對特定的位址)
0x06 - 0x7F都是保留或者留給廠商自定義的。
第三部分:communicationType:控制哪種類型通訊
由上圖可知communicationType占一個位元組,本人隻使用0-2bit的參數。0x1代表普通應用封包,0x2代表網絡管理封包,0x3代表普通應用封包和網絡管理封包。
1.2 響應格式:
由上圖可知,響應格式分為兩個部分:第一部分:response SID ,第二部分:sub function。兩個部分各自占用一個位元組。
1.3 舉例
診斷儀請求ECU關閉普通應用封包的接收和發送,即sub function:0x03,communication Type:0x01。發送請求和響應如下圖所示:
2. ControlDTCSetting (0x85) service
該服務用于控制ECU的DTC存儲,這個服務常常和前面提到的28服務一起使用,比如,在開始寫參數之前,為了獲得更快的傳輸速度,我們用28服務把所有ECU的通信關閉了,但此時因為收到不到相關的封包,ECU會沒有必要地存儲很多DTC,這時如果我們使用85服務把ECU存儲DTC的功能暫時性地禁止掉,則不會造成這種麻煩。比如:ECU會檢測can總線封包情況,當使用28服務關閉接收和發送封包時,can總線沒有了封包,ECU會存儲CAN總線錯誤的DTC,是以有時候會在使用28服務之前使用85服務關閉響應DTC存儲功能。
2.1 請求格式:
請求格式分為三個部分;
第一部分:請求SID 0x85
第二部分:sub function,占用一個位元組,參數如下
0x00 : ISOSAEReserved(保留)
0x01 : on (DTC 開啟)
0x02 : off (DTC 關閉)
0x03-0x7F :保留或者廠家自定義
第三部分:DTCSettingControlOptionRecord 廠家自定義,比如,可以用FF FF FF 來表示這條診斷指令針對所有的DTC。
2.2 響應格式
響應格式分為兩個部分,第一部分:response SID :0xC5; 第二部分:DTCSettingType:請求 sub function的echo。
2.3 舉例
診斷儀請求ECU關閉所有DTC存儲,廠家自定義請求參數DTCSettingControlOptionRecord= 0xFFFFFF為所有DTC存儲控制碼。請求與響應如下圖所示:
參考知乎:https://zhuanlan.zhihu.com/p/33852614
UDS協定棧系列文章:
UDS(一)入門概述
UDS(二)網絡層
UDS(三)網絡層時間參數
UDS(四)應用層
UDS(五)應用層10/3E
UDS(六)應用層11/27
UDS(七)應用層28/85
UDS(八)應用層22/2E
UDS(九)應用層14/19
UDS(十)應用層34/36/37