目录
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