SDV
软件定义汽车SOFTWARE-DEFINED VEHICLE NOTES
← 返回技术文章
UDS · 诊断 · DoCAN · DoIPGene1,738

UDS 诊断基础:服务、会话、传输与常见调试思路

用客户端/服务器模型理解 UDS,说明常用 SID、肯定/否定响应、会话与安全访问,以及 DoCAN、DoIP 的分层关系。

UDS 解决什么问题

UDS(Unified Diagnostic Services)是一组与底层数据链路相对独立的车辆诊断应用层服务。测试仪是客户端,ECU 是服务器。客户端可以读取标识和实时数据、读取或清除故障信息、执行例程、控制输入输出以及进行软件下载。

ISO 14229-1:2026 描述应用层服务;它并不规定所有服务必须在每个 ECU 上实现,也不等于 CAN 报文分段协议。项目需要同时定义服务、数据标识符、会话权限、时序和底层传输。

请求与响应的基本格式

请求通常以服务标识符 SID 开始。肯定响应的 SID 通常等于请求 SID 加 0x40;否定响应以 0x7F 开始,并包含原请求 SID 和否定响应码 NRC。

请求:  22 F1 90              # ReadDataByIdentifier,读取 VIN DID
肯定:  62 F1 90 ...          # 0x22 + 0x40 = 0x62
否定:  7F 22 31              # RequestOutOfRange 等 NRC

NRC 不是“通信失败”的同义词。它可能表示服务不支持、当前会话不允许、条件不满足、请求长度错误、请求超出范围,或者 ECU 仍在处理(例如 ResponsePending)。调试时应先区分“没有响应”“传输层错误”和“应用层明确拒绝”。

常用服务速览

SID服务常见用途
0x10DiagnosticSessionControl切换默认、扩展或编程会话
0x11ECUResetECU 复位
0x14ClearDiagnosticInformation清除 DTC 信息
0x19ReadDTCInformation读取 DTC、状态和快照等信息
0x22ReadDataByIdentifier按 DID 读取数据
0x27SecurityAccess传统种子/密钥访问控制
0x29Authentication基于认证机制的访问控制
0x2EWriteDataByIdentifier按 DID 写入数据
0x31RoutineControl启动、停止或读取例程结果
0x34/0x36/0x37Download/Transfer/Exit软件或数据传输流程
0x3ETesterPresent保持非默认诊断会话

服务是否可用通常取决于诊断会话、安全等级、车辆状态和前置条件。生产项目应把这些约束写成可测试的诊断需求,而不是只维护一个 SID 列表。

会话、时序和状态

进入扩展或编程会话后,ECU 可能使用不同的 P2/P2* 响应时间,并通过 S3 类超时回到默认会话。TesterPresent 用于在需要时维持会话,但不应掩盖 ECU 处理超时或测试仪状态机错误。

建议日志至少记录:时间戳、寻址方式、请求/响应原始字节、会话、安全等级、底层通道、超时参数和网络状态。只截取最后一帧,很难定位偶发的序列问题。

UDS 与 DoCAN、DoIP 的关系

  • UDS:定义诊断服务语义。
  • DoCAN / ISO 15765-2:在 CAN 或 CAN FD 上提供分段、流控和重组等传输/网络层能力。
  • DoIP / ISO 13400-2:在 IP 网络上定义车辆发现、连接建立以及基于 TCP/UDP 的诊断传输。

因此“把 UDS 从 CAN 迁移到以太网”不等于重新定义 DID 和服务语义,但寻址、连接管理、超时、网关路由和安全策略都需要重新验证。

常见调试顺序

  1. 确认物理连接、寻址方式与目标 ECU 是否正确。
  2. 确认传输层是否完整重组,流控参数是否匹配。
  3. 检查当前诊断会话和访问权限。
  4. 对照 NRC 判断请求格式、长度、范围和运行条件。
  5. 检查 P2/P2*、S3 与 TesterPresent 状态机。
  6. 涉及刷写时,额外检查电源、分块计数、校验、复位和回滚策略。

安全注意事项

诊断接口能够写数据、控制执行器和更新软件,应遵循最小权限、密钥保护、速率限制、审计记录和安全启动等原则。不要在文章、日志或测试脚本中公开量产密钥、算法秘密或可直接复用的解锁材料。

官方资料

文中的报文仅用于解释协议结构,实际 DID、会话和权限以具体项目规范为准。
DISCUSSION

评论与回复

0

还没有评论,登录后留下第一条讨论。