UDS协议
1前言
- UDS (Unified diagnostic services)是一种在车辆内部进行数据交换的通信协议,主要用于车辆内部诊断、控制系统与车辆控制之间的交互。由欧洲汽车制造商协会(ACEA)和日本汽车制造商协会(JAMA)共同制定.
- 属于应用层协议,可以基于CAN总线、以太网进行通讯。
2 UDS协议数据帧结构
图中包含了UDS中三种协议构成分别是 诊断请求 、诊断正响应回复 、诊断否定回复
- spr=1, 抑制正响应,即ECU不给出正响应
- spr=0, 需要ECU给出正响应
- 如果某个服务没有sub-function,即没有第二个字节,那默认是要发正响应的
- NRC:Negative Response Code,否定响应码,表示服务执行失败的原因
- 0X7F:否定响应包头,表示服务执行失败。
2.1 uds 数据包解析
字节 | 名称 | 说明 |
---|---|---|
0—2 | 源地址 | 表示发送数据的设备地址,通常为车辆控制器的地址。 |
2–4 | 目的地址 | 表示接收数据的设备地址,通常为车辆控制器的地址。 |
2---- x | User data | 包含uds内容。 |
2.2 诊断请求数据包解析
诊断请求是指诊断工具向车辆发送的请求消息,用于请求执行某个服务。诊断请求消息由三个部分组成:SID、子功能和实际数据。
字节 | 名称 | 说明 |
---|---|---|
0–1 | SID | 用于标识要执行的服务 |
1–2 | 子功能 | 这个服务还能更进一步的划分或者具有启动/暂停之类的子功能 |
2–x | 实际数据 | 是指在特定服务中需要传递的数据,例如读取车辆状态时,可能需要传递一个地址参数来指定要读取的变量 |
Service ID(SID)14229-1中定义了26种服务并将这些服务分为6大类
诊断和通信管理类、数据传输类、存储数据传输类、输入输出控制类、例程功能类、上传下载类。
诊断和通信管理类:用于实现车辆与诊断工具之间的连接,如启动/停止诊断、发送诊断命令等。
SID (Hex) | 诊断服务名 | 服务Service |
---|---|---|
10 | 诊断会话控制 | Diagnostic Session Control |
11 | ECU复位 | ECU Reset |
27 | 安全访问 | Security Access |
28 | 通讯控制 | Communication Control |
3E | 待机握手 | Tester Present |
83 | 访问时间参数 | Access Timing Parameter |
84 | 安全数据传输 | Secured Data Transmission |
85 | 控制DTC的设置 | Control DTC Setting |
86 | 事件响应 | Response On Event |
87 | 链路控制 | Link Control |
数据传输类:用于实现车辆与外部设备的数据传输,如读取车辆状态、设置车辆参数等。
SID (Hex) | 诊断服务名 | 服务Service |
---|---|---|
22 | Read Data By Identifier | 实现车辆与外部设备的数据传输,如读取车辆状态、设置车辆参数等。 |
23 | Read Memory By Adress | 通过地址读取内存 |
24 | Read Scaling Data By Identifier | 通过ID读比例数据 |
2A | Read Data By Periodic Identifier | 通过周期ID读取数据 |
2C | Dynamically Define Data Identifier | 动态定义标识符 |
2E | Write Data By Identifier | 通过ID写数据 |
3D | Write Memory By Adress | 通过地址写内存 |
存储数据传输类:用于实现车辆与外部设备的数据存储,如保存车辆状态、记录行驶轨迹等。
SID (Hex) | 诊断服务名 | 服务Service |
---|---|---|
14 | 清除诊断信息 | Clear Diagnostic Infomation |
19 | 读取故障码信息 | Read DTC Infomation |
输入输出控制类:用于实现车辆与外部设备的输入输出控制,如启动/停止车辆、打开/关闭灯光等。
SID (Hex) | 诊断服务名 | 服务Service |
---|---|---|
2F | 通过ID控制输入输出 | Input/Output Control By Identifier |
例程功能类:用于实现车辆的特定功能,如紧急制动、自动巡航等。
SID (Hex) | 诊断服务名 | 服务Service |
---|---|---|
31 | 例行程序控制 | Routine Control |
上传下载类:用于实现车辆与外部设备的数据上传和下载,如将车辆状态上传到服务器、从服务器下载车辆参数等。
SID (Hex) | 诊断服务名 | 服务Service |
---|---|---|
34 | 请求下载 | Upload/Download Control |
35 | 请求上传 | Request Upload |
36 | 数据传输 | Transfer Data |
37 | 请求退出传输 | Request Transfer Exit |
38 | 请求文件传输 | Request File Transfer |
2.3诊断负响应码解析
诊断服务返回的负响应码,通常包含错误代码、错误描述等信息。例如,当车辆无法执行特定的诊断请求时,会返回一个负响应码,其中包含了错误代码和错误描述。这些信息可以帮助诊断员理解问题的原因,并采取相应的措施来解决问题。
字节 | 名称 | 说明 |
---|---|---|
0—1 | 0X7F | 负响应码包头 |
1–2 | SID | 负响应诊断服务编号 |
3----4 | NRC | 负响应码 |
负响应码:
错误代码 | 错误描述 | 错误代码 | 错误描述 |
---|---|---|---|
0x01 - 0x0f | 暂保留 | 0x78 | 收到请求,延迟响应 |
0x10 | 未知错误,服务被拒绝 | 0x79 - 0x7d | 暂保留 |
0x11 | 不支持该服务请求 | 0x7e | 当前会话下子功能不支持 |
0x12 | 不支持子功能 | 0x7f | 当前会话下服务不支持 |
0x13 | 消息长度或格式错误 | 0x80 | 暂保留 |
0x14 | 请求信息长度超出 | 0x81 | rpm(每分钟转速)太高 |
0x15 - 0x20 | 暂保留 | 0x82 | rpm太低 |
0x21 | 服务端正忙 | 0x83 | 当前引擎正在运行 |
0x22 | 条件不满足 | 0x84 | 当前引擎未运行 |
0x23 | 暂保留 | 0x85 | 截止当前时间引擎运行时间太短 |
0x24 | 请求顺序错误 | 0x86 | 温度过高 |
0x25 | 指令已经被接收,但是未被执行 | 0x87 | 温度过低 |
0x26 | 失败的操作导致当前操作无法执行 | 0x88 | 车速过高 |
0x27 - 0x30 | 暂保留 | 0x89 | 车速过低 |
0x31 | 参数错误 | 0x8a | 油门/踏板过高(超过了当前要求的最大阈值) |
0x32 | 暂保留 | 0x8b | 油门/踏板过低 |
0x33 | 安全校验未通过 | 0x8c | 变速器档位不在空档 |
0x34 | 暂保留 | 0x8d | 变速器档位不在排挡 |
0x35 | 密钥不匹配 | 0x8e | 暂保留 |
0x36 | 已达到解锁最大错误次数 | 0x8f | 制动开关没有关闭 |
0x37 | 超时时间未到 | 0x90 | 换挡杆不在驻车档 |
0x38 - 0x4f | 由扩展数据链路安全性保留 | 0x91 | 变矩器离合器锁定 |
0x50 - 0x6f | 暂保留 | 0x92 | 电压过高 |
0x70 | 不允许上传下载 | 0x93 | 电压过低 |
0x71 | 数据传输中断 | 0x94 - 0xef | 暂保留(特定条件下) |
0x72 | 擦除或烧写内存错误 | 0xf0 - 0xfe | 为汽车制造商保留 |
0x73 | 块序列计数错误 | 0xff | 暂保留 |
0x74 - 0x77 | 暂保留 |