UDS - 诊断协议和协议栈介绍
目錄
UDS介紹
UDS命令形式
UDS的26種服務
UDS on CAN (CAN上的UDS為例說明)
常用UDS命令
故障碼(四個大類)
NRZ碼
CAN ID與CAN節點尋址關系
UDS源代碼 (UDS協議棧)
CAN診斷實戰
UDS介紹
UDS(全稱:UnifiedDiagnostic Services)
UDS包含了ISO 14229下屬的7個子協議,其中ISO 14229-2還是會話層的,所以UDS僅包括應用層的說法也是錯誤的。
UDS本質上是一種定向的通信,是一種交互協議(Request/Response),即診斷方(Tester)給ECU發送指定的請求數據(Request)。響應包括肯定響應和否定響應。
ECU:實現UDS server協議棧
診斷儀:實現UDS client協議棧
參考:http://www.catarc.org.cn/upload/202001/22/202001220940052097.pdf
?
UDS命令形式
UDS的請求命令有4種構成方式
即SID,SID+SF(Sub-function),SID+DID(Data Identifier)(讀寫用),SID+SF+DID。
UDS的26種服務
但常用的服務是加背景色的15種。
服務分為:權限控制、讀取數據/信息、寫入數據/信息、通信控制、功能控制這幾類。
?
?
UDS on CAN (CAN上的UDS為例說明)
CAN ID
0x7df?(BROADCAST_ID)
對于specific的ECU,設計UDS時,會指定一個唯一的CAN ID(通常是0x7YZ),用于和指定的ECU進行UDS通訊。
?
CAN的數據格式大致如下所示:
CAN 標志 | Data Length Code | Data Field
?
CAN幀的Data Field表示的就是網絡層的?PDU?;將網絡層的PDU簡寫為?N_PDU?。
PDU=N_PDU的長度+N_PDU.
N_PDU=?ID+數據類型+數據域,
?
常用UDS命令
讀取軟件版本號
SID+DID
SID : 0x22
DID: OEM自定義(例如0xF095)
?
寫入數據
SID+DID+Data
SID:0x27
?
芯片進入reset狀態
SID: 0x11
?
燒寫程序
SID+SF
SID: 0x10
SF:0x02
?
安全訪問(輸入秘鑰,建立連接)
SID:0x27
?
讀取DTC
SID:0x19
?
故障碼(四個大類)
分別是PCBU,P是powertrain動力系統,C是Chassis底盤,B是Body車身,U是network通信系統。一個DTC信息占用4個字節。最后一個字節是DTC的狀態。
第一個字節在乘用車中,前兩個bit代表P/C/B/U(動力/底盤/車身/網絡)中的一個,之后六個bit是數字,合在一起的樣子形如“C01”。第一個字節的前2個bit中,用00/01/10/11分別表示P/C/B/U。
?
NRZ碼
?
CAN ID與CAN節點尋址關系
ECU上CAN ID尋址。CAN基于報文ID。不像Ethernet,基于節點地址的。
每一個ECU都有2個CAN幀ID,分別對應收和發的物理尋址。
?
UDS源代碼 (UDS協議棧)
UDS 協議棧 源代碼
https://github.com/openxc/uds-c
UDS server (ECU)
https://zhuanlan.zhihu.com/p/37310388
UDS client (Diagnostics tool)
https://udsoncan.readthedocs.io/en/latest/
https://github.com/pylessard/python-udsoncan
商用軟件舉例:
| ISO 14229/UDS Sofware Details | 
| 
 | 
?
CAN診斷實戰
https://zhuanlan.zhihu.com/p/51338035
http://forums.codeblocks.org/index.php?topic=21905.0
https://github.com/peplin/ecomcat_to_openxc
總結
以上是生活随笔為你收集整理的UDS - 诊断协议和协议栈介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: linux uvc协议_USB摄像头的U
- 下一篇: c++中的::符
