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正确地分段、封装、寻址并路由到对应通道。
二、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/CAN-FD | DoIP |
|---|---|---|
| 寻址 | 0x7E0/0x7E8,功能0x7DF | 逻辑地址0x0E00,源/目标地址 |
| 传输层 | ISO-TP,BS/STmin | TCP 13400,载荷长度切分 |
| 速率 | 500 kbps / 数据段2 Mbps | 100/1000 Mbps |
| 关键参数 | DLC映射、TDC、过滤器 | 路由激活、IP/端口 |
| 典型超时 | N_Bs 1000 ms,N_Cr 1000 ms | TCP重传、路由激活超时 |
完成上述配置后,可用一条0x22读取DID的请求验证:CAN-FD通道下,请求以单帧发出,ECU返回多帧响应,诊断仪按ISO-TP重组;DoIP通道下,请求封装为0x8001诊断消息,经TCP发送,ECU返回同格式响应。两条通道均能正确解析UDS PDU,即说明物理通道已打通。