> 文章列表 > UDS诊断协议概念

UDS诊断协议概念

UDS诊断协议概念

文章目录

  • UDS诊断协议
  • 会话
  • 寻址
  • 网络层
    • 协议数据单元
    • 定时参数
  • 应用层
    • 1.诊断会话控制0x10
    • 2.电控单元复位0x11
    • 3.安全访问服务0x27
    • 4.通讯控制服务0x28
    • 5.待机握手0x3E
    • 6.通过DID读取数据服务0x22
    • 通过DID写入数据0x2E
    • 清除诊断信息服务0x14
    • 读取DCT服务0x19
    • 输入输出控制服务0x2F
    • 例行程序控制服务0x31
  • 上位机

UDS诊断协议

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

会话

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

寻址

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

网络层

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

协议数据单元

  • 地址信息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

定时参数

  • N_As: 发送方数据帧经链路层发送的时间
  • N_Ar: 接收方数据帧经链路层发送的时间
  • N_Bs: 发送方接收流控帧的等待时间
  • N_Br: 接收方发送流控帧间隔时间
  • N_Cs: 两个连续帧的最短间隔时间
  • N_Cr: 接收方接收连续帧的等待时间

应用层

  • 26种服务, 6个单元
    • 诊断和通信管理功能单元 x10
      • 0x10 诊断会话控制
      • 0x11 电控单元复位
      • 0x27 安全访问
      • 0x28 通讯控制
      • 0x3E 待机握手
      • 0x83 访问时间参数
      • 0x84 安全数据传输
      • 0x85 诊断故障码设置控制
      • 0x86 事件响应
      • 0x87 链路控制
    • 数据传输功能单元 x7
      • 0x22 通过DID读取数据
      • 0x23 通过地址读取数据
      • 0x24 DID读取比例数据
      • 0x2A 通过DID读取数据
      • 0x2C 动态定义标识符
      • 0x2E 通过DID写数据
      • 0x3D 通过地址写内存
    • 存储数据传输功能单元 x2
      • 0x14 清楚诊断信息
      • 0x19 读取故障码信息
    • 输入输出控制单元 x1
      • 0x2f 通过标识符控制输入输出
    • 例行程序功能单元 x1
      • 0x31 例行程序控制
    • 上传下载功能单元
      • 0x34 请求下载
      • 0x35 请求上传
      • 0x36 数据传输
      • 0x37 请求退出传输
      • 0x38 请求传输文件

1.诊断会话控制0x10

  • 请求ECU从活动会话过渡到其他会话, 请求不同诊断服务需在不同会话模式下进行
  • 请求消息: 请求SID+子功能
    • 0x01 默认会话: ECU上电后默认状态
    • 0x02 编程会话: 可进行软件刷写的系列诊断服务
    • 0x03 外部扩展会话: 可执行诊断服务
  • 肯定消息: 会话诊断响应SID(请求SID+0x40)+子功能+会话参数记录
  • 否定消息: 否定响应SID(0x7f)+诊断会话SID+否定响应码
    • 0x10 支持的否定响应码
    • 0x12 不支持请求服务的子功能
    • 0x13 请求报文的数据长度(或者格式)不符合标准
    • 0x22 条件不满足

2.电控单元复位0x11

  • 以此诊断指令命令ECU执行自复位
  • 请求消息: 请求SID+子功能
    • 0x01 硬复位, ECU先完全掉电再上电过程
    • 0x02 钥匙电复位, 下钥匙电再重新上电, RAM重置
    • 0x03 软复位, 程序从头开始执行, RAM不重置
    • 0x04 使能快速休眠, 开启休眠功能, 关闭钥匙电也不关闭而是休眠
    • 0x05 关闭快速休眠, 返回常规模式
  • 肯定消息: 肯定响应SID(0x11+0x40)+子功能
  • 否定消息: 否定响应SID(0x7f)+请求SID(0x11)+否定响应码

3.安全访问服务0x27

  • 给其他服务加一个访问权限, 常用于上传下载诊断服务
  • 请求消息:
    • 请求SID+安全访问种子子功能
    • 请求SID+安全访问密钥子功能
  • 肯定消息:
    • 肯定响应SID+安全访问种子功能+发送种子
    • 肯定响应SID+安全访问密钥子

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.待机握手0x3E

  • 客户端确认无服务端是否在线的操作, 利用该服务可实现客户端与服务端一次握手
  • 请求消息: 请求消息SID+请求消息子功能
    • 0x00 零子功能, 此服务不支持抑制肯定响应
  • 肯定响应: 肯定响应SID+请求消息子功能
  • 否定响应: 否定响应SID(0x7f)+请求SID+否定响应NRC

6.通过DID读取数据服务0x22

  • Client向Server通过DID的方式读取相关数据(版本,VIN码等)
  • 请求消息: 请求消息SID0x22+要读取的DID
  • 肯定响应: 肯定响应SID(0x22+0x40)+请求DID+响应数据
  • 否定响应: 否定响应SID0x7f+请求服务SID+否定响应码

通过DID写入数据0x2E

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

清除诊断信息服务0x14

  • 客户端可以利用此服务来清除一个或多个服务端内存中的诊断信息,该服务可设置支持功能寻址,可控制单个服务端或多个服务端诊断信息的清除
  • 请求消息:请求消息SID + 请求消息数据参数
  • 肯定响应:肯定响应码(0x14+0x40)
  • 否定响应:否定响应码(0x7F)+请求SID+否定响应NRC

读取DCT服务0x19

  • 允许外部诊断仪(Client)通过该服务读取存储在ECU芯片内的故障码(DTC)状态信息
  • 请求响应:请求响应SID + 请求消息子功能 + 请求消息相关参数
  • 肯定响应:肯定响应SID + 请求消息子功能 + 响应数据
  • 否定响应:否定响应SID(0x7F)+请求消息SID + 否定响应码NRC

输入输出控制服务0x2F

  • 客户端使用输入输出控制服务请求消息作为输入信号,为内部服务器某些简单功能提供输入替代值,或强制控制外部执行器状态,该服务用于相对简单(例如,静态)的输入替代/输出控制。这里的输入输出都是对于服务器而言的,输入信号指输入到服务器的信号(譬如:CAN信号、 I2C信号等);而输出信号则是服务器向外部执行器发出的信号(CAN信号、I2C信号等)
  • 请求响应:请求消息SID + 请求DID + 请求数据
  • 肯定响应:肯定响应SID(0x2F+0x40) + 请求DID + 请求参数
  • 否定响应:否定响应SID(0x7F)+ 请求消息SID + 否定响应码NRC

例行程序控制服务0x31

  • 客户端利用诊断仪向ECU发送诊断命令来开始或停止一段程序的执行,还可以请求例程执行的结果。
  • 请求响应:请求响应SID + 请求消息子功能 + 请求例程标识符
  • 肯定响应:肯定响应SID + 请求消息子功能 + 例程标识符
  • 否定响应:否定响应SID(0x7F)+ 请求消息SID + 否定响应码NRC

上位机