UDS诊断协议笔记

1.UDS诊断协议

  • 通用的汽车诊断协议, 定义了一组诊断服务, 用于对车辆的电子控制单元ECU进行诊断和调试. UDS协议已被ISO 14229标准化, 并广泛应用于现代汽车的诊断系统
  • 提供许多诊断服务
    • 诊断会话控制: 启动,结束诊断会话, 设置,读取诊断会话模式
    • ECU识别: 识别, 验证ECU标识与版本信息
    • 读取数据: 读取ECU内部存储器的数据, 包括故障码, 实时数据, 快照数据等
    • 清除故障码: 清除ECU存储的故障码
    • 控制ECU: 控制ECU的操作, 如重启, 编程, 读取, 写入编程数据等
    • 安全访问机制: 对诊断服务的安全控制, 安全访问权限, 数据加密, 消息认证等
  • 以CAN总线为物理层传输媒介, 以ISO 15765-2为传输协议, 以ISO 14229-3为应用层协议

2.会话

  • 会话即一组诊断服务的集合, 用以与ECU交互
  • 默认会话
    • 基本会话类型, 提供基本诊断功能与安全机制
    • 仅有非敏感的诊断服务: 读取故障码, 清除故障码, 读取实时数据等, 可在任何时间访问
  • 编程会话
    • 高级会话类型, 提供对ECU的编程和配置, 如读取和写入编程数据, 编程ECU等, 常用于车辆制造商的维修和故障排除
    • 需要安全访问控制机制进行认证和授权, 仅授权用户可进入
  • 扩展会话
    • 最高级别会话类型, 最全面诊断与最强安全机制. 允许所有诊断服务, 提供最严格身份验证和安全机制
    • 可通过特殊的诊断服务/诊断会话模式进入, 默认会话->扩展会话

3.寻址

  • 物理寻址
    • 使用实际的硬件地址来引用内存/其他资源
    • 通过ECU的物理地址进行诊断服务的寻址, 可访问所有ECU存储器区域, 包括只读存储器
    • 先与ECU建立物理连接, 如通过OBD-II接口连接汽车的诊断接口, 通过ECU的物理地址直接访问内部存储器, 执行读取数据, 清除故障码等
  • 功能寻址
    • 使用指令/操作码来访问内存/其他资源
    • 通过ECU的功能标识符进行诊断服务的寻址, 不能访问只读存储器
    • 无需物理连接, 通过发送包含ECU功能的请求帧来识别/访问ECU的诊断服务
    • 功能标识符是一种标准化标识符, 用于唯一识别ECU的诊断服务和特性

4.网络层

  • 把数据转换成能适应CAN总线规范的单一数据帧, 若报文长度超过CAN数据帧长度, 需要拆分, 每次最多传输4095个字节

4.1.协议数据单元

  • 地址信息N_AL
    • 隐含源地址, 目标地址, 寻址方式信息
  • 协议控制信息N_PCL
    • 单帧Single Frame: 传输小于/等于7字节的数据, 数据长度与数据本身均可在单个帧中传输

      字节0 字节1234567
      标识符0 + 数据长 数据
      03 xx xx xx __ __ __ __
    • 首帧First Frame: 传输≥7字节的数据的第一帧

      字节0 字节1 字节234567
      标识符1 + 数据长高4 数据长低8 数据
      10 14 xx xx xx xx xx xx
    • 连续帧Consecutive Frame: 发送方发送首帧FF, 接到接收方的流控帧FC后, 数据报文

      字节0 字节1234567
      标识符2 + 帧序号 数据
      23 xx xx xx xx xx xx xx
    • 流控帧Flow Control Frame: 接到首帧后, 接收方回复一帧流控帧

      • 状态: 0继续发, 1等待, 2溢出
      字节0 字节1 字节2 字节34567
      标识符3 + 状态 允许一次连续发送CF数 间隔时间
      30 02 14 __ __ __ __ __

4.2.定时参数

