2. 汽车诊断协议基础与Stellar支持
在汽车电子诊断体系中,诊断协议并不是单一协议,而是一组按“物理层—数据链路层—网络/传输层—应用层”分工协作的协议族。Stellar 作为面向新一代整车电子电气架构的 MCU 平台,其价值在于把 UDS、DoIP、CAN/CAN FD、LIN、FlexRay 这些协议通过片上外设与协议栈软件组合起来,形成可配置、可裁剪的诊断通信能力。理解本节的关键,是先把“协议栈分层”与“Stellar 外设映射”这两条线对齐:上层诊断服务决定“说什么”,下层外设与协议栈决定“怎么发、发到哪、发多快”。
一、诊断协议栈的分层关系
从诊断工程师视角看,最上层是 UDS(ISO 14229),它定义诊断服务,例如 0x10 会话控制、0x27 安全访问、0x22 读数据、0x2E 写数据、0x31 例程控制、0x3E 保持连接、0x19 读故障码。UDS 本身不关心报文如何传输,它只规定请求/响应格式、子功能、否定响应码(NRC)以及会话与安全状态机。UDS 之下需要“传输层”把长报文分包与重组:在 CAN/CAN FD 上由 ISO-TP(ISO 15765-2)承担,在 DoIP 上由 ISO 13400-2 的 TCP/UDP 承载,在 FlexRay 上则常通过 FlexRay 传输层或 AUTOSAR PduR 路由到 UDS。
再往下是数据链路层与物理层。CAN/CAN FD 使用 CAN 控制器与收发器,经典 CAN 最大 8 字节数据场,CAN FD 可到 64 字节并支持更高数据段波特率;LIN 是单线主从总线,速率通常 1–20 kbps,适合车门、座椅、雨量传感器等低带宽节点;FlexRay 是时间触发+事件触发混合总线,速率可达 10 Mbps,常用于底盘、线控等对确定性和带宽要求高的场景;DoIP 则把诊断报文封装到以太网 TCP/IP 之上,适合大数据量刷写与远程诊断。
二、Stellar 上的协议栈与外设映射
Stellar 平台通常集成多路 CAN FD 控制器、LIN 控制器、FlexRay 控制器以及以太网 MAC,并配合 DMA、硬件安全模块(HSM)和定时器资源。协议栈配置的核心动作,是把每个诊断通道绑定到具体外设实例,再为每个实例分配缓冲区、中断和路由规则。例如:CAN FD 通道 0 绑定到 FDCAN0,用于动力域 UDS 诊断;CAN FD 通道 1 绑定到 FDCAN1,用于车身域;LIN 通道 0 绑定到 LIN0,用于车门模块;以太网通道绑定到 ETH0,用于 DoIP 刷写;FlexRay 通道绑定到 FR0,用于底盘域诊断。
在软件层,AUTOSAR 风格的分层通常是:UDS 服务层(Dcm)→ 传输层(CanTp/DoIP/LinTp/FrTp)→ 接口层(CanIf/LinIf/EthIf/FrIf)→ 驱动层(MCAL)。Stellar 的配置工具需要为每个诊断通道指定:协议类型、外设实例、波特率、缓冲区大小、N-PDU 地址、超时参数(如 P2Server、P2*Server、S3Server)以及安全访问算法。这里有一个容易忽略的点:UDS 的会话超时 S3Server 通常为 5 秒,若 Stellar 的定时器精度或调度周期不足,会导致会话意外掉线;因此需要把诊断任务放在合适周期的 OS Task 中,并确保 CAN 中断优先级高于普通应用任务。
三、诊断服务与外设的映射关系
诊断服务与 Stellar 外设之间不是直接映射,而是通过“服务→传输层→接口层→外设”的链路间接映射。以 0x22 读数据为例:诊断仪发送 22 F1 90(读 VIN),CAN FD 控制器接收后触发中断,CanIf 把报文交给 CanTp,CanTp 完成重组后交给 Dcm,Dcm 调用应用层回调读取 VIN 数据,再按相反路径返回。若走 DoIP,则报文先经以太网 MAC 进入 TCP/IP 栈,再由 DoIP 模块处理,后续同样进入 Dcm。因此,配置时不能只改 Dcm,还要同步检查 CanTp 的块大小(BS)、最小间隔时间(STmin)以及 CanIf 的接收缓冲区是否足够。
对于刷写场景,0x34 请求下载、0x36 传输数据、0x37 退出传输会涉及大块数据传输。此时 CAN FD 的 64 字节数据场和 DoIP 的 TCP 窗口大小直接影响刷写速度。一个合理的示例配置是:CAN FD 仲裁段 500 kbps、数据段 2 Mbps、ISO-TP BS=0、STmin=0,理论吞吐可接近数据段带宽;DoIP 则使用 TCP 连接,窗口大小设为 64 KB,配合 Stellar 以太网 DMA 减少 CPU 拷贝。这些参数需要根据实际总线负载和 ECU 处理能力调整,不能盲目取最大值。
四、配置要点与常见问题
在 Stellar 上配置诊断协议栈时,建议按以下顺序推进:先确定诊断通道数量与协议类型,再分配外设实例与引脚,然后配置传输层参数,最后联调 UDS 服务。常见问题包括:CAN FD 数据段波特率与收发器不匹配导致采样错误;ISO-TP 的 BS 与 STmin 设置不当导致刷写超时;DoIP 的 TCP 连接未正确关闭导致端口占用;FlexRay 冷启动失败导致诊断通道不可用。排查时可用示波器观察总线波形,用 CAN 分析仪抓取原始报文,再对照 Dcm 的 NRC 判断是应用层拒绝还是传输层丢包。