4. S32G诊断协议栈
S32G作为面向域控制器的车规级多核SoC,其诊断能力并不是单一模块的功能,而是由AUTOSAR基础软件中的诊断事件管理、诊断通信管理、功能抑制管理,以及底层传输协议共同构成的一条完整链路。理解这条链路,是后续做UDS服务开发、故障码管理、OTA升级和产线诊断的基础。
一、诊断协议栈的整体分层
在S32G上,诊断栈通常分为三层:应用层、服务层和传输层。应用层由SWC或CDD实现具体的诊断服务逻辑,例如读取VIN、写入配置、触发例程;服务层由DCM、DEM、FIM组成,负责UDS服务解析、故障事件存储和功能抑制判断;传输层则由CAN TP或DoIP TP承担,负责把诊断报文可靠地搬运到目标ECU。
DCM(Diagnostic Communication Manager)是诊断通信的核心,它负责接收UDS请求、检查会话与安全等级、分发到对应的服务处理函数,并组织响应。DEM(Diagnostic Event Manager)负责故障事件的监控、去抖、存储和老化,是故障码DTC的管理中心。FIM(Function Inhibition Manager)则根据DEM中的故障状态,决定某些功能是否允许继续执行,实现“故障降级”或“功能抑制”。
二、DCM、DEM、FIM 的职责边界
DCM 的核心是“会话—安全—服务”三级门控。收到 0x10 会话切换请求后,DCM 会检查当前会话是否允许该跳转;收到 0x27 安全访问请求时,DCM 会校验种子与密钥;只有通过校验后,0x2E 写数据、0x31 例程控制等敏感服务才会被放行。DCM 本身不存储故障,它只负责把诊断请求翻译成对 DEM 或应用的调用。
DEM 负责故障事件的全生命周期。每个事件有去抖计数器、确认阈值、故障确认状态和老化周期。当事件状态变为 confirmed 后,DEM 会更新 DTC 状态字节,并可通过 0x19 服务读取。FIM 则订阅 DEM 中的事件状态,当某个事件满足抑制条件时,FIM 会禁止对应的功能标识 FID,例如禁止某路输出、禁止某个控制策略,从而实现故障安全。
三、CAN TP 与 DoIP TP 的差异与选择
CAN TP 基于 ISO 15765-2,把超过 8 字节的诊断报文拆成首帧、连续帧和流控帧。S32G 上通常由 CanTp 模块配合 CanIf、CanDrv 完成。DoIP TP 基于 ISO 13400,使用以太网承载诊断报文,支持车辆识别、路由激活和诊断消息三类报文,适合 OTA 大数据量传输和高速诊断。
| 对比项 | CAN TP | DoIP TP |
|---|---|---|
| 标准 | ISO 15765-2 | ISO 13400 |
| 物理层 | CAN / CAN FD | 以太网 |
| 典型端口/ID | 0x7DF、0x7E0、0x7E8 | TCP/UDP 13400 |
| 适用场景 | 常规UDS诊断、故障读取 | OTA、大数据量刷写、远程诊断 |
| S32G模块 | CanTp + CanIf + CanDrv | DoIP + SoAd + TcpIp + EthIf |
四、S32G上的诊断栈配置要点
在 S32G 的 AUTOSAR 配置工具中,诊断栈配置通常围绕以下几个关键参数展开:
- DCM 配置:定义诊断会话、安全等级、服务表、P2/P2* 定时参数,以及协议优先级。
- DEM 配置:定义事件、DTC、去抖算法、存储类型、老化周期和事件优先级。
- FIM 配置:定义 FID、抑制条件、事件到 FID 的映射关系。
- CanTp 配置:定义 N_As、N_Ar、N_Bs、N_Br、N_Cs、N_Cr 等网络层定时参数,以及寻址方式。
- DoIP 配置:定义逻辑地址、车辆识别请求响应、路由激活超时和诊断消息处理。
/* 典型 DCM 定时参数示例 */
DcmDspSessionP2ServerMax = 50ms
DcmDspSessionP2StarServerMax = 5000ms
DcmDspSecurityNumSeedBytes = 4
DcmDspSecurityNumKeyBytes = 4
/* CanTp 定时参数示例 */
CanTpNAs = 1000ms
CanTpNAr = 1000ms
CanTpNBs = 1000ms
CanTpNCr = 1000ms
五、诊断通信实现案例:读取 DTC 的完整链路
假设诊断仪通过 CAN 发送 0x19 0x02 请求读取已确认 DTC。报文首先到达 CanDrv,经 CanIf 进入 CanTp,CanTp 完成重组后交给 DCM。DCM 解析服务号为 0x19,检查当前会话和安全等级,然后调用 DEM 接口获取 DTC 列表。DEM 从 NVM 或 RAM 中读取 confirmed DTC,按格式组织响应数据,再经 DCM、CanTp、CanIf、CanDrv 返回给诊断仪。
如果同一请求通过 DoIP 发送,则报文先经 EthIf、TcpIp、SoAd 到达 DoIP 模块,DoIP 完成路由激活和诊断消息解析后,再交给 DCM。上层服务逻辑完全一致,差异只在传输层。
六、复盘与排障思路
诊断通信失败时,建议按以下顺序定位:
- 确认物理层和链路层是否正常,CAN 或以太网能否收到报文。
- 检查 CanTp 或 DoIP 的定时参数和寻址配置是否正确。
- 确认 DCM 是否收到请求,会话和安全等级是否满足服务要求。
- 检查 DEM 事件状态和 DTC 存储是否已更新。
- 确认 FIM 是否因故障条件抑制了目标功能。
S32G 的诊断协议栈是一个分层协作系统,DCM 负责通信调度,DEM 负责故障管理,FIM 负责功能抑制,CAN TP 与 DoIP TP 负责可靠传输。只有把每一层的职责和接口关系理清,才能在 OTA、产线诊断和售后排障中快速定位问题。