3. AURIX诊断通信基础

在AURIX安全诊断与受保护刷写系统中,诊断通信是上位机(诊断仪、产线EOL、OTA服务器)与ECU内部诊断栈之间的“运输层”。理解这一层的关键,不是记住某个协议名字,而是搞清楚三件事:报文怎么走(物理/链路层)、诊断请求怎么封装(传输层与寻址)、请求最终落到哪个核(AURIX多核路由)。本节围绕这三条主线展开。

一、CAN与CAN FD:诊断的经典承载

经典CAN每帧数据场最多8字节,标准帧11位标识符、扩展帧29位标识符,位速率常见500 kbit/s。对于UDS诊断,8字节中还要扣除协议控制信息(PCI),单帧实际能携带的诊断数据非常有限,长响应必须靠多帧分段传输。CAN FD在仲裁段保持与经典CAN兼容的速率(如500 kbit/s),在数据段提升到2 Mbit/s甚至5 Mbit/s,数据场扩展到最多64字节,并引入BRS(位速率切换)与ESI等控制位。对诊断的直接收益是:大量原本需要多帧的响应可以单帧完成,刷写时的数据传输吞吐显著提高。

需要特别注意的是,CAN FD帧与经典CAN帧在同一总线上的共存依赖控制器对FD帧格式的识别能力。若总线上存在不支持FD的节点,通常采用“FD帧仅在特定报文ID上使用”或整网不启用FD的策略。诊断开发中,DBC/ODX中的报文长度、填充方式(如0xCC填充)、以及FD帧的DLC编码(DLC=9~15对应12~64字节)都必须与ECU配置一致,否则会出现长度解析错误。

二、DoIP:以太网上的诊断承载

DoIP(Diagnostic over IP)把诊断报文封装在TCP/UDP之上,使用ISO 13400定义的报文头。典型端口为:UDP 13400用于车辆发现与车辆识别,TCP 13400用于诊断连接与数据传输。DoIP报文头固定8字节,包含协议版本、反向版本、载荷类型(Payload Type)和载荷长度。常见载荷类型包括车辆识别请求/响应(0x0001/0x0002)、路由激活请求/响应(0x0005/0x0006)、诊断报文(0x8001)、诊断报文确认(0x8002)等。

与CAN相比,DoIP的优势在于高带宽、天然支持IP寻址、便于远程诊断与OTA。但DoIP不是“即插即用”:诊断仪必须先完成车辆发现(可选)、建立TCP连接、发送路由激活请求并收到成功响应,之后才能发送诊断报文。路由激活中会携带激活类型(如0x00默认、0x01 WWH-OBD、0xE0中央安全)和OEM特定数据,AURIX侧需要校验这些字段后才允许后续诊断流量进入。

三、UDS on CAN / UDS on DoIP:同一应用层,两种承载

UDS(ISO 14229)是应用层协议,定义服务如0x10会话控制、0x27安全访问、0x22读数据、0x2E写数据、0x31例程控制、0x34/0x36/0x37刷写序列、0x3E保持连接等。UDS本身不关心底层是CAN还是DoIP,但传输层适配不同:

  • UDS on CAN:由ISO 15765-2(CAN TP)完成分段、流控与重组。单帧(SF)、首帧(FF)、连续帧(CF)、流控帧(FC)四种帧类型通过PCI高4位区分。流控参数BS(Block Size)和STmin决定发送方连续发送多少帧后等待、以及帧间最小间隔。
  • UDS on DoIP:诊断消息作为DoIP载荷类型0x8001直接传输,不需要CAN TP分段;长度由DoIP头中的载荷长度字段界定。诊断消息确认(0x8002)用于告知发送方该诊断请求已被ECU接收。

因此,同一套UDS服务实现可以同时挂在CAN和DoIP之上,差异集中在传输层适配与寻址字段的映射上。

四、诊断报文格式与寻址方式

