AUTOSAR Diagnostic Services(诊断服务)

AUTOSAR Diagnostic Services(诊断服务)

诊断是汽车 ECU 必不可少的能力,用于开发阶段、产线(EOL)和售后维修时对 ECU 进行检测、标定、刷写、读取故障等操作。AUTOSAR 以 UDS(Unified Diagnostic Services,统一诊断服务)OBD 为基础,通过 CAN(ISO 15765)、以太网(DoIP)、LIN 等物理通道承载。

4.1 诊断分层

AUTOSAR 诊断功能由三个核心模块 + 底层协议组成:

┌──────────────────────────────────────────────┐
│               Application SWC (诊断应用)          │
├──────────────────────────────────────────────┤
│         Dcm (Diagnostic Communication)       │  处理诊断请求/响应(解析、路由)
├──────────────────────────────────────────────┤
│         Dem (Diagnostic Event Manager)       │  诊断事件 DTC 管理、冻结帧
├──────────────────────────────────────────────┤
│   Fim (Function Inhibition Manager)          │  基于故障抑制功能
├──────────────────────────────────────────────┤
│         PduR + CanTp / LinTp / EthTp         │  诊断报文传输
├──────────────────────────────────────────────┤
│         Can / Lin / Eth(MCAL)              │  物理层
└──────────────────────────────────────────────┘

三个核心模块

  • Dcm(诊断通信管理)
    • 接收外部诊断请求(通过 PduR 从 CanTp/LinTp/EthTp 收到),解析 服务标识符(SID)
    • 校验会话、安全、地址等,分发给应用层或诊断函数;
    • 构造并发送诊断响应。
  • Dem(诊断事件管理)
    • 管理 诊断事件(Diagnostic Event)DTC(Diagnostic Trouble Code,故障码);
    • 记录事件状态、发生次数、冻结帧(Extended Data);
    • 支持 Det 事件(开发团队 debug 用)→ Dem。
  • Fim(功能抑制管理)
    • 根据 DTC 状态抑制某个功能(例如故障时禁止特定控制逻辑)。

4.2 UDS 服务分类(ISO 14229)

UDS 服务按 SID(服务标识符)区分,常见的有:

4.2.1 会话与安全

服务 SID (hex) 功能
DiagnosticSessionControl 0x10 会话切换(默认/编程/扩展)
ECUReset 0x11 ECU 复位(硬件/软件)
SecurityAccess 0x27 安全访问(解锁刷写/标定)
ControlSecurityStartup 0x2F 安全启动状态
TesterPresent 0x3E 心跳(保持会话)

4.2.2 数据读取

服务 SID 功能
ReadDataByIdentifier 0x22 按 DID 读取数据(如版本号)
ReadMemoryByAddress 0x23 按地址读取内存
ReadScalingData 0x33 读取标定数据
ReadDataByPeriodicIdentifier 0x2A 周期性读取
ReadDTCInformation 0x19 读取 DTC(支持多种子功能)

4.2.3 写入/编程

服务 SID 功能
WriteDataByIdentifier 0x2E 写入 (写 DID)
RoutineControl 0x31 启动/停止例程(如 Flash)
RequestDownload 0x34 请求下载(刷写)
RequestUpload 0x35 请求上传
TransferData 0x36 传输数据块
RequestTransferExit 0x37 结束传输
WriteMemoryByAddress 0x3D 按地址写入

4.2.4 输入输出控制(IO)

服务 SID 功能
ioControlByIdentifier 0x2F IO 控制(如打开方向盘)

4.2.5 清除

服务 SID 功能
ClearDiagnosticInformation 0x14 清除 DTC

4.3 诊断会话(Session)

  • 默认会话(Default):上电后的常规会话,只能执行受限服务。
  • 增强会话(Extended):允许更多服务(读数据、IO 控制等)。
  • 编程会话(Programming):用于 Bootloader/刷写,通常需要安全访问(SecurityAccess) 解锁。
  • 通过 0x10 服务切换,会话有超时(TesterPresent 维持,超时会返回默认会话)。

4.4 安全访问(Security Access)

  • 请求方(Tester)通过 0x27 服务获得解锁权限,流程:
    1. Tester 发送 RequestSeed(请求种子);
    2. ECU 返回 Seed(种子,随机值);
    3. Tester 用算法计算 Key
    4. Tester 发送 Key,Ecu 验证后解锁(允许刷写/标定)。
  • 防止未授权访问。

4.5 DTC 与故障事件

  • DTC 是标准化的故障码(如发动机故障 ISO 15031-6)。
  • 每个 DTC 有关键属性:
    • TestFailed(测试失败)、TestFailedSinceLastPendingDTCConfirmedDTC
    • 记录发生次数、冻结帧。
  • Dem 事件→ DTC 映射:ECU 内部通过 Dem 注册故障事件,可被诊断读取。

4.6 与其它模块交互

  • Dcm 与 PduR:Dcm 将诊断报文(PDU)通过 PduR 路由到 CanTp/LinTp/EthTp 等。
  • Dcm 与 NvM:Dcm 可访问 NvM 保存/读取诊断数据(如 DTC 计数)。
  • Dcm 与 application SWC:诊断函数(通过 RTE)调用应用层功能。

4.7 OBD(On-Board Diagnostics)与 UDS 区别

  • OBD(ISO 15031)面向排放/环保监管,常用 OBD-II,读取发动机排放相关 DTC。
  • UDS(ISO 14229)是更通用的诊断标准,用于整车广泛功能。
  • 很多 ECU 同时支持 OBD 协议与 UDS 协议(多协议制式)。

小结

诊断服务是 ECU 交互的核心接口:通过 Dcm/Dem/Fim 与总线、RTE、NvM 结合,实现刷写、读故障、读取数据等。下一部分我们来学习 Memory Stack(内存/存储栈)

posted @ 2026-08-02 18:56  mengjie_9  阅读(1)  评论(0)    收藏  举报