UDS诊断协议

UDS本质上是一系列服务的集合,包含6大类,共26种。每种服务都有独立的ID,即SID

请求
  • SID(1Byte) + 参数

  • SID(1Byte) + Sub-function(1Byte) + 参数

  • SID + DID(2Bytes)

响应
  • 肯定响应
    • SID+0x40(1Byte) + Sub-function(根据请求是否存在) + 参数
    • SID+0x40(1Byte) + DID + Data
  • 否定响应
    • 0x7F + SID + NRC(1Byte)(否定响应码)
    • 0x7F + SID + DID + NRC(1Byte)(否定响应码)
  • 常见的NRC
    • 11表示服务不支持
    • 12表示Sub-function不支持
    • 13表示请求的长度不正确、格式不正确
    • 31表示请求超出范围
    • 78表示收到诊断请求,等待响应
    • 7E表示当前会话下Sub-function不支持
    • 7F表示当前会话下服务不支持
Sub-function分成了两部分(14229 P39
  • Bit7Suppress postive reponse message indication bit,抑制正响应位
    • 0时,不抑制正响应消息
    • 1时,抑制响应消息,正响应消息不应该被发送
    • 负响应消息不受抑制正响应位影响,会根据协议规定的限制发送
    • 注意NRC为78时,后续也会发送正响应
  • Bit0 - Bit6
    • Sub-function 的参数值
常用服务
  • 10诊断会话控制

    • 01默认会话:权限最小,可操作的服务少
    • 02编程会话:用于解锁bootloader相关的诊断服务
    • 03扩展会话:用于解锁高权限诊断服务,如:读写DTC、写入数据
    • 注:编程会话不能由默认会话转入(在默认会话情况下,不能执行 10 02),只能由扩展会话转入
    • 默认进入默认会话,当ECU处于非默认会话时,一段时间内没有请求会退回到默认会话。可以通过让Tester周期发送3E服务,使ECU保持在非默认会话
  • 11 重置ECUReset

    • 报文格式
      • 请求:11 + Sub-function
      • 响应:51 + Sub-function + powerDownTime
    • 常用子服务
      • 01 硬重启
      • 03 软重启
      • 04 enableRapidPowerShutDown 当使用此子服务时,powerDownTime才会存在
    11 01
    51 01
    
  • 27安全访问

    • ECU上电后是一个锁定的状态,可以通过27服务来解锁
    • 过程:
      • Tester端给ECU发送请求报文来请求种子
      • ECU收到报文后,回复肯定响应(包含种子数)
      • Tester端根据这个种子数,利用自身的安全算法算出一个密钥K1,并发送给ECU
      • ECU同样根据种子数和自身的安全算法计算出一个密钥K2,并将接收到的K1K2相比较。如果一致ECU发送肯定响应给Tester端,已经解锁。
    • 当执行复位、重新上下电或者会话切换后,会由解锁状态跳转到锁定状态
  • 22读数据

    • 报文格式
      • 请求:22 + DID(2Bytes)
      • 响应:62 + DID + Data
    • 支持的NRC
      • 13表示请求消息的长度无效或超过长度
      • 14表示读取的数据已经超过了传输最大值,如请求多个DID,响应的数据太多了
      • 22表示服务器的运行条件不满足执行的操作
      • 31表示当前会话下不支持请求的DID;请求的动态DID尚未分配
      • 33表示如果至少有一个DID是安全的,但是服务器没有解锁
  • 2E写数据

    • 报文格式
      • 请求:2E + DID + Data
      • 响应:6E + DID
    • 支持的NRC
      • 72表示写入失败
  • 19DTC

    • 当系统检测到错误或故障时,会将相应的数值故障码进行存储,数值故障码就是DTC

    • 一般由3个字节组成:

      在这里插入图片描述

      • 字节1

        • 左边两位对应DTC属于哪一个系统,P: 00动力系统、C: 01底盘、B: 10车身和U: 11通信系统
        • 左边3-4位用来区分DTC是标准组织所定义还是OEM自定义
        • 左边5-8位对应车辆系统的区域
      • DTC Status

        UDS诊断协议_第1张图片

        • Bit4Bit6的初始值为1,其余位的初始值为0,所以默认值0x50
        • Bit01时表示当前结果为故障
        • Bit31时表示存在历史故障
    • 常用子服务(14229 P18814229 P206

      • 01:检索与客户端定义的状态掩码匹配的DTC数量
        • 19 + 01 + DTCStatusMask
        • 59 + 01 + DTCStatusAvailabilityMask + DTCFormatIdentifier + Number(2Byte)
      • 02:检索与客户端定义的状态掩码匹配的DTC列表
        • 19 + 02 + DTCStatusMask
        • 59 + 02 + DTCStatusAvailabilityMask + DTC + statusOfDTC
        • 注:当(DTCStatusMask & statusOfDTC) != 0时,匹配成功
    • 04:读取DTC的快照信息(冻结帧),即发生故障时的一些环境数据,能更好的判断DTC产生的原因以及发生故障的原因
      - 19 + 04 + DTC + DTCSnapshotRecordNumber
      - 59 + 04 + DTC + Status + DTCSnapshotRecordNumber + DTCSnapshotRecordNumberOfIdentifiers +DID + snapshotData +DID + snapshotData
      - 快照信息:例如故障发生时间、胎压、电压、行驶里程数和车速等。在故障发生时,ECU要记录发生故障时的快照信息,便于以后通过查找故障发生时刻的这些数据,分析故障原因
      - DTCSnapshotRecordNumber包含一组快照信息、一组快照信息中可以包含多个DID,每个DID则包含具体的信息,比如:胎压、里程数

      • 06:读取DTC存储时候的一些扩展信息
        • 19 + 06 + DTC + DTCExtDataRecordNumber
        • 59 + 06 + DTC + statusOfDTC + DTCExtDataRecordNumber + DTCExtDataRecord[]
        • 扩展信息:用于记录故障的一些其它信息,比如:故障发生的次数、老化次数、已老化次数等
      • 为什么有了快照数据还要有扩展信息呢?
        • 快照即故障发生时刻存下来的瞬间的环境数据
        • 扩展信息即在故障发生时其它的故障信息,如aging counteraged counterFault Counter以及event id
      • 0A:读取所有DTC列表及状态
        • 19 + 0A
        • 59 + 0A + DTCStatusAvailabilityMask + DTC + statusOfDTC
  • 14清除DTC

    • 报文格式

      • 请求:14 + DTC
      • 响应:54
      14 FF FF FF
      54
      
  • 31 例程控制RoutineControl

    • 客户端通过例程ID(2-Byte)请求启动、停止服务端的例程或者请求例程结果
    • 主要用于:Erasing memoryResetting
    • 报文格式
      • 请求:31 + Sub-function + routineIdentifier(2-Byte)
      • 响应:71 + routineControlType + routineIdentifier(2-Byte) +routineInfo
    • 常用子服务
      • 01 启动例程(startRoutine)
      • 02 停止例程(stopRoutine)
      • 03请求例程结果(requestRoutineResults)
  • 34 请求下载Request Download

    • 报文格式
      • 请求:34 + dataFormatIdentifier + addressAndLengthFormatIdentifier + memoryAddress + memorySize
      • dataFormatIdentifier
        • 00
        • 00以外的值由汽车制造商定义
      • addressAndLengthFormatIdentifier的含义
        • bit 7-4: Length (number of bytes) of the memorySize parameter,指定memorySize有几个字节
        • bit 3-0: Length (number of bytes) of the memoryAddress parameter,指定memoryAddress有几个字节
      • memoryAddress 要写入数据在内存的起始地址
      • memorySize 使用此参数与实际要传输的数据大小进行比较
      • 响应:74 + lengthFormatIdentifier + maxNumberOfBlockLength
      • lengthFormatIdentifier的含义
        • bit 7-4: Length (number of bytes) of the maxNumberOfBlockLength parameter
        • bit 3-0: reserved by document, to be set to 0
      • maxNumberOfBlockLength告知客户端后面的每个TransferData报文总共占多少字节
    34 11 33 60 20 00 00 FF FF
    74 20 00 81
    
  • 36 传输数据Transfer Data

    • 将数据从客户端传输到服务器
    • 报文格式
      • 请求:36 + blockSequenceCounter + Data(3-n)
        • blockSequenceCounter 序号0x01-0xFF,下一个循环0x00-0xFF
      • 响应:76 + blockSequenceCounter + transferResponseParameterRecord
    36 01 xx xx   # 每条报文占的字节数根据34服务中响应的maxNumberOfBlockLength返回值
    76 01
    
  • 37 请求传输退出Request Transfer Exit

    • 用于终止客户端和服务端之间的数据传输
    • 报文格式
      • 请求:37
      • 响应:77
    37
    77
    
  • 实际传输过程

    • 依次343637,为一个循环,其中36数据传输可执行多次

    • 37执行结束后,如果还有其它数据传输,则再次执行343637服务

  • 28通信控制(CommunicationControl)

    • 用于开启或关闭服务端某些消息的接收/发送报文
    • 报文格式
      • 请求:28 + sub-function=[controlType] + communicationType
      • communicationType
        • 01: normalCommunicationMessages
        • 02: networkManagementCommunicationMessages
        • 03: networkManagementCommunicationMessages and normalCommunicationMessages
      • 响应:68 + sub-function=[controlType]
    28 03 02
    68 03
    
    • 常用子服务
      • 00enableRxAndTx 启用非诊断报文的接收和发送
      • 03disableRxAndTx 禁止非诊断报文的接收和发送
  • 85控制DTC(ControlDTCSetting)

    • 用于停止和恢复DTC状态位的更新
    • 报文格式
      • 请求:85 + sub-function=[DTCSettingType] + DTCSettingControlOptionRecord
      • 响应:C5 + DTCSettingType
    85 01
    C5 01
    
    • 常用子服务

      • 01 on 恢复更新
      • 02 off 停止更新
    • 报文格式

      • 请求:85 + sub-function=[DTCSettingType] + DTCSettingControlOptionRecord
      • 响应:C5 + DTCSettingType
    85 01
    C5 01
    
    • 常用子服务
      • 01 on 恢复更新
      • 02 off 停止更新

你可能感兴趣的:(UDS,14229,诊断协议,汽车电子)