在CAN上,UDS消息的寻址通常采用物理寻址与功能寻址两种。物理寻址针对单个ECU,请求ID与响应ID成对出现;功能寻址使用一个广播ID,多个ECU可同时接收,但通常只有满足条件的ECU响应,且响应仍走各自的物理响应ID。ISO 15765-2还定义了正常寻址、扩展寻址和混合寻址:扩展寻址在数据场首字节插入地址扩展(AE),用于在同一对CAN ID上区分不同目标。

在DoIP上,寻址由逻辑地址(Logical Address)承担:源地址(诊断仪)与目标地址(ECU)各占2字节,出现在DoIP诊断消息载荷的前4字节中。逻辑地址与CAN ID之间的映射由ECU的配置决定,是诊断路由的核心输入之一。

五、AURIX多核诊断路由配置

AURIX(如TC3xx)通常包含多个CPU核(CPU0~CPU5)、CAN/CAN FD模块(MCMCAN)、以太网模块(GETH)以及DMA。诊断请求从总线进入后,需要经过“中断/DMA → 传输层 → UDS服务分发 → 目标核”的路径。多核路由配置要解决的核心问题是:哪个核负责哪个诊断服务或哪个逻辑地址。

典型做法是:CPU0运行诊断主任务,负责CAN TP/DoIP连接管理、UDS会话与安全状态机;刷写相关的大数据搬运由DMA配合,Flash操作可能由指定核或HSM(硬件安全模块)执行;应用核通过核间通信(如共享内存+自旋锁、或AUTOSAR的IOC)接收诊断请求并返回结果。配置时需要明确:

  • CAN接收中断或DMA通道绑定到哪个核;
  • 逻辑地址/物理CAN ID到目标核的映射表;
  • UDS服务处理函数的核归属,以及跨核调用的同步机制;
  • 刷写期间各核的看门狗、复位与内存保护策略。

下面这张图给出AURIX多核诊断路由的整体结构:从CAN/CAN FD与DoIP两条入口,经传输层与UDS分发,最终落到不同CPU核与HSM。

AURIX 多核诊断路由结构 诊断仪 / OTA UDS Client CAN / CAN FD MCMCAN · ISO 15765-2 DoIP over Ethernet GETH · ISO 13400 · TCP/UDP 13400 传输层适配 CAN TP:SF/FF/CF/FC BS / STmin 流控 DoIP:0x8001 诊断消息 0x8002 诊断确认 逻辑地址映射 UDS 服务分发 0x10 会话控制 0x27 安全访问 0x22/0x2E 读写数据 0x31 例程 / 0x34-0x37 刷写 0x3E 保持连接 诊断路由表(逻辑地址 / CAN ID → 目标核) 物理寻址 · 功能寻址 · 扩展寻址 AE · DoIP 逻辑地址 CPU0 诊断主任务 会话/安全状态机 CPU1 应用诊断服务 0x22 / 0x2E 处理 CPU2 刷写数据搬运 DMA 协同 HSM 安全访问校验 密钥 / 签名验证 Flash PFlash DFlash 虚线:核间通信(共享内存 / IOC / 自旋锁) 路由表决定:哪个逻辑地址、哪个服务、由哪个核处理

六、配置要点与常见问题

实际配置时,建议先固定一张“诊断路由表”,把逻辑地址、CAN ID、目标核、服务范围、是否允许功能寻址逐项列出,再据此生成AUTOSAR CanTp/DoIP配置与OS任务映射。常见问题包括:功能寻址请求被多个ECU同时响应导致总线冲突;CAN FD帧长与DLC配置不一致导致解析失败;DoIP路由激活未完成就发送诊断请求被丢弃;跨核调用未加锁导致诊断响应数据被覆盖。排查时优先确认“请求是否到达目标核”和“响应是否按原路径返回”,再检查UDS层会话与安全状态。

教学示例:假设某TC3xx项目使用CAN FD物理寻址,请求ID 0x7A0、响应ID 0x7A8,逻辑地址0x0E00映射到CPU1。诊断仪发送0x22读取数据时,若CPU1未在超时时间内返回,ECU应回复0x78(响应挂起)而非直接超时,以符合ISO 14229的P2*机制。