时间 方向 解释 超时
N_As 发送->接收 T:首帧,连续帧在链路层传播 发送方未及时发出首帧/连续帧
N_Ar 接收->发送 T: 流控帧在链路层传播 接收方未及时回复流控帧
N_Bs 发送->接收 接收方收到首帧时发的ACK <-T-> 自己(发送方)收到流控帧 发送方未收到流控帧
N_Br 接收->发送 自己(接收方)收到首帧 <-T-> 与自己开始发出流控帧 接收方未发出流控帧
N_Cs 发送->接收 自己(发送方)收到流控帧/连续帧送达产生的ACK响应 <-T-> 开始发出新流控帧
N_Cr 接收->发送 自己(接收方)收到连续帧 <-T-> 下一次自己接到连续帧 接收方未收到连续帧

5.应用层

  • 26种服务, 6个单元
  • 诊断和通信管理功能单元
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 IO控制 0x37 请求退出传输
0x2f 通过标识符控制输入输出 0x38 请求传输文件

5.1.诊断&通信管理

5.1.1.0x10诊断会话控制

  • 控制ECU在不同会话session之间切换

  • 请求消息: 请求SID+子功能

    • 0x01 默认会话: ECU上电后默认状态
    • 0x02 编程会话: 可进行软件刷写的系列诊断服务
    • 0x03 外部扩展会话: 可执行诊断服务
    单帧 SID 会话 字节34567
    02 10 03 __ __ __ __ __
  • 肯定消息: 会话诊断响应SID(请求SID+0x40)+子功能+会话参数记录

    单帧 SID 会话 字节34567
    06 50 03 __ __ __ __ __
  • 否定消息: 否定响应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+请求消息子功能
    • 0x00 零子功能, 此服务不支持抑制肯定响应
  • 肯定响应: 肯定响应SID+请求消息子功能
  • 否定响应: 否定响应SID(0x7f)+请求SID+否定响应NRC

5.1.6.0x83请求读取、修改通信定时参数

5.1.7.0x84传输加密方法保护的诊断数据

5.1.8.0x85Control DTC

  • 要求ECU停止/恢复DTC的设置, 该服务结合车载通信切换(28)可增加Flash编程速度

5.1.9.0x86事件响应

  • 请求ECU自动传输指定事件的响应

5.1.10.0x87LinkControl

  • 请求控制通信数据速率, 影响数据链路层, 从而影响用于板载通信及诊断通信的数据速率. 转换数据速率请求:
    1. 验证网络上的ECU是否允许特定的数据速率
    2. 验证结果为肯定情况下请求转换
    3. 执行转换

5.2.数据传输功能单元

5.2.1.0x22通过DID读取数据服务

  • Client向Server通过DID的方式读取相关数据(版本,VIN码等)

  • 请求消息: 请求消息SID0x22+要读取的DID

    单帧 SID DID 字节4567
    03 22 11 80 __ __ __ __
  • 肯定响应: 肯定响应SID(0x22+0x40)+请求DID+响应数据

    单帧 SID+0x40 DID 字节456 字节7
    06 62 11 80 01 02 03 __
  • 否定响应: 否定响应SID0x7f+请求服务SID+否定响应码

5.2.2.0x23ReadMemory By Address

  • 读取指定内存范围的当前值
    • 参数: 内存地址和内存大小

5.2.3.0x24Read Scaling Data By Identifier

  • 请求ECU将缩放信息值传输到测试仪

5.2.4.0x2ARead Data By Period Identifier

  • 请求定期发送数据记录值, 请求的速率由传输模式参数设置

5.2.5.0x2CDynamically Define Data Identifier

  • 允许测试人员在ECU中动态定义新的数据标识符, 包括对静态定义的标识符/内存地址的引用

5.2.6.0x2E通过DID写入数据

  • 客户端向服务端请求写入一个DID对应标识的数据记录值
  • 请求消息:请求消息SID(0x2E) + DID +数据记录
  • 肯定响应:肯定响应SID(0x2E+0x40) + DID
  • 否定响应:否定响应SID(0x7F) + 请求服务SID + 否定响应NRC

5.2.7.0x3DWrite Memory By Address

  • 允许将数据记录直接写入ECU内存
    • 请求参数: 内存地址, 内存大小, 数据记录

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.0x36Transfer Data

  • 在下载(测试仪–>ECU) / 上传(ECU->测试仪)

5.6.4.0x37Request Transfer Exit

  • 用于终止transfer Data服务

ref

猜你喜欢

转载自blog.csdn.net/weixin_46143152/article/details/130180331