UDS诊断协议笔记
网友:ud
文章列表
2024-03-22 01:12:52
文章目录
- 1.UDS诊断协议
- 2.会话
- 3.寻址
- 4.网络层
-
- 5.应用层
-
- 5.1.诊断&通信管理
-
- 5.1.1.`0x10`诊断会话控制
- 5.1.2.`0x11`电控单元复位
- 5.1.3.`0x27`安全访问服务
- 5.1.4.`0x28`通讯控制服务
- 5.1.5.`0x3E`待机握手
- 5.1.6.`0x83`请求读取、修改通信定时参数
- 5.1.7.`0x84`传输加密方法保护的诊断数据
- 5.1.8.`0x85`Control DTC
- 5.1.9.`0x86`事件响应
- 5.1.10.`0x87`LinkControl
- 5.2.数据传输功能单元
-
- 5.2.1.`0x22`通过DID读取数据服务
- 5.2.2.`0x23`ReadMemory By Address
- 5.2.3.`0x24`Read Scaling Data By Identifier
- 5.2.4.`0x2A`Read Data By Period Identifier
- 5.2.5.`0x2C`Dynamically Define Data Identifier
- 5.2.6.`0x2E`通过DID写入数据
- 5.2.7.`0x3D`Write Memory By Address
- 5.3.存储数据传输功能单元
-
- 5.3.1.`0x14`清除诊断信息服务
- 5.3.2.`0x19`读取DTC服务
- 5.4.输入输出控制单元
-
- 5.5.例行程序功能单元
-
- 5.6.上传下载功能单元
-
- 5.6.1.`0x34`上传下载功能单元
- 5.6.2.`0x35`请求上传
- 5.6.3.`0x36`Transfer Data
- 5.6.4.`0x37`Request Transfer Exit
- ref
1.UDS诊断协议
- 通用的汽车诊断协议, 定义了一组诊断服务, 用于对车辆的电子控制单元ECU进行诊断和调试. UDS协议已被ISO 14229标准化, 并广泛应用于现代汽车的诊断系统
- 提供许多诊断服务
- 诊断会话控制: 启动,结束诊断会话, 设置,读取诊断会话模式
- ECU识别: 识别, 验证ECU标识与版本信息
- 读取数据: 读取ECU内部存储器的数据, 包括故障码, 实时数据, 快照数据等
- 清除故障码: 清除ECU存储的故障码
- 控制ECU: 控制ECU的操作, 如重启, 编程, 读取, 写入编程数据等
- 安全访问机制: 对诊断服务的安全控制, 安全访问权限, 数据加密, 消息认证等
- 以CAN总线为物理层传输媒介, 以ISO 15765-2为传输协议, 以ISO 14229-3为应用层协议
2.会话
- 会话即一组诊断服务的集合, 用以与ECU交互
- 扩展会话
- 提供对ECU的高级诊断功能
- 可通过特殊的诊断服务/诊断会话模式进入, 默认会话->扩展会话
- 编程会话
- 提供对ECU的编程和配置, 如读取和写入编程数据, 编程ECU等, 常用于车辆制造商的维修和故障排除
- 需要安全访问控制机制进行认证和授权, 仅授权用户可进入
- 默认会话
- 基本会话类型, 提供基本诊断功能, 如读取故障码, 清除故障码, 读取实时数据等, 可在任何时间访问
3.寻址
- 物理寻址
- 使用实际的硬件地址来引用内存/其他资源
- 通过ECU的物理地址进行诊断服务的寻址, 可访问所有ECU存储器区域, 包括只读存储器
- 先与ECU建立物理连接, 如通过OBD-II接口连接汽车的诊断接口, 通过ECU的物理地址直接访问内部存储器, 执行读取数据, 清除故障码等
- 功能寻址
- 使用指令/操作码来访问内存/其他资源
- 通过ECU的功能标识符进行诊断服务的寻址, 不能访问只读存储器
- 无需物理连接, 通过发送包含ECU功能的请求帧来识别/访问ECU的诊断服务
- 功能标识符是一种标准化标识符, 用于唯一识别ECU的诊断服务和特性
4.网络层
- 把数据转换成能适应CAN总线规范的单一数据帧, 若报文长度超过CAN数据帧长度, 需要拆分, 每次最多传输4095个字节
4.1.协议数据单元
- 地址信息N_AL
- 协议控制信息N_PCL
- 单帧SF: 一帧就能处理完服务
- 1字节N_PCI: 标志符0, 数据长度
- 03 xx xx xx
- 第一帧(首帧)FF: 有多个传输单元时, 先发的首帧
- 1字节: 标识符1, 数据长度高四位
- 2字节: 数据长度低八位
- 10 14 xx xx xx xx xx xx
- 流控帧FC: 接到首帧后, 接收方回复一帧流控帧
- 1字节: 标识符3, 状态(0继续发, 1等待, 2溢出)
- 2字节: 允许一次连续发送CF数量
- 3字节: 间隔时间
- 30 02 14
- 连续帧CF: 发送方发送首帧FF, 接到接收方的流控帧FC后, 数据报文
- 1字节: 标识符2, 第几个CF
- 23 xx xx xx xx xx xx xx
4.2.定时参数
- N_As: 发送方数据帧经链路层发送的时间
- N_Ar: 接收方数据帧经链路层发送的时间
- N_Bs: 发送方接收流控帧的等待时间
- N_Br: 接收方发送流控帧间隔时间
- N_Cs: 两个连续帧的最短间隔时间
- N_Cr: 接收方接收连续帧的等待时间
5.应用层
SID |
功能 |
|
|
|
x10 |
诊断&通信管理 |
|
x7 |
数据传输功能单元 |
0x10 |
诊断会话控制 |
|
0x22 |
通过DID读取数据 |
0x11 |
复位 |
|
0x23 |
通过地址读取数据 |
0x27 |
安全访问 |
|
0x24 |
DID读取比例数据 |
0x28 |
通讯控制 |
|
0x2A |
通过DID读取数据 |
0x3E |
待机握手 |
|
0x2C |
动态定义标识符 |
0x83 |
访问时间参数 |
|
0x2E |
通过DID写数据 |
0x84 |
安全数据传输 |
|
0x3D |
通过地址写内存 |
0x85 |
诊断故障码设置控制 |
|
|
|
0x86 |
事件响应 |
|
x1 |
例行程序功能单元 |
0x87 |
链路控制 |
|
0x31 |
例行程序控制 |
|
|
|
|
|
x2 |
存储数据传输功能单元 |
|
x5 |
上传下载功能单元 |
0x14 |
清除诊断信息 |
|
0x34 |
请求下载 |
0x19 |
读取故障码信息 |
|
0x35 |
请求上传 |
|
|
|
0x36 |
数据传输 |
x1 |
输入输出控制单元 |
|
0x37 |
请求退出传输 |
0x2f |
通过标识符控制输入输出 |
|
0x38 |
请求传输文件 |
5.1.诊断&通信管理
5.1.1.0x10
诊断会话控制
- 请求ECU从活动会话过渡到其他会话, 请求不同诊断服务需在不同会话模式下进行
- 请求消息: 请求SID+子功能
- 0x01 默认会话: ECU上电后默认状态
- 0x02 编程会话: 可进行软件刷写的系列诊断服务
- 0x03 外部扩展会话: 可执行诊断服务
- 肯定消息: 会话诊断响应SID(请求SID+0x40)+子功能+会话参数记录
- 否定消息: 否定响应SID(0x7f)+诊断会话SID+否定响应码
- 0x10 支持的否定响应码
- 0x12 不支持请求服务的子功能
- 0x13 请求报文的数据长度(或者格式)不符合标准
- 0x22 条件不满足
5.1.2.0x11
电控单元复位
- 以此诊断指令命令ECU执行自复位
- 请求消息: 请求SID+子功能
- 0x01 硬复位, ECU先完全掉电再上电过程
- 0x02 钥匙电复位, 下钥匙电再重新上电, RAM重置
- 0x03 软复位, 程序从头开始执行, RAM不重置
- 0x04 使能快速休眠, 开启休眠功能, 关闭钥匙电也不关闭而是休眠
- 0x05 关闭快速休眠, 返回常规模式
- 肯定消息: 肯定响应SID(0x11+0x40)+子功能
- 否定消息: 否定响应SID(0x7f)+请求SID(0x11)+否定响应码
5.1.3.0x27
安全访问服务
- 给其他服务加一个访问权限, 常用于上传下载诊断服务
- 请求消息:
- 请求SID+安全访问种子子功能
- 请求SID+安全访问密钥子功能
- 肯定消息:
- 肯定响应SID+安全访问种子功能+发送种子
- 肯定响应SID+安全访问密钥子
5.1.4.0x28
通讯控制服务
- 客户端向服务端请求打开/关闭某类/多类报文信息的发送接收功能
- 请求响应消息定义: 请求SID+请求子功能
- 请求消息子功能:
- 0x00 启用Rx, Tx
- 0x01 启用Rx 禁用Tx
- 0x02 禁用Rx 启用Tx
- 0x03 禁用Rx, Tx
- 0x04 启用Rx(增强的地址信息), 禁用Tx
- 0x05 启用Rx, Tx(增强的寻址信息)
- 肯定消息: 肯定响应SID+请求消息子功能
- 否定消息: 否定响应SID(0x7f)+请求SID+否定响应NRC
5.1.5.0x3E
待机握手
- 客户端确认无服务端是否在线的操作, 利用该服务可实现客户端与服务端一次握手
- 请求消息: 请求消息SID+请求消息子功能
- 肯定响应: 肯定响应SID+请求消息子功能
- 否定响应: 否定响应SID(0x7f)+请求SID+否定响应NRC
5.1.6.0x83
请求读取、修改通信定时参数
5.1.7.0x84
传输加密方法保护的诊断数据
5.1.8.0x85
Control DTC
- 要求ECU停止/恢复DTC的设置, 该服务结合车载通信切换(28)可增加Flash编程速度
5.1.9.0x86
事件响应
5.1.10.0x87
LinkControl
- 请求控制通信数据速率, 影响数据链路层, 从而影响用于板载通信及诊断通信的数据速率. 转换数据速率请求:
- 验证网络上的ECU是否允许特定的数据速率
- 验证结果为肯定情况下请求转换
- 执行转换
5.2.数据传输功能单元
5.2.1.0x22
通过DID读取数据服务
- Client向Server通过DID的方式读取相关数据(版本,VIN码等)
- 请求消息: 请求消息SID0x22+要读取的DID
- 肯定响应: 肯定响应SID(0x22+0x40)+请求DID+响应数据
- 否定响应: 否定响应SID0x7f+请求服务SID+否定响应码
5.2.2.0x23
ReadMemory By Address
5.2.3.0x24
Read Scaling Data By Identifier
5.2.4.0x2A
Read Data By Period Identifier
- 请求定期发送数据记录值, 请求的速率由传输模式参数设置
5.2.5.0x2C
Dynamically Define Data Identifier
- 允许测试人员在ECU中动态定义新的数据标识符, 包括对静态定义的标识符/内存地址的引用
5.2.6.0x2E
通过DID写入数据
- 客户端向服务端请求写入一个DID对应标识的数据记录值
- 请求消息:请求消息SID(0x2E) + DID +数据记录
- 肯定响应:肯定响应SID(0x2E+0x40) + DID
- 否定响应:否定响应SID(0x7F) + 请求服务SID + 否定响应NRC
5.2.7.0x3D
Write Memory By Address
5.3.存储数据传输功能单元
5.3.1.0x14
清除诊断信息服务
- 客户端可以利用此服务来清除一个或多个服务端内存中的诊断信息,该服务可设置支持功能寻址,可控制单个服务端或多个服务端诊断信息的清除
- 请求消息:请求消息SID + 请求消息数据参数
- 肯定响应:肯定响应码(0x14+0x40)
- 否定响应:否定响应码(0x7F)+请求SID+否定响应NRC
5.3.2.0x19
读取DTC服务
- 允许外部诊断仪(Client)通过该服务读取存储在ECU芯片内的故障码(DTC)状态信息
- DTC常为3字节
- 请求响应:请求响应SID + 请求消息子功能 + 请求消息相关参数
- 肯定响应:肯定响应SID + 请求消息子功能 + 响应数据
- 否定响应:否定响应SID(0x7F)+请求消息SID + 否定响应码NRC
5.4.输入输出控制单元
5.4.1.0x2F
输入输出控制服务
- 客户端使用输入输出控制服务请求消息作为输入信号,为内部服务器某些简单功能提供输入替代值,或强制控制外部执行器状态,该服务用于相对简单(例如,静态)的输入替代/输出控制。这里的输入输出都是对于服务器而言的,输入信号指输入到服务器的信号(譬如:CAN信号、 I2C信号等);而输出信号则是服务器向外部执行器发出的信号(CAN信号、I2C信号等)
- 请求响应:请求消息SID + 请求DID + 请求数据
- 肯定响应:肯定响应SID(0x2F+0x40) + 请求DID + 请求参数
- 否定响应:否定响应SID(0x7F)+ 请求消息SID + 否定响应码NRC
5.5.例行程序功能单元
5.5.1.0x31
例行程序控制服务
- 客户端利用诊断仪向ECU发送诊断命令来开始或停止一段程序的执行,还可以请求例程执行的结果。
- 请求响应:请求响应SID + 请求消息子功能 + 请求例程标识符
- 肯定响应:肯定响应SID + 请求消息子功能 + 例程标识符
- 否定响应:否定响应SID(0x7F)+ 请求消息SID + 否定响应码NRC
5.6.上传下载功能单元
5.6.1.0x34
上传下载功能单元
- 启动从测试仪到ECU的数据传输, 当ECU准备从测试仪接收数据, 将发送肯定响应, 包含用于后续数据传输的可用块的大小
5.6.2.0x35
请求上传
- 启动东ECU到测试仪的数据传输, 当ECU准备好将数据发送到测试仪, 其将发送肯定响应, 包含用于后续数据传输的块大小
5.6.3.0x36
Transfer Data
- 在下载(测试仪–>ECU) / 上传(ECU->测试仪)
5.6.4.0x37
Request Transfer Exit
ref