目录

UDS在OSI模型中的位置

为什么需要UDS

UDS 中 SID、SF 与 DID 的关系拓扑

SID/SF/DID

关系拓扑

UDS 结构概览

UDS:服务请求&响应行为

正面响应与负面响应

正面响应 (Positive Response)

负面响应 (Negative Response)

常见服务

0x10: 诊断会话控制

0x27: 安全访问

0x22 : 读 / 0x2E : 写

DTC : 0x19   0x14

UDS 常用服务总结


UDS在OSI模型中的位置

CAN总线(ISO 11898)只覆盖了OSI模型的物理层(第1层)和数据链路层(第2层),负责数据的传输和接收。

UDS协议(ISO 14229)则属于高层协议,主要运行在:

  • 会话层(第5层)- 管理诊断会话的建立、维护和终止
  • 应用层(第7层)- 定义具体的诊断服务和消息格式

这种分层设计的好处是:底层的CAN负责可靠传输,上层的UDS专注诊断逻辑,各司其职。

可以把CAN想象成"公路",而UDS则是"交通规则" —— 车辆(数据)通过公路到达目的地,但必须遵守交通规则来完成诊断任务。

实际上,UDS也可以运行在其他传输协议之上,比如以太网(DoIP)、LIN总线等,这也体现了高层协议与底层传输分离的优势。


为什么需要UDS

历史背景: 以前各大车企都有自己的诊断协议,维修店得买好几种设备才能修不同品牌的车,成本高又麻烦。

解决方案: UDS(ISO 14229)作为国际标准,相当于给所有汽车制定了一套"通用语言"。

核心优势

  1. 统一标准 - 一把诊断设备能修所有品牌的车
  2. 功能全面 - 不仅能读故障码,还能刷写ECU、执行器测试等
  3. 效率更高 - 请求-响应模式让诊断更精准快速
  4. 成本更低 - 维修设备和培训成本都降下来了


UDS 中 SID、SF 与 DID 的关系拓扑

SID/SF/DID

UDS通过 SID(服务标识符) 定义基础诊断操作(如读故障码、刷写ECU)

可选的 SF(子功能) 和 DID(数据标识符) 进一步细化行为:

        例如 0x22 01 02 表示“读取数据标识符 0102”。

这种“主服务 + 可选扩展”的设计,让UDS既简洁统一,又灵活强大。

关系拓扑

  • Service Identifier (SID,服务标识符)
    是诊断服务的主标识符,用于指定要执行的 UDS 服务类型(例如 0x22 表示“按标识符读取数据”)
    → 它是整个请求的“入口”,决定了后续可使用的参数结构。

  • Subfunction (SF,子功能)
    由 SID 进一步指定,用于细化该服务的具体行为或选项(例如在 0x19 服务中,SF = 0x01 表示“读取当前故障码”,SF = 0x02 表示“读取历史故障码”)。
    → 并非所有服务都支持子功能(如 0x22 通常无 SF),且 SF 的语义由具体服务定义。

  • Data Identifier (DID,数据标识符)
    由 SID 识别/指向,用于指定具体要操作的数据项(如 0xF186 表示车辆 VIN,0xF190 表示 ECU 硬件序列号)。
    → 主要用于 0x22(读)、0x2E(写)、0x31(例程控制)等需访问具体数据的服务中。


UDS 结构概览

