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 等 NRCNRC 不是“通信失败”的同义词。它可能表示服务不支持、当前会话不允许、条件不满足、请求长度错误、请求超出范围,或者 ECU 仍在处理(例如 ResponsePending)。调试时应先区分“没有响应”“传输层错误”和“应用层明确拒绝”。
常用服务速览
| SID | 服务 | 常见用途 |
|---|---|---|
| 0x10 | DiagnosticSessionControl | 切换默认、扩展或编程会话 |
| 0x11 | ECUReset | ECU 复位 |
| 0x14 | ClearDiagnosticInformation | 清除 DTC 信息 |
| 0x19 | ReadDTCInformation | 读取 DTC、状态和快照等信息 |
| 0x22 | ReadDataByIdentifier | 按 DID 读取数据 |
| 0x27 | SecurityAccess | 传统种子/密钥访问控制 |
| 0x29 | Authentication | 基于认证机制的访问控制 |
| 0x2E | WriteDataByIdentifier | 按 DID 写入数据 |
| 0x31 | RoutineControl | 启动、停止或读取例程结果 |
| 0x34/0x36/0x37 | Download/Transfer/Exit | 软件或数据传输流程 |
| 0x3E | TesterPresent | 保持非默认诊断会话 |
服务是否可用通常取决于诊断会话、安全等级、车辆状态和前置条件。生产项目应把这些约束写成可测试的诊断需求,而不是只维护一个 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 和服务语义,但寻址、连接管理、超时、网关路由和安全策略都需要重新验证。
常见调试顺序
- 确认物理连接、寻址方式与目标 ECU 是否正确。
- 确认传输层是否完整重组,流控参数是否匹配。
- 检查当前诊断会话和访问权限。
- 对照 NRC 判断请求格式、长度、范围和运行条件。
- 检查 P2/P2*、S3 与 TesterPresent 状态机。
- 涉及刷写时,额外检查电源、分块计数、校验、复位和回滚策略。
安全注意事项
诊断接口能够写数据、控制执行器和更新软件,应遵循最小权限、密钥保护、速率限制、审计记录和安全启动等原则。不要在文章、日志或测试脚本中公开量产密钥、算法秘密或可直接复用的解锁材料。
官方资料
- ISO 14229-1:2026 UDS 应用层
- ISO 15765-2:2024 DoCAN
- ISO 13400-2:2025 DoIP
- AUTOSAR Diagnostic Communication Manager
文中的报文仅用于解释协议结构,实际 DID、会话和权限以具体项目规范为准。
还没有评论,登录后留下第一条讨论。