汽車CAN總線有動力總成PCAN,底盤控制CCAN,整車控制BCAN,娛樂ECAN,診斷DCAN五種。
CAN診斷,即是對CAN網絡中各節點,各CAN總線,網關的故障進行檢查與修復。
統一診斷服務(UDS),即ISO-14229標准,是絕大多數汽車廠商使用的診斷服務。
10:診斷會話請求服務
一般的診斷請求的輸入格式為:710 02 10 01
幀ID為710,幀數據長度為8,數據長度為02,數據內容為10 01,其中10代表診斷會話發起服務,01表示默認會話(其中10服務可以切換三種模式,01為默認模式,02為編程模式,03為擴展模式)
必須先發起診斷會話,類似於先建立握手。
2E:寫入配置請求服務
對某個ECU寫入配置項數據,也就是重新標定
常用幀格式:710 07 2E C0 01 01 03 22 FF
數據長度07,C0 01是一個DID數據標識符,代表某ECU節點的多個參數,01 03 22 FF代表ECU里的多個參數應該設定的值
11: 網關復位刷新請求服務
一般如果用2E寫入ECU配置值值后, 必須對網關刷新復位, 不然這個值可能不會立馬生效.(其中01為硬件復位,02為KeyOfOn復位,03為軟件復位)
常用如: 710 02 11 01 (代表向所有的ECU發起硬復位請求)
27: 安全訪問認證請求服務
一般如果需要涉及2E寫入ECU配置項等服務時, 必須通過網關的安全認證, 不然無權限修改, 你可以理解成, 沒成功申請到27安全訪問的話, 你的CAN網絡權限是只讀的, 不可寫.
常用如:710 02 27 03 (代表向網關發起安全認證的請求)
這個服務就是用來權限管理的,他的權限進入方式是:
診斷儀 電機控制器ECU
1. 請求種子 --> 計算種子
2. 接收種子 <-- 答復種子
3. 發送密鑰 --> 計算密鑰 對比密鑰
4. 獲取權限 <-- 返回權限切換狀態
比如你要向ECU寫入數據,一般人當然不能隨便寫,只有專門懂的人才能寫入,因此需要權限來保證。
22: 讀取配置請求服務
簡單點說: 讀取某個ECU配置項信息
常用如:710 03 22 C0 01 (代表讀取C0 01 這個數據標識符里的多項參數值)
19: 讀取故障碼請求服務
讀取正常CAN網絡的故障信息, 一般有ECU節點丟失(比如ECU節點松動脫落或者燒壞了等), 電壓過高過低, CAN總線異常(即Bus Off)等...這些故障會記錄在一串超長故障碼(DTC)列表里.
常用如:710 03 19 02 0C (代表讀取整個CAN網絡的當前已生效的故障碼)
01子服務:通過狀態掩碼的形式去,查找該狀態掩碼匹配的故障個數,其實意思就是查找故障個數。這里稍微解釋一下狀態掩碼,在UDS規定里面,每個故障都對應8個狀態,每個狀態對應一個bit,比如狀態0對應bit0,表示當前發生的故障,狀態3對應bit3,表示已經確認的故障等等,那么狀態掩碼的意思就是用一個8bit的數去按位與,如果與的結果非0表示匹配到了,然后故障數就++。
02子服務:通過狀態掩碼的形式去,查找匹配的故障,以及故障的狀態。
04子服務:請求指定故障碼(DTC)的快照信息,意思就是說為了找到故障的原因,查找故障發生時刻的一些數據,來分析故障原因。
06子服務:請求指定故障碼(DTC)的擴展信息,就是想了解一些該故障的一些其他信息,比如發生的次數、自恢復的次數等,具體數據可自定義。
0A子服務:通過該服務可獲取所有支持的故障碼和故障狀態信息,注意是所有的故障及故障碼。
14: 清除故障碼請求服務
清除所有ECU的診斷故障碼, 包括故障碼相關的快照等,
如果CAN網絡有故障, 其會源源不斷的反饋以上故障,
即使清除后也會立馬再發出.
常用如:710 04 14 FF FF FF (代表清除所有ECU上的診斷故障碼(包括故障碼相關的快照等.))
23/3D:
23是通過地址讀數據
3D是通過地址寫入數據,一般用的較少。
28服務:
通信控制,包括對發送和接收消息的開關控制。
31服務:
例程控制,比如一些復雜的操作需要用他來實現,目前比較通用的包括燒錄時的數據完整性檢查、擦除內存等等。
2F服務:
IO控制,主要用於對一些輸入輸出口的調試控制,目前這一塊接觸較少,比如一些傳感器的開關控制。
34/35/36/37服務:
和數據傳輸有關的服務,包括請求傳輸、請求下載、數據傳輸、數據上傳、退出傳輸等,這些服務和BootLoader相關。
85服務:
用於控制故障的更新,包括開啟和關閉故障更新,比如關閉之后不允許故障、故障狀態、故障記錄等信息的更新。開啟則反之。
診斷回應
肯定回應:718 06 50 01 00 32 01 F4 00
在ISO-14229中規定,ECU的診斷響應ID=ECU診斷請求ID+0x008;響應服務的ID=請求服務的ID+0x40
否定服務:718 03 7F 10 22 00 00 00 00
其中7F為否定碼 22表示為否定原因條件不符合
其他原因:11服務不支持,12子功能不支持,13報文長度錯誤,31請求超出范圍
例子:
診斷讀取故障碼:
7E1 03 19 02 FF 00 00 00 00
回應:
7E9 07 59 02 FF C1 21 20 DB
讀取故障碼19服務有01,02,04,06,0A等子服務,在01子服務中,第四個數據字節代表需要讀取哪種狀態的DTC,其中FF表示讀取所有Bit置1位的DTC
響應服務59中,C1 21 20為DTC的內容,分為高位字節C1,中位字節21,低位字節20,DB表示這個DTC的狀態。
在高位字節的8Bit中,又分為三個編碼集合,first編碼集合:Bit7-Bit6;second:Bit5-Bit4;third:Bit3-Bit0
first編碼集合有00動力系統P,01底盤系統C,10車身系統B,11網絡系統U
分析DTC信息C1 21 20 DB:
分解為二進制:1100 0001 0010 0001 0010 0000 1101 1011
可知是網絡出了問題,即通信故障,與ABS通信丟失。
DB表示的DTC狀態可根據狀態位描述得到:DTC出現錯誤,且在當前駕駛循環下被確認
Bit 0 Test Failed DTC最近的一次診斷結果為失敗
Bit 1 Test Failed This Operation Cycle 在當前駕駛循環中處於故障狀態
Bit 2 pending DTC 在當前或者前一個駕駛循環DTC處於故障狀態
Bit 3 Confirmed DTC DTC已經被確認
Bit 4 Test Not Completed Since Last Clear 自上一次清除故障碼后測試沒有完成
Bit 5 Test Failed Since Last Clear 自上一次清除故障碼后測試結果為失敗
Bit 6 Test Not Completed This Operation Cycle 在當前駕駛循環中測試沒有完成
Bit 7 Warning Indicator requested 與DTC相關的報警指示請求