UDS报文结构基于CAN帧封装:CAN ID 定位目标ECU,SID 指明诊断服务(如 0x10 为会话控制),子功能字节(可选)细化操作,后续为具体参数数据。
整个结构清晰分层——底层靠CAN寻址,上层靠SID驱动逻辑,既简洁又具备扩展性。

  1. PCI字段
    PCI(Protocol Control Information,协议控制信息)字段本身与UDS请求的内容无关,但当UDS诊断请求通过CAN总线传输时,该字段是必需的。简言之,PCI字段长度为1~3字节,用于描述那些无法在单个CAN帧中完整传输的消息的分段/传输控制信息(如单帧SF、首帧FF、连续帧CF、流控帧FC等)。

  2. SID(Service Identifier,服务标识符)
    当需要调用某一特定UDS服务时,UDS请求消息的数据载荷(Data Payload)中必须包含对应的UDS服务标识符(SID)。注意:SID分为请求SID(如 0x22)和响应SID(如 0x62),二者通常为“请求SID + 0x40”关系(例如 0x22 → 0x62

  3. 子功能字节(Sub-Function Byte)
    某些UDS请求帧中会使用子功能字节,但并非所有服务都需该字段——例如服务 0x22(Read Data By Identifier)就不使用子功能字节。

    一般而言,当测试设备向ECU发送请求后,ECU可能返回肯定响应(Positive Response)或否定响应(Negative Response)。

    • 若为肯定响应,测试设备可通过将子功能字节的最高位(Bit 7)置1来抑制该响应(即要求ECU不回复,常用于避免冗余通信);
    • 否定响应不可被抑制(无论Bit 7如何设置,ECU仍必须返回NRC)。
    • 剩余7位(Bit 0~6)可用于定义最多128种子功能值。
      例如:使用SID 0x19(Read DTC Information)读取故障码时,子功能字节用于指定报告类型(如 0x01 表示“当前故障”,0x02 表示“历史故障”等)。
  4. 请求数据参数(Request Data Parameters)
    • ​​​在大多数UDS请求服务中,除SID及可选的子功能字节外,还需额外的请求数据参数以进一步配置请求行为。
    • 典型例子是数据标识符(DID, Data Identifier)——例如在服务 0x22 中,后续2字节即为DID,用于指定要读取的具体数据项(如 0xF186 表示车辆VIN)。
      其他服务还可能包含地址、长度、掩码、安全密钥等各类参数。

UDS:服务请求&响应行为

UDS采用严格的“请求-响应”机制:

Tester发送带SID(服务标识符)的请求(如 0x10 ),ECU返回对应SID的正响应(如 0x40 表示 0x10 的响应),或带 0x7F 前缀的负响应(含原SID和错误码)。
这种设计确保了诊断过程可预测、可追溯,是UDS可靠性的核心基础。


正面响应与负面响应

UDS(统一诊断服务)协议定义了ECU如何响应来自诊断设备(如扫描工具或测试系统)的请求。根据请求的成功与否,ECU会返回两种类型的响应之一:正面响应(Positive Response)或负面响应(Negative Response)。

正面响应 (Positive Response)

当ECU成功处理了诊断请求后,它会发送一个正面响应。正面响应的格式通常是:

  • 响应SID (Response SID):它是对应请求SID加上0x40
  • 数据 (Data):包含请求所要求的数据。数据的内容和长度取决于具体的请求SID及其参数。

示例:

  • 请求:0x22 F1 90 (读取DID F190 的数据)
  • 成功响应:0x62 F1 90 01 23 45 67 (返回DID F190 的值为01 23 45 67

负面响应 (Negative Response)

如果ECU无法处理请求(例如,因为请求的服务未被支持、子功能无效、参数错误、条件不满足等),它会发送一个负面响应。负面响应的格式是固定的:

  • 固定SID 0x7F:所有负面响应都以0x7F开头。
  • 请求SID (Request SID):紧随其后的是引发负面响应的那个原始请求的SID。
  • 否定响应码 (NRC, Negative Response Code):一个字节,表示失败的具体原因。

常见的否定响应码(NRC)包括但不限于:

NRC 含义 (Meaning)
0x10 GeneralReject (通用拒绝)
0x11 ServiceNotSupported (服务不支持)
0x12 SubFunctionNotSupported (子功能不支持)
0x13 IncorrectMessageLengthOrInvalidFormat (消息长度不正确或格式无效)
0x22 ConditionsNotCorrectOrRequestSequenceError (条件不正确或请求序列错误)
0x31 RequestOutOfRange (请求超出范围)
0x33 SecurityAccessDenied (安全访问被拒绝)
0x78 RequestCorrectlyReceived-ResponsePending (请求已正确接收,响应待定)

示例:

  • 请求:0x28 01 (启用消息传输,子功能01
  • 失败响应:0x7F 28 12 (表示服务0x28的子功能01不受支持)

这种区分使得诊断设备能够明确知道请求是否成功,并在失败时了解失败的原因,从而采取相应的措施。


常见服务

0x10: 诊断会话控制


0x27: 安全访问


0x22 : 读 / 0x2E : 写


DTC : 0x19   0x14


UDS 常用服务总结

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