随记 界定ECU处于诊断模式与非诊断模式
核心定义
诊断模式(Diagnostic Mode)
ECU处于诊断模式时,表示其已通过**扩展会话(Extended Session)或编程会话(Programming Session)**激活,允许执行敏感操作(如写入配置、刷写固件)。
关键特征:
- 会话状态:通过UDS服务
10 03
(扩展会话)或10 02
(编程会话)切换至非默认会话。 - 权限:需通过安全访问(
27 XX
)解锁,允许执行高风险服务(如2E XX
写入DID)。 - 维持机制:周期性发送
3E XX
(Tester Present)或其他诊断请求以重置会话超时计时器。
非诊断模式(Non-Diagnostic Mode)
ECU处于默认会话(10 01
)或未激活任何会话时,仅允许执行基础操作(如读取DTC、DID)。
关键特征:
- 会话状态:默认会话(
10 01
)。 - 权限限制:无法执行需扩展/编程会话权限的服务。
- 超时退出:若未维持会话,诊断模式自动退出至默认会话。
判定条件对比
条件 | 诊断模式 | 非诊断模式 |
---|---|---|
会话类型 | 扩展会话(10 03 )或编程会话(10 02 ) | 默认会话(10 01 ) |
安全访问状态 | 已解锁(27 XX 通过) | 未解锁(27 XX 未执行) |
总线活动 | 周期性 3E XX 或其他诊断交互 | 无诊断交互或仅基础服务(19 XX 等) |
典型服务响应 | 允许 2E XX (写入DID) | 返回 NRC 7E (服务不支持) |
关键验证方法
1. 通过诊断工具验证
- 步骤:
- 发送
10 03
进入扩展会话,ECU响应50 03
则为诊断模式。 - 尝试执行
2E XX
(写入DID):- 成功 → 处于诊断模式。
- 返回
NRC 7E
→ 处于非诊断模式。
- 发送
2. 监控总线通信
- 诊断模式标志:
- 存在
3E XX
+ 其他诊断请求(如22 XX
、2E XX
)。 - 会话切换报文(
10 03
→50 03
)。
- 存在
3. 读取会话状态DID
- 使用
22 XX
读取DID(如0x87
):- 值
0x01
→ 默认会话(非诊断模式)。 - 值
0x03
→ 扩展会话(诊断模式)。
- 值
常见场景分析
场景1:网络在线但无诊断交互
- 表现:ECU保持物理连接(如CAN总线在线),但无
3E XX
或其他诊断请求。 - 结论:处于非诊断模式(默认会话超时退出)。
场景2:持续发送 3E XX
但未切换会话
- 表现:总线中存在
3E XX
但未发送10 03
。 - 结论:仍处于默认会话(非诊断模式)。
场景3:扩展会话下未维持 3E XX
- 表现:进入扩展会话后停止发送
3E XX
。 - 结论:超时(S3计时器)后返回默认会话(非诊断模式)。
测试建议
- 超时机制验证:
- 进入扩展会话后停止发送
3E XX
,等待S3时间(通常5s)后验证是否返回默认会话。
- 进入扩展会话后停止发送
- 权限边界测试:
- 在默认会话下尝试执行需诊断模式的服务(如
2E XX
),确认返回NRC 7E
。
- 在默认会话下尝试执行需诊断模式的服务(如
- 错误码覆盖:
- 在非诊断模式下发送
10 03
,ECU应正常响应;若ECU设计为需先解锁,则返回NRC 33
(安全访问拒绝)。
- 在非诊断模式下发送
总结
- 诊断模式的核心标志:非默认会话 + 安全访问解锁 + 活跃诊断交互。
- 网络连接 ≠ 诊断模式:物理层在线不代表应用层处于诊断状态。
- 标准化验证:依赖ISO 14229-1协议及ECU诊断规范定义的行为。