4. 诊断通信栈配置与CAN/CAN-FD/DoIP适配

在Stellar/SPC5平台上,UDS诊断服务本身只定义应用层语义,真正决定诊断请求能否到达ECU、响应能否按时返回的,是底层通信栈的配置。Stellar/SPC5通常集成多路CAN-FD控制器(如M_CAN兼容模块)和千兆以太网外设,诊断栈需要同时支持经典CAN、CAN-FD和DoIP三条物理通道。本节围绕这三条通道,说明ISO-TP、CAN-FD与DoIP传输层的配置要点,以及如何打通诊断请求与响应的物理路径。

一、诊断通信栈的分层结构

从UDS应用层向下看,诊断通信栈大致分为四层:UDS服务层(ISO 14229)、传输层(ISO 15765-2即ISO-TP,或DoIP的TCP/UDP承载)、数据链路层(CAN/CAN-FD控制器或以太网MAC)、物理层(CAN收发器或PHY)。Stellar/SPC5的CAN控制器负责CAN帧的收发与过滤,以太网外设负责DoIP报文的收发。传输层配置的核心任务,是把UDS PDU正确地分段、封装、寻址并路由到对应通道。

Stellar/SPC5 诊断通信栈与三通道适配 UDS 服务层 (ISO 14229) 0x10 / 0x22 / 0x27 / 0x2E / 0x31 / 0x34… ISO-TP (ISO 15765-2) SF/FF/CF/FC 分段重组 BS / STmin / N_As/N_Bs DoIP (ISO 13400) TCP 数据 / UDP 发现 逻辑地址 + 路由激活 经典 CAN ≤8 字节 / 500 kbps CAN-FD ≤64 字节 / 数据段 2 Mbps 以太网 MAC 100/1000BASE-T1 PHY T1 单对双绞 CAN 收发器 (TJA1044/TJA1145) CAN_H / CAN_L 差分 以太网 PHY + 变压器 差分对 / 诊断链路 同一 UDS 请求可经 ISO-TP/CAN-FD 或 DoIP 承载,由传输层按通道完成分段与寻址 诊断地址映射:物理请求 0x7E0 / 响应 0x7E8;功能请求 0x7DF

二、ISO-TP配置:分段、流控与定时

ISO-TP是CAN/CAN-FD上承载UDS的关键。配置时首先要确定寻址方式:Stellar/SPC5诊断通常采用11位标准ID的物理寻址,请求ID 0x7E0、响应ID 0x7E8,功能寻址使用0x7DF。若使用29位扩展ID,需在控制器过滤器中同时配置请求与响应ID的接收过滤。

分段参数是ISO-TP配置的核心。单帧(SF)用于≤7字节(经典CAN)或≤62字节(CAN-FD)的PDU;首帧(FF)携带总长度和首段数据;连续帧(CF)按序传输;流控帧(FC)由接收方发出,包含流状态(CTS/WAIT/OVFLW)、块大小BS和最小间隔STmin。以一条长度200字节的UDS响应为例,在经典CAN下:FF携带6字节,剩余194字节需28个CF(每帧7字节),若BS=0表示接收方不再要求流控,发送方可连续发送;若BS=8,则每发8个CF后需等待新的FC。STmin=0表示背靠背发送,STmin=10表示帧间至少间隔10 ms。这些参数必须与诊断仪端一致,否则会出现N_Bs超时或丢帧。

在CAN-FD下,ISO-TP的DLC可扩展到64字节,单帧即可承载大部分UDS请求,显著减少分段次数。配置时需注意:CAN-FD帧的DLC与数据长度并非线性对应(DLC=9对应12字节,DLC=10对应16字节,…,DLC=15对应64字节),ISO-TP的SF/FF长度字段需按实际数据长度填写。Stellar/SPC5的CAN-FD控制器需使能FD模式、配置标称位速率(如500 kbps)和数据位速率(如2 Mbps),并设置TDC(发送延迟补偿)以保证数据段采样正确。

三、DoIP传输层配置

DoIP用于以太网诊断,其传输层由UDP和TCP共同承担。UDP 13400端口用于车辆发现和车辆识别请求/响应;TCP 13400端口用于诊断消息、路由激活和诊断电源模式。配置要点包括:ECU的IP地址与诊断仪同网段,逻辑地址(如0x0E00)与UDS地址映射一致;路由激活请求(0x0005)需携带激活类型和OEM特定数据,ECU返回0x0006路由激活响应后,才允许发送诊断消息。

DoIP报文头固定8字节:协议版本、反向版本、载荷类型、载荷长度。诊断消息载荷类型为0x8001,其中包含源地址、目标地址和UDS PDU。与ISO-TP不同,DoIP不需要流控帧,TCP自身提供可靠传输,但需处理TCP粘包/拆包,按载荷长度字段正确切分。Stellar/SPC5的以太网外设需配置MAC地址过滤、VLAN(若使用)、以及TCP/UDP套接字缓冲区,确保大尺寸刷写数据(如0x36 TransferData)不丢包。

四、三通道适配与路由

实际工程中,同一ECU可能同时暴露CAN-FD和DoIP两个诊断入口。通信栈需要维护一张通道映射表:CAN通道使用ISO-TP,DoIP通道使用TCP承载,二者在UDS层统一。路由逻辑根据接收到的物理通道选择对应的传输层实例,并将响应按原通道返回。配置时应避免同一UDS请求在两个通道上并发处理导致的状态冲突,通常采用会话互斥或按优先级仲裁。

调试建议:先用CAN分析仪确认ISO-TP的FF/CF/FC时序,再用DoIP测试工具验证路由激活与诊断消息往返。若出现N_Bs超时,优先检查BS与STmin是否与诊断仪一致;若DoIP无响应,检查TCP连接是否建立、逻辑地址是否匹配。

五、配置检查清单(示例)

配置项CAN/CAN-FDDoIP
寻址0x7E0/0x7E8,功能0x7DF逻辑地址0x0E00,源/目标地址
传输层ISO-TP,BS/STminTCP 13400,载荷长度切分
速率500 kbps / 数据段2 Mbps100/1000 Mbps
关键参数DLC映射、TDC、过滤器路由激活、IP/端口
典型超时N_Bs 1000 ms,N_Cr 1000 msTCP重传、路由激活超时

完成上述配置后,可用一条0x22读取DID的请求验证:CAN-FD通道下,请求以单帧发出,ECU返回多帧响应,诊断仪按ISO-TP重组;DoIP通道下,请求封装为0x8001诊断消息,经TCP发送,ECU返回同格式响应。两条通道均能正确解析UDS PDU,即说明物理通道已打通。