UDS诊断协议规范与要求
1.UDS簡介
1.1標準介紹
國際標準ISO 14229,基于OSI基本模型實現。如下所示:
應用層(第7層),ISO 14229-1,ISO 14229-3 UDSonCAN,ISO 14229-4 UDSonFR,ISO 14229-5 UDSonIP,ISO 14229-6 UDSonK-Line,ISO 14229-7中規定的統一診斷服務UDSonLIN,進一步補充了ISO 27145-3 WWH-OBD。
表示層(第6層),特定車輛制造商,ISO 27145-2 WWH-OBD。
會話層(第5層),在ISO 14229-2中做了描述。
傳輸層(第4層),在ISO 15765-2 DoCAN中做了描述,包括FlexRay上的ISO 10681-2通信,ISO 13400-2 DoIP,ISO 17987-2 LIN,ISO 27145-4 WWH-OBD。
網絡層(第3層), 在ISO 15765-2 DoCAN中做了描述,在FlexRay上的ISO 10681-2通信,ISO 13400-2 DoIP,ISO 17987-2 LIN,ISO 27145-4 WWH-OBD。
數據鏈路層(第2層),在ISO 11898-1,ISO 11898-2,ISO 17458-2,ISO 13400-3,IEEE 802.3,ISO 14230-2,ISO 17987-3 LIN和其他標準ISO 27145- 4 WWH-OBD中做了描述。
物理層(第1層),在ISO 11898-1,ISO 11898-2,ISO 17458-4,ISO 13400-3,IEEE 802.3,ISO 14230-1,ISO 17987-4 LIN和其他標準ISO 27145-4中對 WWH-OBD做了描述。
ISO 14229由以下部分組成,總標題為道路車輛 - 統一診斷服務(UDS):
第1部分:規范和要求
第2部分:會話層服務
第3部分:CAN實施的統一診斷服務(UDSonCAN)
第4部分:FlexRay實現的統一診斷服務(UDSonFR)
第5部分:Internet協議實施的統一診斷服務(UDSonIP)
第6部分:K線實施的統一診斷服務(UDSonK-Line)
第7部分:本地互聯網絡實施(UDSonLIN)上的統一診斷服務
第n部分:統一診斷服務在…實施(UDSon …)
其中ISO-14229 包括ISO 14229-1和ISO 14229-2(會話層服務)兩部分。
診斷測試儀(客戶端)和電子控制單元(ECU,服務器)基于該協議進行通訊。
OSI診斷模型
1.2使用介紹
1.2.1 常見名詞解釋
診斷故障碼DTC:識別故障狀態的數字通用標識碼;
永久性DTC:執行DTC清除請求所無法清除的故障信息,存儲在非易失性存儲器,知道滿足特定指令或達到特定標準(如監管);
重新編程軟件:部分啟動軟件允許重新編程ECU;
1.2.2診斷數據類型
常見診斷數據有車速、車門控制、系統狀態、鏡像位置等。數據類型分類如下所示:
2.診斷報文格式
2.1診斷請求報文
spr=1,ECU不給出正響應;
spr=0,ECU給出正響應;
目的:告訴ECU是否需要發送響應數據;
2.2診斷應答報文
正響應報文:
負響應報文:
byte1:response service id = 0x7F; byte2:spr + sub-function = service id; byte3:NRC,診斷指令執行失敗錯誤碼; eg:7F 22 13 ;7F代表負響應,22代表服務類型,其中13代表請求消息錯誤。否定響應碼(NRC):
0x01- 0x0F:暫保留; 0x10:未知錯誤,服務被拒絕; 0x11:不支持該服務請求; 0x12:不支持子功能; 0x13:消息長度或格式錯誤; 0x14:請求信息長度超出; 0x15 - 0x20:暫保留; 0x21:服務端正忙; 0x22:條件不滿足; 0x23:暫保留; 0x24:請求順序錯誤; 0x25:指令已經被接收,但是未被執行; 0x26:失敗的操作導致當前操作無法執行; 0x27- 0x30:暫保留; 0x31:參數錯誤; 0x32:暫保留; 0x33:安全校驗未通過; 0x34:暫保留; 0x35:秘鑰不匹配; 0x36:已達到解鎖最大錯誤次數; 0x37:超時時間未到; 0x38 - 0x4F:由擴展數據鏈路安全性保留; 0x50 - 0x6F:暫保留; 0x70:不允許上傳下載; 0x71:數據傳輸中斷; 0x72:擦除或燒寫內存錯誤; 0x73:塊序列計數錯誤; 0x74 - 0x77:暫保留; 0x78:收到請求,延遲響應; 0x79 - 0x7D:暫保留; 0x7E:當前會話下子功能不支持; 0x7F:當前會話下服務不支持; 0x80:暫保留; 0x81:RPM太高; 0x82:RPM太低; 0x83:當前引擎正運行; 0x84:當前引擎為運行; 0x85:截止當前時間引擎運行時間太短; 0x86:溫度過高; 0x87:溫度過低; 0x88:車速過高; 0x89:車速過低; 0x8A:油門/踏板過高(超過了當前要求的最大閾值); 0x8B:油門/踏板過低; 0x8C:變速器檔位不在空檔; 0x8D:變速器檔位不在排檔; 0x8E:暫保留; 0x8F:制動開關沒有關閉; 0x90:換檔桿不在駐車檔; 0x91:變矩器離合器鎖定; 0x92:電壓過高; 0x93:電壓過低; 0x94 - 0xEF:暫保留(特定條件下); 0xF0 - 0XFE:為汽車制造商保留; 0xFF:暫保留;會話狀態
3.診斷服務類型
3.1服務類型簡述
1.診斷與通信管理;
2.數據傳輸;
3.存儲數據傳輸,用于操作DTC;
4.IO控制;
5.調用ECU內部預置函數;
6.上傳與下載;
3.2服務類型詳解
3.2.1 診斷與通信管理
3.2.1.1. 0x10 - DiagnosticSessionControl(診斷通信控制)
解釋:請求控制與ECU的診斷會話。 格式:0x10|SessionTypeSessionType-請求消息子功能定義:0x00 ISOSAEReserved(保留)0x01 defaultSession(ECU上電后的默認狀態)0x02 ProgrammingSession(進行軟件刷寫相關的服務)用于解鎖BootLoader相關的診斷服務,即程序燒寫;0x03 extendedDiagnosticSession(診斷啟動后接收到10 03轉為該狀態)用于解鎖高權限診斷服務,如寫入數據、參數、讀寫診斷碼;0x04 safetySystemDiagnosticSession0x05 – 0x3F ISOSAEReserved(保留)0x40 – 0x5F vehicleManufacturerSpecific(由整車廠自定義使用)0x60 – 0x7E systemSupplierSpecific(由ECU供應商自定義使用)0x7F - ISOSAEReserved(保留)肯定響應:0x50|SessionType|SessionParameterRecord....... 否定響應:0x12:不支持子功能參數;0x13:消息長度錯誤;0x22:不滿足請求標準/條件;3.2.1.2. 0x11 - ECUReset
強制對ECU進行重置。 格式:0x11|resetTyperesetType - 請求消息子功能定義0x00:保留;0x01:再次初始化,恢復為上電狀態;0x02:模擬斷電重置;0x03:軟件重置,重新啟動應用程序;0x04:進入休眠狀態;0x05:禁止啟用“快速關閉電源”功能;0x06-0x5F:整車廠商自定義0x7F:保留肯定響應:0x51|resetType(0x00-0x7F)|powerDownTime(0x00-0xFF)powerDownTime:0x00 - 0xFE 254s; 0xFF 表示失敗或者時間不可用 否定響應:0x12:不支持子功能參數;0x13:消息長度錯誤;0x22:不滿足請求標準;0x33:ECU未被解鎖,請求重置受到了保護;3.2.1.3. 0x27 - SecurityAccess
請求解鎖安全服務,常用見交互流程:1.客戶端請求種子;2.服務端發送種子;3.客戶端發送秘鑰;4.服務端驗證秘鑰有效性,進行解鎖與應答; 5.服務端清除上電/復位延遲計數器的內部提示信息;備注:1.服務端需要支持延遲計數器,當服務器加電/復位時被鎖定時需要延遲,整車廠商選擇是否支持延時定時器。2.requestseed參數值應時鐘為奇數,相同安全等級的sendkey參數值=requestseed參數值+1。3.任何時候,只有一個安全級別處于活動狀態。如requestseed 0x03處于活動狀態,Tester端當前與requestseed 0X01安全級別解鎖成功,那么Tester只可以與requestseed 0x01關聯的安全功能才可以被解鎖,requestseed 0x03關聯的安全功能將會被關閉(其中安全級別的變編號是任意的)。4.嘗試安全性訪問時,不應該阻礙汽車的正常通信與其他診斷通訊。5.服務器鎖定時請求安全服務,安全服務器應支持拒絕。格式:0x27| requestseed( 0x01/0x03/0x05/0x07-0x7D)| Data.....0x27| sendkey (0x02/0x04/0x06/0x08-0x7E)| Data.....子功能定義:requestseed與sendkey具有一定的固定關系:requestseed = 0x01 - sendkey = 0x02requestseed = 0x03 - sendkey = 0x04數據參數:securityKey:由算法依據seed生成的;securityAccessDataRecord:傳輸到服務端的seed信息;肯定響應:0x67| securityAccessType(0x00-0x7F)| Data..... 否定響應:0x12:不支持功能參數;0x13:消息長度錯誤;0x22:不滿足請求標準;0x24:應該先發送seed數據,而不是先發送key數據;0x31:Data為無效數據;0x35:key比對不成功,校驗不通過;0x36:超過最大試錯次數;0x37:當前服務器處于延時狀態; 展示案例: 1. 服務端(ECU)處于“鎖定”狀態(1)請求種子requestseed : 0x27|0x01service seed : 0x67|0x01|0x36 0x57(2)發送秘鑰sendkey : 0x27|0x02|0xC9 0xA9response : 0x67|0x02 2.服務端處于“解鎖”狀態(1)請求種子requestseed:0x27|0x01service seed:0x67|0x01|0x00 0x003.2.1.4. 0x28 - CommunicationControl
打開/關閉某些消息的接收與發送; 格式:0x28| controlType(0x00 - 0xFF)| communicationType(0x00 - 0xFF)| nodeIdentificationNumber......controlType:子功能:0x00:指定的通信類型未啟用數據的接收與傳輸;0x01:應啟用消息接收,禁用指定通信類型的數據傳輸;0x02:應禁用消息接收,啟用指定通信類型的數據傳輸;0x03:應禁用指定通信類型的數據接收與傳輸;0x04:應將尋址總線主機相關的子總線切換到診斷模式;0x05:應將尋址總線主機相關的子總線切換到程序調度模式;0x06-0x3F:保留;0x40-0x5F:整車廠商自定義;0x60-0x7E:系統供應商自定義;0x7F:保留;communicationType:應用的控制通信類型,允許同時控制多種通信類型。nodeIdentificationNumber:用于識別車輛子網絡節點。肯定響應:0x68| controlType(0x00 - 0x7F) 否定響應:0x12:不支持子功能參數;0x13:消息長度錯誤;0x22:禁用/啟用請求失敗(服務器正常模式下使用);0x31:參數錯誤;展示案例:1.禁用傳輸網絡管理消息請求(當)0x28| 0x01(第7位為0)| 0x02(網絡管理)0x68| 0x012.將遠程網絡地址為0x000A節點連接到僅診斷調度模式0x28| 0x04| 0x01| 0x00 0x0A0x68| 0x043.切換到具有增強地址信息的應用程序調度模式,連接到子網絡節點0x000A0x28| 0x05| 0x01 0x00 0x0A0x68| 0x053.2.1.5. 0x3E - TesterPresent
使ECU保持連接狀態,并將已機會的診斷服務或者通信保持現有狀態。可防止服務端恢復為默認狀態。 格式:0x3E| subFunction(0x00-0x80) subFunction:0x00:不支持suppressPosRspMsgIndicationBit子函數值; 0x01 - 0x7F:值保留;肯定響應:0X7E| 0X00 否定響應:0x12:不支持子功能參數;0x13:消息長度錯誤;展示案例:1.請求消息流程案例0x3E| 0x000x7E| 0x002.可定響應消息流程0x3E| 0x80無響應由服務器發送3.2.1.6. 0x83 - AccessTimingParameter
讀取/修改活動通信時間參數,此功能取決于ECU能力支持和數據鏈路拓撲結構。每個爭端會話只支持一個擴展時序參數集。因ECU支持的時序參數集不用,通常僅考慮用于物理尋址。 改服務提供四種模式:1.擴展時間參數設置;2.默認時間參數設置;3.當前時間參數獲取;4.指定時間參數設置; 格式:0x83| timingParameterAccessType(0x00 - 0xFF)| timingparameterrequestRecord......timingParameterAccessType:0x00:保留;0x01:讀取服務端擴展時序參數集(當前服務器支持值);0x02:更改服務端所有定時參數為默認值;0x03:讀取當前使用的定時參數;0x04:更改定時參數值;0x05 - 0xFF:保留;肯定響應:0xC3| 0x00-0x7F| Data ..... 否定響應:0x12:不支持子功能參數;0x13:消息長度或格式錯誤;0x22:條件不滿足;0x31:無效參數;展示案例:1. 時序參數設置為默認值0x83| 0x02 0xC3|0x023.2.1.7. 0x84 - SecuredDataTransmission
執行擴展數據鏈接安全性數據傳輸; 常見診斷服務數據傳輸方法:1.不安全的數據傳輸模式2.安全的數據傳輸模式注:如下服務不可在安全模式下執行:a.0x86/0x2A/0x3E 格式:0x84| Data.....肯定響應:0xC4| Data..... 否定響應:0x13:數據長度錯誤;0x38 - 0x4F:保留;3.2.1.8. 0x85 - ControlDTCSetting
控制(開關)ECU中DTC狀態位存儲; 格式: 0x85| Data.....DTCSettingType:0x00:保留;0x01:請先恢復更新診斷故障碼狀態位;0x03-0x3F:保留;0x40-0x5F:整車廠商自定義;0x60-0x7E:系統供應商自定義;0x7F:保留;肯定響應:0xC5| 0x00 - 0x7F 否定響應:0x12:不支持子功能參數;0x13:消息長度或格式錯誤;0x22:條件不滿足;0x31:無效參數;展示案例: 1.請求消息流程1.00x85| 0x020xC5| 0X02 2.請求消息流程2.00x85| 0x010xC5| 0x013.2.1.9. 0x86 - ResponseOnEvent
命令ECU自主上報DTC及相關的環境數據,關閉也是使用該指令(一般用于開發前期)。 注:1.該服務可以在任何會話中設置與激活;2.當診斷服務正在執行任務時,將會被推遲執行;3.多個事件發生一個事件正執行,多個事件處理應整車廠商定義事件;4.當事件將被執行時,服務器應執行對應響應服務中包含的服務;5.該服務啟動后,服務器將會對客戶端做出響應,知道服務結束;6.移動非默認控制通信會話時,應先請求停止該服務。在返回默認狀態下處于活動狀態下的所有該服務應該被重新激活;7.多個該服務可以與不同的需求同時啟動和停止診斷服務;8.設置該服務應適用如下內容:a.若eventtype第六位為0(不存儲事件),服務斷電時,應終止服務器進行復位;b..若eventtype第六位為1(存儲事件),應根據服務器重新啟動并繼續執行;9.抑制響應位打開后,客戶端將用于控制該服務的停止、啟動、清除;10.若設置有限窗口時間過時,將有最終響應,若有限時間窗口結束前ROE被停止,則不發送最終響應;11.為使得各響應之間更好的隔離,該服務更適合應用于瞬時狀態時間。每次時間都有對應的響應。 格式:0x86| eventType(0x00-0xFF)| eventWindowTime...| serviceToRespondToRecord .....eventType(功能位6):0x000x01 子功能參數:0x00:停止服務端繼續發送響應;0x01:檢測到當前任務匹配的新的DTC;0x02:定時器中斷;0x03:將事件表示為新的內部數據記錄;0x04:在肯定響應中的所有事件都已經報告在服務端使用;0x05:激活服務端;0x06:清除服務端設置邏輯;0x07:***0x08-0x1F:保留;0x20-0x02F:整車廠商自定義;0x30-0x3E:系統供應商自定義;0x3F:保留;肯定響應:0xC6| eventType(0x00-0x7F)| numberOfIdentifiedEvents(0x00 - 0xFF ....)|響應附加參數| 服務請求響應所需附加服務參數 否定響應:0x12:不支持子功能參數;0x13:消息長度或格式錯誤;0x22:條件不滿足;0x31:事件類型參數錯誤、事件窗口時間無效、DID不支持、有限事件窗口與存儲狀態為請求事件;展示案例:1.請求消息流程示例1.00x86| 0x01| 0x08| 0x01| 0x19 0x01 0x010xC6| 0x01| 0x00| 0x08| 0x01(testFailed)| 0x19 0x01 0x012.請求消息流程示例2.00x86| 0x05| 0x080xC6| 0x01| 0x00| 0x083.請求消息流程示例3.00x86| 0x05| 0x080xC6| 0x01| 0x00| 0x08readDTCInformation:更多查看P1283.2.1.10. 0x87 - LinkControl
調整ECU數據鏈路層和物理層狀態,如控制通信波特率(帶寬),調整步驟:1.客戶端驗證是否可以執行轉換;2.客戶發送執行請求;(1) 判斷ECU是否支持將要調整的目標波特率;(2) 讓ECU數據鏈路層和物理層轉到目標波特率的通信狀態; 格式:0x87| linkControlType(0x01)| linkControlModeldentifier(0x00 - 0xFF) 子功能參數:0x00:保留;0x01:驗證是否可以執行指定預定義參數的轉換;0x02:驗證是否可以執行特定定義參數轉換;0x03:請求服務端將數據鏈路轉換為當前驗證信息中的請求模式;0x04-0x3F:保留;0x40-0x5F:整車廠商自定義;0x60-0x7E:系統供應商自定義;0x7F:保留;肯定響應:0xC7| 0x00 - 0x7Ff否定響應:0x12:不支持子功能參數;0x13:消息長度或格式錯誤;0x22:條件不滿足;0x24:0x31:參數錯誤;展示案例:1.請求格式:0x87| 0x02| Data....2.請求格式:0x87| 0x033.設置波特率0x87| 0x01| 0x05(115200kBit/s)0xC7| 0x01轉換波特率0x87| 0x83無響應應答4.轉換波特率為特定值0x87| 0x02| 0x02 0x49 0xF0 (249F0 - 150000)0xC7| 0x02 轉換波特率0x87| 0x83無響應應答5.驗證是否滿足轉換條件0x87| 0x01| 0x200xC7| 0x01轉換到編程調度器0x87| 0x833.2.2 數據傳輸單元
3.2.2.1. 0x22 - ReadDataByIdentifier
客戶端請求包含一個或者多個字節的診斷數據,用于表示服務器維護記錄。數據的格式由整車制造商或系統供應商定義。 格式:0x22| dataIdentifier(0x00-0xFF...) |......肯定響應:0x62| dataIdentifier(0x00-0xFF...)|....... 否定響應:0x13:消息長度或格式錯誤;0x14:0x22:條件不滿足;0x31:參數錯誤;0x33:安全校驗未通過;展示案例:1.讀取VIN碼數據0x22| 0xF1 0x900x62| 0xF1 0x90| 0x57 0x30 0x4C 0x30 0x30 0x30 0x30 0x34 0x33 0x4D 0x42 0x35 0x34 0x31 0x33 0x32 0x362.讀取多個數據(0x010A和0x0110)0x22| 0x01 0x0A| 0x01 0x10 0x62| 0x01 0x0A| 0xA6 * * * * * * * * * | 0X01(MSB) 0X10(LSB)| 0x8C3.2.2.2. 0x23 - ReadMemoryByAddress
允許客戶通過提供起始地址和讀取內存大小向服務器請求內存數據。 格式:0x23| addressAndLengthFormatIdentifier(0x00-0xFF)| 起始地址參數| 內存大小參數 肯定響應:0x63| dataRecord (0x00=0xFF)....... 否定響應:0x13:消息長度或格式錯誤;0x22:條件不滿足;0x31:參數錯誤;0x33:服務器被鎖定;展示案例:1.4字節尋址(從0x2048 1392地址開始讀取4字節)0x23| 0x24| 0x20 0x48 0x13 0x92| 0x01 0x030x63| 0x00 ..... 0x8C(260個字節長度)2.2字節尋址(從0x4813地址開始讀取2字節)0x23| 0x12| 0x48 0x13 0x050x63| 0x43 0x2A 0x07 0x2A 0x553.3字節尋址0x23| 0x23| 0x20 0x48 0x13| 0x00 0x030x63| 0x00 0x01 0x8C3.2.2.3. 0x24 - ReadScalingDataByIdentifier
請求數據信息。 格式:0x24| Data .....肯定響應:0x64| dataidentifier(0x00 MSB|0x00 LSB)|scalingByte(0x00)| scalingByteExtension(0X00 ....)| scalingByte(0x00)| scalingByteExtension(0X00 ....) 否定響應:0x13:參數長度錯誤;0x22:服務不支持;0x31:請求不支持;0x33:安全檢查未通過;展示案例:1.請求消息流程示例0x24| 0xF1 0x900x64| 0xF1 0x90 | 0x6F | 0X622.請求車速(0x0105)0x24| 0x01 0x050x64| 0x01 0x05| 0x01(無符號數字,1byte)| 0x95(公式,5byte)| 0x00(公式標識符) 0xE0 0x4B(c0=75*10p-2p) 0X00 0X1E(c1=30*10p0p)| 0xA1(單位,1byte)| 0x30(unit id,km/h)車速=(0.75*x + 30)km/h3.請求數據(0x0967)示例數據定義見表1710x24| 0x09 0x670x64| 0x09 0x67| 0x22(2個數據字節)| 0x03 0x433.2.2.4. 0x2A - ReadDataByPeriodicIdentifier
請求服務端周期性傳輸數據。 格式:0x2A| TransmissionMode(0x0000xFF)| Data ..... 肯定響應:0x6A定期數據響應:periodicDataIdentifier (0x00-0xFF)| Data..... 否定響應:0x13:參數長度錯誤;0x22:條件不滿足;0x31:請求不支持;0x33:安全檢查未通過;展示案例:1.讀取0xE3 0x24數據E3包含冷卻液溫度、節氣門溫度、發動機轉速、車速傳感器;0x24包含電池正極電壓、氣管絕對值眼里、質量控制流量、車輛氣壓、負載值;發出數據傳輸請求:0x2A| 0x02| 0xE3| 0x240x6A0xE3| 0xA6 0x66 0x07 0x50 0x000x24| 0x8C 0x20 0x1A 0x63 0x4A發出數據停止傳輸請求:0x2A| 0x04| 0xE30x6A3.2.2.5. 0x2C - DynamicallyDefineDataIdentifier
通過內存地址和內存大小,在服務端定義一個數據標識。 格式:1.difinitionType=defineByIdentifier(0x01)0x2C| 0x01| difinitionType(0x00)| dynamicDefinedDataIdentifier(MSB(0xF2/0xF3) LSB(0x00))| sourceDataIdentifier(MSB(0X00) LSB(0X00))| positioninSourceDataRecord(0x00)| mqmorySize(0x00)| .....2.difinitionType=defineByMemoryAddress(0x02)0x2C| 0x02| dynamicDefinedDataIdentifier(MSB(0xF2/0xF3) LSB(0x00))| addressAndLengthFormatIdentifier(0x00)| memoryAddress...| memorySize ....| ....3.difinitionType=clearDynamicallyDefinedDataIdentifier(0x03)0x2C| 0X03| dynamicDefinedDataIdentifier(MSB(0xF2/0xF3) LSB(0x00))4. difinitionType=0X00保留5. 0x00-0x7F保留 肯定響應:0x6C| difinitionType(0x00-0x7F)| dynamicDefinedDataIdentifier(MSB(0xF2/0xF3) LSB(0x00)) 否定響應:0x12:子功能不支持;0x13:消息長度或格式錯誤;0x22:條件不滿足;0x31:參數錯誤;0x33:安全校驗不通過;展示案例:見UDS翻譯文檔P2131.生成單個數據信息(2字節標識符)0x22| 0xF3 0x010x6C| 0xF3 0x01| 0x4C 0X36 0X4D 0x49 0x21 0x00 0x17 2.生成多個數據信息的組合數據塊0x2C| 0x01| 0xF3 0x02| 0x01 0x0A| 0x02(發動機冷卻液溫度)| 0x01| 0x01 0x0A| 0x04(發動機轉速)| 0x02| 0x01 0x0A| 0x0B(怠速空氣控制)| 0x01| 0x05 0x0B| 0x02(爆震傳感器)| 0x010x6C| 0x01| 0xF3 0X02-----請求消息0x22| 0xF3 0x020X6C| 0xF3 0x02| 0xA6 0x07 0x50 0x82 0x913.發送依據內存地址構建的數據標識符的數據請求(動態數據請求)0x2C| 0x02 0xF3 0x02| 0x14| 0x21 0x09(發動機溫度)| 0x19 0x69| 0x01| 0x21 0x09 0x19 0x6B(發動機轉速)| 0x02| 0x013 0x10 0x19 0x95(爆震傳感器)| 0x010x6C| 0x02| 0xF3 0x02------請求消息0x22| 0xF3 0x020X6C| 0xF3 0x02| 0xA6 0x07 0x50 0x914.動態構建數據標識符,并依據標識符請求服務端定期發送數據生成包含發動機冷卻液0x010A、發動機轉速0x010A、保準傳感器0x050B的動態數據標識符0xF2E7。0x2C| 0x01| 0xF2 0xE7| 0x01 0x0A| 0x02(發動機冷卻溫度)| 0x01 0x0A| 0x04(發動機轉速)| 0x02| 0x05 0x0B| 0x02(震爆傳感器)| 0x010x6C| 0x01| 0xF2 0xE7------請求消息0x2A| 0x04| 0xE70x6A| 0xE7| 0xA6 0x07 0x50 0x91 0xE7| 0xA6 0x07 0x55 0x98(周期性發送數據)5.刪除動態定義的數據標識符請求清除0xF303消息0x2C| 0x03| 0xF3 0x030x6C| 0x03| 0xF3 0x036.使用兩種定義類型建立一個動態數據標識符a.發動機油溫和環境空氣溫度2字節DID引用;b.內存地址引用的發動機冷卻液溫度和發動機轉速;c.發動機油位由2字節DID引用;0x2c| 0x01| 0xF3 0x01| 0x12 0x34(發動機油溫)| 0x01 0x02| 0x56 0x78(環境空氣溫度)| 0x01| 0x010x6C| 0x01| 0xF3 0x01-----0x2C| 0x02| 0xF3 0x01| 0x14| 0x21 0x09 0x19 0x69| 0x01(發動機冷卻液溫度)| 0x21 0x09 0x19 0x6B(發動機轉速)| 0x020x6C| 0x02| 0xF3 0x01------0x2C| 0x01| 0xF3 0x01| 0x9A 0xBC(發動機油位)| 0x01| 0x040x6C| 0x01| 0xF3 0x01-------0x22| 0xF3 0x010x62| 0xF3 0x01| 0x4C 0x36 0x4D 0xA6 0x07 0x50 0x49 0x21 0x00 0x17------0x2C| 0x03| 0xF3 0x010x6C| 0x03| 0xF3 0x013.2.2.6. 0x2E - WriteDataByIdentifier
客戶端向指定內存地址寫入數據,如配置信息VIM碼寫入、清除非易失性存儲器數據、重置參數、設置選項等。 格式:0x2E| 0x00 0x00(地址)| 0x00 0x00(數據)......肯定響應: 0x6E| 0x00 0x00(響應的2字節數據) 否定響應:0x130x220x310x72:寫入內存錯誤; 展示按理:0x2E| 0xF1 0x90| 00x57 0x30 0x4C 0x30 0x30 0x30 0x30 0x34 0x33 0x4D 0x42 0x35 0x34 0x31 0x33 0x32 0x36 0x6E| 0xF1 0x903.2.2.7. 0x3D - WriteMemoryByAddress
允許客戶端在一個或多個連續內存位置將信息寫入服務器,如清除存儲器數據、修改校驗值。 格式:0x3D| addressAndLengthFormatIdenfitier(0x00)| 0x00 0x00.......| 0x00 0x00 ......| 0x00 0x00 肯定響應:0x7D| 0x00| 0x00 0x00 ......| 0x00 0x00 ..... 否定響應:0x13:消息長度或格式錯誤;0x22:條件不滿足;0x31:參數錯誤;0x33:安全校驗不通過;0x72:擦除或刷寫內存時發生錯誤; 展示案例:1.將數據字節寫入服務內存(2字節尋址)0x3D| 0x12| 0x20 0x48(memoryAddress)| 0x02(memorySize)| 0x00 0x8C0x7D| 0x12| 0x20 0x48| 0x022.將數據字節寫入服務內存(3字節尋址)0x3D| 0X13| 0x20 0x48 0x13| 0x03| 0x00 0x01 0x8C0x7D| 0x13| 0x20 0x48 0x13| 0x033.’將數據字節寫入服務內存(4字節尋址)0x3D| 0x14| 0x20 0x48 0x13 0x13 0x09| 0x05| 0x00 0x01 0x8C 0x09 0xAF0x7D| 0x14| 0x20 0x48 0x13 0x09| 0x053.2.3 存儲數據傳輸單元
3.2.3.1.0x14 - ClearDiagnoticInformation
允許客戶端清除服務端診斷信息。 可通過該服務重置/清除DTC信息,如DTC狀態信息、DTC快照數據、DTC擴展數據、DTC其他相關數據。 格式:0x14| 0x00 0x00 0x00注意:0XFF 0XFF 0XFF時,代表所有種類的DTC肯定響應:0x54 否定響應:0x13:消息長度或格式錯誤;0x22:條件錯誤;0x31:參數錯誤;0x72:擦除或刷寫內存時發生錯誤;展示案例:1.請求排放系統信息0x14| 0xFF 0xFF 0x330x543.2.3.2.0x19 - ReadDTCInformatioon
允許客戶端向服務端請求各種診斷信息。 檢索與客戶定義的DTC數量、DTC列表、特定功能DTX列表、永久性狀態的DTC、凍結幀、DTC計數器信息、DTC發生器、DTC老化計數器、OBD特定計數器(如無故障模式下的架勢循環次數)、最后發生時間、測試失敗計數器、未完成計數器、客戶定義嚴重性的DTC列表、客戶定義嚴重性的DTC信息、服務器支持DTC狀態、失敗的第一個DTC、最近失敗的DTC、確認的第一個DTC、最近確認的DTC、DTC鏡像內存中與客戶定義DTC狀態碼匹配的DTC了列表、DTC鏡像內存中檢索DTC掩碼和DTC擴展數據、DTC鏡像內存中檢索DTC數量、檢索特定信息的DTC數據或相關信息、檢索目前為“待定”、“已確認”的DTC類型、從DTC內存中檢索客戶定義的關聯數據、從客戶定義DTC存儲器中檢索匹配列表、用戶定義DTC鏡像內存中檢索DTC列表和擴展數據、DTC內存中檢索快照數據確定請求所屬類型等 0x01 - 檢索與客戶端定義狀態掩碼相匹配的DTC數量 0x02 - 檢索與客戶端定義狀態掩碼相匹配的DTC列表 0x03 - 檢索DTC快照記錄標識 0x04 - 檢索客戶端定義DTC掩碼的快照數據 0x05 - 檢索客戶端定義記錄號的DTC存儲數據 0x06 - 檢索客戶端定的DTC掩碼和擴展數據記錄號的擴展數據 0x07 - 檢索與客戶端定義嚴重性質掩碼匹配的DTC數量 0x08 - 檢索與客戶機定義嚴重性掩碼記錄匹配信息的嚴重性和功能單元信息列表 0x09 - 檢索客戶定義的DTC嚴重程度和功能單元信息 0x0A - 檢索服務器支持的DTC狀態 0x0C - 檢索第一個/最近的確認DTC 0x0D - 檢索第一個/最近的故障DTC 0x0E - 要求ECU上報最近的一條被置為confirm的DTC 0x0F - 從服務端DTC鏡像內存中檢索與客戶端定義狀態掩碼匹配的DTC列表 0x10 - 檢索鏡像內存DCE中客戶定義的DTC掩碼和DTC擴展數據記錄編號的數據記錄 0x11 - 檢索與客戶端定義狀態掩碼匹配的鏡像內存DTC數量 0x12 - 檢索與客戶端定義狀態掩碼匹配的“唯一與排放相關的OBD”的DTC數量 0x13 - 檢索與客戶端定義狀態掩碼匹配的“唯一與排放相關的OBD”的DTC列表 0x14 - 檢索“預先故障” 的DTC狀態列表 0x15 - 檢索具有“永久性DTC”狀態的DTC列表 0x16 - 檢索客戶端定義DTC擴展數據記錄號的DTC擴展數據 0x17 - 檢索服務端用戶定義DTC存儲區中與客戶端定義DTC狀態掩碼匹配的DTC列表 0x18 - 檢索服務端用戶定義存儲器中的DTC快照數據(用于客戶端定義的DTC掩碼和DTC快照編號) 0x19 - 檢索與客戶端用戶定義內存的DTC擴展數據(用于客戶機定義DTC掩碼和客戶機定義DCE中的DTC擴展數據編號) 0x1A-0x41:保留 0x42 - 檢索與客戶端定義狀態掩碼匹配的WWH-OBD DTC列表 0x43-0x54:保留 0x55 - 檢索具有“永久性”狀態的WWH-OBD DTC列表 0x56-0x7F:保留格式: 1.請求定義子功能信息0x19| 0x01 0x02 0x0F 0x11 0x12 0x13| DTCStatusMask(0x00) 2.請求定義子功能信息0x19| 0x03 0x04| DTCHighByte(0x00) DTCMiddleByte(0x00) DTCLowByte(0x00)| DTCSnapshotRecordNumber(0x00) 3.請求DTC存儲數據0x19| 0x05| DTCSnapshotRecordNumber(0x00) 4.請求DTC擴展數據0x19| 0x06 0x10| DTCHighByte(0x00) DTCMiddleByte(0x00) DTCLowByte(0x00)| DTCExtDataRecordNumber(0x00) 5.請求DTC嚴重性掩碼和信息0x19| 0x07 0x08| DTCSeverityMask(0x00) DTCStatusMask(0x00) 6.請求DTC嚴重信息0x19| 0x09| DTCHighByte(0x00) DTCMiddleByte(0x00) DTCLowByte(0x00) 7.請求特定DTC信息0x19| 0x0A 0x0B 0x0C 0x0D 0x0E 0x14 0x15 8.按記錄編號請求DTC信息0x19| 0x16| DTCExtDataRecordNumber(0x00) 9.通過任務狀態請求用戶定義內存DTC信息0x19| 0x17| DTCStatusMask(0x00) MemorySelection(0x00) 10.通過DTC編號請求用戶定義內存快照數據0x19| 0x18| DTCHighByte(0x00) DTCMiddleByte(0x00) DTCLowByte(0x00)| DTCSnapshotRecordNumber(0x00)| MemorySelection(0x00) 11.通過DTC編號請求用戶定義內存擴展數據0x19| 0x19| DTCHighByte(0x00) DTCMiddleByte(0x00) DTCLowByte(0x00)| DTCExtDataRecordNumber(0x00)| MemorySelection(0x00) 12.通過任務記錄請求WWHOBD信息0x19| 0x42| FunctionalGroupIdentifier(0x00)| DTCStatusMask(0x00) DTCSeverityMask(0x00) 13.請求WWHOBD參數狀態0x19| 0x55| FunctionalGroupIdentifier(0x00)肯定響應:0x59| 0x01 0x07 0x11 0x12| DTCStatusAvailabilityMask(0x00)| 0x00 0x01 0x02 0x03 0x04| DTCCount(0x00 0x00)0x59| 0x02 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F 0x13 0x15| DTCStatusAvailabilityMask(0x00)|Data .....0x59| 0x03| DTCHighByte(0x00) DTCMiddleByte(0x00) DTCLowByte(0x00)| DTCSnapshotRecordNumber(0x00)| ... |...|...0x59| 0x04| DTCHighByte(0x00) DTCMiddleByte(0x00) DTCLowByte(0x00)| DTCSnapshotRecordNumber(0x00)| DTCSnapshotRecordNumberOfIdentifiers(0x00)| ...| ...| ...0x59| 0x05| DTCStoredDataRecordNumber(0x00)| DTCHighByte(0x00) DTCMiddleByte(0x00) DTCLowByte(0x00) statusOfDTC(0x00)| DTCStoredDataRecordNumberOfIdentifiers(0x00)| ...| ...0x59| 0x06 0x10| DTCHighByte(0x00) DTCMiddleByte(0x00) DTCLowByte(0x00) statusOfDTC(0x00)| DTCExtDataRecordNumber(0x00)| ...| ...0x59| 0x08 0x09| DTCStatusAvailabilityMask(0x00)| ...0x59| 0x14| ...0x59| 0x16| DTCExtDataRecordNumber(0x00)| ...| ...0x59| 0x17| MemorySelection(0x00)| DTCStatusAvailabilityMask(0x00)| ...| ...0x59| 0x18| MemorySelection(0x00)| 0x00 0x00 x00 0x00| DTCSnapshotRecordNumber(0x00)| DTCSnapshotRecordNumberOfIdentifiers(0x00)| ...| ...0x59| 0x19| MemorySelection(0x00)| DTCHighByte(0x00) DTCMiddleByte(0x00) DTCLowByte(0x00) statusOfDTC(0x00)| DTCExtDataRecordNumber(0x00)| ...| ...0x59| 0x42| FunctionalGroupIdentifier(0x00)| DTCStatusAvailabilityMask(0x00)| DTCSeverityAvailabilityMask(0x00)| DTCFormatIdentifier(0x04 0x02)| ...0x59| 0x55| FunctionalGroupIdentifier(0x00)| DTCStatusAvailabilityMask(0x00)| DTCFormatIdentifier(0x04 0x02)| ... 否定響應:0x12:不支持此功能參數;0x13:消息長度錯誤;0x31:無法識別的DTXMaskRecord、無效的counter/DTCSnapshotRecordNumber、無法識別的FunctionalGroupIdentifier、無法識別的MemorySelection。注意:1.DTCStatusMask/DTCSeverityMask解析與定義7~5:DTC嚴重性信息(可選)7:是否立即檢查,0-否,1-是6:是否在下次停車時檢查車輛故障,0-否,1-是5:是否將故障請求僅維護,0-無維護,1-有維護4~0:DTC類別信息2.DTCFormatIdentifier0x00 - 標識參考ISO 15031-6中定義的DTC格式0x01 - 依據DTCAndStatusRecord標識服務器報告DTC格式0x02 - 標識參考SAE J1939-73中定義的DTC格式0x03 - 標識參考SAE J11992-4中定義的DTC格式0x04 -標識參考ISO 27145-2中定義的DTC格式0x05-0xFF:保留3.FunctionalGroupIdentifier作用:a.用于請求UDS版本號來識別協議b.請求車輛DTC狀態信息c.清除車輛DTC信息定義:0x00 - 0x32:保留0x33:排放系統組0x34-0xCF:ISO/SAE保留使用0xD0:安全系統組0xD1-0xDF:立法只讀組0xE0-0xFD:ISO/SAE保留使用0xFE:VOBD系統0xFF:所有系統組展示案例:1.離合位置傳感器-對地短路0x080511,DTC為0x24;2.混合電池溫度傳感-電路電壓高于閾值0x0A9B17,DTC為0x26;3.間歇電路0x25221F,0x2F;4.請求狀態掩碼為0x08的數據信息0x19| 0x01| 0x080x59| 0x01| 0x2F| 0x01| 0x00 0x015.請求與狀態掩碼匹配的信息0x19| 0x02| 0x840x59| 0x02| 0x7F| 0x0A 0x9B 0x17 0x24| 0x08 0x05 0x11 0x2F---0x19| 0x02| 0x010x59| 0x02| 0x7F---6.返回三個快照數據0x19| 0x030x59| 0x03| 0x12 0x34 0x56 0x01| 0x12 0x34 0x56 0x02| 0x7 0x9A 0xBC 0x01發動機冷卻液溫度:0xA6 0x66 0x07 0x50 0x207.返回一個快照數據 0x19| 0x04 | 0x12 0x34 0x56| 0x020x59| 0x04| 0x12 0x34 0x56 0x24| 0x02| 0x01| 0x47 0x11| 0xA6 0x66 0x07 0x50 0x20 8.返回DTC存儲數據0x19| 0x05| 0x020x59| 0x05| 0x02| 0x12 0x34 0x56 0x24 0x01| 0x47 0x11| 0xA6 0x66 0x07 0x50 0x209.返回DTC擴展數據編號預熱循環計數器-0x05->0x17DTC故障檢測計數器-0x10->0x790x19| 0x06|0x12 0x34 0x56| 0xFF0x59| 0x06| 0x12 0x34 0x56 0x24| 0x05| 0x17| 0x10| 0x7910.報告所有的DTC擴展記錄0x19| 0x06| 0x12 0x34 0x56| 0xFF0x59| 0x06| 0x12 0x34 0x56 0x24| 0x05| 0x17| 0x10| 0x7911.P314(其他案例此處暫時省略)3.2.4 輸入輸出控制單元
3.2.4.1.0x2F - InputOutputControlByIdentifier
用于簡單的輸入替換輸出控制。 格式:0x2F| 0x00 0x00| 0x00 0x00 ...| 0x00 0x00 ... 肯定響應:0x6F| 0x00 0x00| 0x00 0x00 ... 否定響應:0x13:長度錯誤;0x22:條件不滿足;0x31:參數無效;0x33:安全檢查未通過;注意:InputOutputControlParameter0x00:結束控制0x01:將所有輸入信號、內部參數、輸出信號重置為默認狀態0x02:請求凍結輸入信號的當前狀態0x03:將RAM中dataIdentifier引用的輸入信號、內部參數、受控輸出信號調整為控制選項中包含的值0x04-0xFF:保留展示案例:1.讀取進氣門位置的當前狀態、數據查詢狀態:0x22| 0x9B 0x00(進氣門位置)0x62| 0x9B 0x00| 0x0A(當前位置為10%)---獲取數據:0x2F| 0x9B 0x00| 0x03 0x3C(調整到60%)0X6F| 0x9B 0x00| 0x03 0x0C(當前位置12%)---查詢狀態:0x22| 0x8B 0x000x62| 0x9B 0x00| 0x3C(60->60%,說明當前位置已到了60%)---查詢數據:0x2F| 0x9B 0x00| 0x000X6F| 0x9B 0x00| 0x00| 0x3A(接收請求,58->58%,說明當前位置已到了58%)---0x2F| 0x9B 0x00| 0x020X6F| 0x9B 0x00| 0x02 0x32(50%)2.僅控制IAC Pintle位置0x2F| 0x01 0x55| 0x03 0x07 0x0XX 0xXX 0xYZ 0xXX| 0x800x6F| 0x01 0x55| 0x03 0x07 0x02 0xEE 0x12 0x59 ---僅控制RPM0x2F| 0x01 0x55| 0x03 0xXX 0x03 0xE8 0xYZ 0xXX| 0x400x6F| 0x01 0x55| 0x03 0x09 0x03 0xB6 0x12 0x59---控制踏板位置A和EGR占空比0x2F| 0x01 0x55| 0x03 0xXX 0xXX 0xXX 0x3Z 0x72| 0x280x6F| 0x01 0x55| 0x03 0x07 0x03 0x52 0x32 0x69---將所有參數的控制返回給ECU0x2F| 0x01 0x55| 0x00| 0xFF0x6F| 0x01 0x55| 0x00 0x09 0x03 0x52 0x12 0x593.2.4 常規功能單元
3.2.4.1.0x31 - RoutineControl
執行已定義的步驟序列并獲取任何相關結果。如內存擦除、重置、學習自適應數據、運行內檢、覆蓋正常服務器控制決策、控制服務值隨時間變化等。 常見步驟:1.開始一個歷程;2.停止一個歷程;3.請求例行結果; 格式:0x31| routineControlType(0x00)| routineIdentifier(0x00 0x00)| routineControlOptionRecord(0x00 ... 0x00)子函數參數:0x00:保留;0x01:啟動指定歷程;0x02:停止指定歷程;0x03:返回指定歷程結果值;0x04-0x7F:保留;肯定響應:0x71| 0x00-0x7F| 0x00 0x00| 0x00| 0x00 0x00 ... 否定響應:0x12:子功能不支持;0x13:消息長度錯誤;0x22:未按標準進行請求;0x24:未在正常狀態下執行操作;0x31:參數錯誤;0x33:安全訪問被拒絕;0x72:在訪問服務段內部存儲器例程時檢測到錯誤;注意:routineIdentifier - RID0x0000-0x00FF:保留;0x0100-0x01FF:保留,用于表示行駛記錄儀測試結果;0x0200-0xDFFF:保留,整車制造商自定義;0xE000-0xE1FF:保留,用于用于表示OBD/EOBD;0xE200:啟動先前選擇的點火回路的部署;0xE201-0xE2FF:保留,用于安全系統實現;0xE300-0xEFFF:保留;0xF000-0xFEFF:保留,系統供應商自定義;0xFF00:用于啟動服務端內存擦除;0xFF01:用于檢查服務端內存編程依賴;0xFF02:用于擦除服務端鏡像內存DTC;0xFF03-0xFFFF:保留; 展示案例:1.基于測試條件:已點火、未打開發動機、速度為0進行測試,進行啟動測試。0x31| 0x01| 0x02 0x010x71| 0x01| 0x02 0x01 0x322.基于測試條件:已點火、未打開發動機、速度為0進行測試,進行停止測試。0x31| 0x02| 0x02 0x010x71| 0x02| 0x02 0x01 0x303.檢測結果值0x31| 0x03| 0x02 0x010x71| 0x03| 0x02 0x01 0x30 0x33 ... 0x8F4.在規定條件下,啟動例程0x31| 0x01| 0x02 0x02| 0x06 0x010x71| 0x01|0x02 0x02| 0x32 0x33 ....0x8F3.2.5 下載上傳功能單元
3.2.5.1.0x34 - RequestDownload
格式:0x34| dataFormatIdentifier(0x00)| addressAndLengthFormatIdentifier(0x00)| 0x00 0x00 ...| 0x00 0x00 ... 肯定響應:0x74| LengthFormatIdentifier(0x00)| 0x00 0x00 ... 否定響應:0x13:消息長度錯誤;0x22:服務端與客戶端之間的數據大小不匹配;0x31:參數無效;0x33:安全校驗失敗;0x70:下載到服務端內存失敗;3.2.5.2.0x35 - RequestUpload
從服務端到客戶端進行數據傳輸。 格式:0x35| dataFormIdentifier(0x00)| addressAndLengthFormatIdentifier(0x00)| 0x00 ... 0x00| 0x00 ... 0x00肯定響應:0x75| LengthFormatIdentifier(0x00)| maxNumberOfBlockLength(0x00 ... 0x00) 否定響應:0x13:消息長度錯誤;0x22:服務端與客戶端之間的數據大小不匹配;0x31:參數無效;0x33:安全校驗失敗;0x70:下載到服務端內存失敗;3.2.5.3.0x36 - TransferData
用于服務端與客戶端之間的數據傳輸。 格式:0x36| blockSequenceCounter(0x00)| 0x00 ... 0x00肯定響應:0x76| 0x00| 0x00 ... 0x00 否定響應:0x13:消息長度錯誤;0x24:請求錯誤(帶有blockSequenceCounter的該傳輸服務請求消息必須等于前一個請求傳輸消息中包含的請求消息);0x31:不符合規范的請求;0x71:下載模塊長度與服務端給的內存大小不符合;0x72:服務端下載數據時數據被擦除;0x73:blockSequenceCounter錯誤;0x92/0x93:服務端主電源應交測量電壓超出了將數據下載到服務器的可接受范圍;3.2.5.4.0x37 - RequestTransferExit
終止客戶端與服務端之間的數據傳輸。 格式:0x37|transferRequestParameterRecord(0x00 .. 0x00)肯定響應:0x77| transferResponsetParameterRecord(0x00 .. 0x00) 否定響應:0x13:消息長度錯誤;0x24:收到請求時編程過程未完成;傳輸服務已停止;0x31:無效數據;0x72:服務端下載數據時數據被擦除;展示案例:1.客戶端從服務端下載數據。memoryaddress 0x602000dataFormatIdentifier:0x11memorySize:0x00FFFFtransferResponseParameter:0x0081---請求下載:0x34| 0x11| 0x33| 0x60 0x20 0x00| 0x00 0xFF 0xFF0x74| 0x20| 0x00 0x81---傳輸數據:0x36| 0x01| 0x00 ...0x000x76| 0x010x36| 0x05| 0xXX ...0xXX0x76 0x05 ---移除出口(停止傳輸):0x370x771.客戶端向服務端上傳數據。memoryaddress 0x201000dataFormatIdentifier:0x11memorySize:0x0001FFtransferResponseParameter:0x0081---請求上傳:0x35| 0x11| 0x33| 0x20 0x10 0x00| 0x00 0x01 0xFF0x75| 0x20| 0x00 0x81---傳輸數據:0x36| 0x010x76| 0x01| 0xXX ... 0xXX0x36| 0x050x76| 0x05| 0xXX ... 0xXX---移除出口(停止傳輸):0x370x773.2.5.5.0x38 - RequestFileTransfer
啟動客戶端與服務端之間的數據傳輸。 格式:0x38| Transfermode(0x01 - 0x05)| filePathAndNameLength(0x00 0x00)| filePathAndName(0x00 ...)| dataFormatIdentifier(0x00)| fileSizeParameterLength(0x00)| fileSzieUnCompressed(0x00 ...)| fileSizeCompressed(0x00 ...)Transfermode:0x01:AddfilepathAndName0x02:DeletefilepathAndName0x03:Replacefile0x04:Readfile0x05:ReadDir注意:1.當Transfermode為0x02/0x04/0x05時,沒有 dataFormatIdentifier(0x00)| fileSizeParameterLength(0x00)| fileSzieUnCompressed(0x00 ...)| fileSizeCompressed(0x00 ...)參數。2.當Transfermode為0x05時,請求中測參數應該使用ASCII格式編碼。肯定響應:0x78| 0x01-0x05| 0x00| 0x00 ... 0x00| 0x00| 0x00 0x00| 0x00 ... 0x00| 0x00 ...0x00注意:1.當Trandfermode為0x02,dataFormatIdentifier參數不在響應信息中;當Trandfermode為0x05,dataFormatIdentifier參數為0x00;2.當Transfermode為0x02/0x04/0x05時,沒有 fileSizeParameterLength(0x00)| fileSzieUnCompressed(0x00 ...)| fileSizeCompressed(0x00 ...)參數。 否定響應:0x13:信息長度錯誤;0x22:服務請求未執行成功;0x31:參數無效;0x33:安全校驗未通過;0x70:下載因服務端內存故障無法完成;展示案例:0x38| 0x01| 0x00 0x1E| 0x44 ....0x7A| 0x11| 0x02| 0xC3 0x50| 0x75 0x300x78| 0x01| 0x02| 0xC3 0x50| 0x114.基于UDS實現ECU刷寫
本質:定義了將一個或者多個應用軟件以物理方式下載到ROM中。
1.ECU上具有BootLoader程序,以解析向ECU發送的診斷指令;
編程步驟類型分類:
1.標準步驟;
2.可選步驟;
3.正常廠商的具體步驟;
執行過程中每步都需要指定該步驟允許的尋址方法,依據OEM要求選擇功能地址或物理地址。基礎過程如下:
主執行:協調/同步多個并行運行的編程步驟,控制“預編程步驟”和“后編程步驟”的執行,以及將車輛維持在其已轉換到的操作模式中。如將車輛網絡轉換為允許對單個ECU編程的操作模式或編程節點的結論。
編程執行:各ECU的“編程步驟”可由客戶端單獨并發執行,直到執行到“編程最后階段”
1. 下載應用程序軟件或應用程序數據
a.傳輸數據到服務端; b.服務端下載數據; c.編程后車輛網絡重新同步;
2. 服務器配置(可選)
a.預編程步驟 - 設置車輛網絡以進行服務器配置。 b.編程步驟 - 最終服務器配置。例如用于服務器復位后寫入數據。 c.后編程步驟 - 在最終服務器配置后重新同步車輛網絡。
預編程:
a.進入extended session; b.使用0x31執行條件檢查;c.使用0x85服務關閉DTC存儲;d.使用0x28關閉與診斷無關的報文,提高刷寫效率;
編程:
a.進入programming session模式;b.使用0x27服務進行安全訪問;c.寫入指紋信息,標記身份;d.執行0x31,刪除存儲空間;e.調用數據操作指令進行寫數據0x34 0x36 0x37; f.數據校驗0x31;g.軟件完整性、兼容性等驗證;
后編譯:
a.將ECU重啟0x11或者恢復默認模式0x10;
編程順序:P431
特殊要求
如果在編程過程中發生以下錯誤情況,服務器應能夠恢復并重新編程。
a.供電電源連接中斷;
b.失去地面連接;
c.數據鏈路通信中斷;
d.過壓或欠壓;
4.1 刷寫示例(因為是中文翻譯版本,所以表中會有一部分中文):
4.1.1 預編譯
4.1.1.1 啟動診斷會話
使ECU進入擴展模式。
02,0代表單幀,2代表2個長度有效數據,10 03 發起擴展服務請求。
06,0代表單幀,6代表6個長度有效數據,50 03 是對應的指令響應。
疑問:此例子中為什么有兩個不同ID內容相同的CAN報文?
4.1.1.2 DTC設置控制(關閉)
設置禁止故障碼,關閉DTC功能。
85 02,85為服務指令,子服務02關閉指令。
4.1.1.3 通信控制
關閉非刷寫數據流,關閉普通應用報文。
注意事項:當對傳輸進行傳輸失能時,使用0x3E服務將服務器狀態保持。
28 03 01,28為服務指令,子服務為subfunction 03 disablerxandtx,communicationtype 01 normalcommunicationmessage。
4.1.2 編程階段
4.1.2.1 編程會話
切換模式,進入編程模式。
10 02 指令,10切換模式,自服務02表示編程模式。
4.1.2.2安全校驗
a.對ECU進行解鎖驗證。
27 01指令,27安全服務,子服務01為請求seed,得到21 74,進行計算之后,再給出響應。
b.響應種子請求。
診斷儀給出響應key為47 11,ECU進行校驗判斷。
4.1.2.3 擦除flash
31 啟動擦除, FF 00 協議規定erasememory DID;
4.1.2.4 請求下載
數據傳輸
數據傳輸結束
4.1.2.5 數據驗證
4.1.3 后編程
4.1.3.1 寫入VIN碼
4.1.3.2 ECU重啟
5. 參數定義(P466)
5.1 診斷和通信管理功能單元數據參數定義
5.1.1 通信類型參數定義
5.1.2 EventwindowTime
5.1.3 LinkContrlModeIdentifier
不同設備連接之間的波特率設置。
CAN:125000、250000、500000、1000000;
PC:9600、19200、38400、57600、115200;
5.1.4 NodeIdentificationNumber
5.2 數據傳輸功能單元數據參數定義
5.2.1 DID
5.2.2 ScalingByte
5.2.3 ScalingByteExtension
5.2.4 TransmissionMode
5.2.5 UDS版本號編碼
編碼示例:
5.3 存儲數據傳輸功能單元數據參數定義
5.3.1 GroupOFDTC
5.3.2 DTCStatusMask/statusOfDTC
5.3.3 DTC嚴重性和類
5.3.4 DTCFormatIdentifier
5.3.5 FunctionalGroupIdentifier
5.3.6 DTCFaultDetectionCounter
5.3.7 DTCAgingCounter(距故障最新失敗以來的驅動周期數)
5.4 輸入輸出控制功能單元數據參數定義
5.4.1 InputOutputControlParameter
5.4.2 RoutineIdentifier
5.5 上傳下載功能單元數據參數
5.5.1 NodeofOperation
5.6 安全訪問狀態圖
更多詳細信息請查看協議標準
6.診斷幀結構類型
單幀:當報文長度小于7,數據域高4位為0000,表示為單幀;
首幀:前2字節作為PCI信息,高4位為0001,低4位及第2字節描述數據總長;
連續幀:第1個字節作為PCI,高4位為0010,低4位為連續序列號;
流控幀:數據發送控制,高4位為0011,低4位為FlowStatus,0-ContinueToSend,1-Wait,2-overflow。第2字節為BlockSize,指示一次可以發送多少個連續幀。 第3字節為Seperatetime;
示例:
單幀:
request 02 10 03 55 55 55 55 55
response 06 50 03 00 32 01 FA AA
多幀傳輸:
03 19 02 08 55 55 55 55 (診斷儀發送的SingleFrame的request)
10 33 59 02 19 01 00 07 (ECU以FirstFrame開始傳輸的response)
30 00 00 55 55 55 55 55 (診斷儀發送的FlowControl)
21 09 03 05 02 09 05 04 (ECU發送的ConsecutiveFrame)
22 07 09 05 06 06 09 05 (ECU發送的ConsecutiveFrame)
23 08 03 08 07 01 05 08 (ECU發送的ConsecutiveFrame)
24 07 01 06 08 07 01 0C (ECU發送的ConsecutiveFrame)
25 08 07 01 0D 08 07 03 (ECU發送的ConsecutiveFrame)
26 07 09 08 01 01 09 09 (ECU發送的ConsecutiveFrame)
27 01 07 09 AA AA AA AA (ECU發送的ConsecutiveFrame,此時傳輸結束)
數據示例來源于此文
7.參考文章
控制器網絡診斷專欄
UDS入門
UDS-ECU刷寫
UDS網絡層/tp層
UDS詳解
汽車控制器網絡技術交流
汽車電子ECU BootLoader開發要點詳解
總結
以上是生活随笔為你收集整理的UDS诊断协议规范与要求的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Bootstrap table后端分页(
- 下一篇: ABB机器人的错误处理