3. 诊断通信底层基础

UDS(ISO 14229)定义的是诊断服务语义,它本身并不关心报文如何从诊断仪送到ECU。真正把一条长度可达数千字节的诊断请求拆成总线可承载的帧、并在接收端还原回来的,是传输层协议。在CAN/CAN FD上这一层是ISO 15765-2(俗称ISO-TP),在以太网上则是ISO 13400(DoIP)。理解这两条路径的帧结构、流控与重组机制,是后续读懂刷写时序、定位超时与丢包问题的前提。

一、CAN与CAN FD帧结构差异

经典CAN帧由帧起始、仲裁段(含11位或29位标识符)、控制段(DLC,0~8字节)、数据段、CRC、ACK与帧结束组成。CAN FD在控制段引入FDF位区分格式、BRS位切换数据段波特率、ESI位指示错误状态,DLC采用非线性编码,可表达0~8、12、16、20、24、32、48、64字节。对诊断而言,最直接的影响是单帧可携带的有效数据量:经典CAN一帧最多8字节,CAN FD最多64字节。

ISO-TP在两种帧格式下的寻址方式一致:11位标识符时用物理寻址(如0x7E0发、0x7E8收)与功能寻址(如0x7DF);29位标识符时通过标识符中的地址扩展字段区分源与目标。诊断报文的首字节是PCI(协议控制信息),高4位为帧类型,低4位配合后续字节表达长度或序号。

二、ISO-TP四种帧类型与分包重组

ISO-TP定义了四种PCI类型:单帧(SF,0x0)、首帧(FF,0x1)、连续帧(CF,0x2)、流控帧(FC,0x3)。当数据长度不超过单帧容量(经典CAN为7字节,CAN FD在普通寻址下为62字节)时用SF直接发送;超长时发送方先发FF,其中12位(经典CAN)或32位(CAN FD)长度字段声明总长度,接收方回FC,发送方再按序发CF。

流控帧包含三个关键参数:FS(流状态,0=CTS继续发送、1=WAIT等待、2=OVFLW溢出)、BS(Block Size,允许连续发送的CF数量,0表示不再需要流控)、STmin(连续帧最小间隔,单位ms或100µs)。接收方通过BS和STmin控制发送节奏,避免接收缓冲区溢出。发送方每发完BS个CF后必须等待下一个FC,CF的序号SN在0~15之间循环,接收端据此检测丢帧。

ISO-TP 分包重组与流控时序(示例:请求 20 字节,BS=4,STmin=10ms) 诊断仪 (Tester) ECU (目标节点) FF 首帧: PCI=0x10 14 声明总长 20 字节,携带前 6 字节数据 FC 流控帧: FS=0(CTS) BS=4 STmin=10 允许连续发 4 帧,帧间隔 ≥10ms CF SN=1 (7 字节) CF SN=2 (7 字节) CF SN=3 (7 字节) CF SN=4 (7 字节) FC: FS=0 BS=4 STmin=10 BS 用尽,等待下一轮流控 接收端按 SN 顺序重组:FF 数据 + CF1~CF4 数据 = 20 字节完整诊断请求;SN 跳变即判定丢帧

上图为一次典型的多帧请求过程。需要特别注意的是,STmin 与 BS 由接收方决定,发送方必须遵守;若接收方处理能力弱,可先回 FS=1(WAIT),发送方需等待下一个 FC 再继续。若接收缓冲区不足,回 FS=2(OVFLW),本次传输终止。工程中常见的“刷写到 90% 卡死”,多数是 BS/STmin 配置与 ECU 接收能力不匹配,或 CF 序号错乱导致接收端静默丢弃。

三、DoIP在Continental新一代EE架构中的角色

随着域集中式与中央计算架构的普及,Continental 新一代 EE 架构普遍采用“中央网关 + 域控制器 + 区域控制器”的拓扑,诊断入口从 OBD 口的 CAN 逐步转向以太网。DoIP(ISO 13400)在 TCP/IP 之上承载 UDS,报文由 DoIP 头(协议版本、反码、载荷类型、载荷长度)加 UDS 数据组成,常见载荷类型包括 0x8001 车辆识别请求/响应、0x8002 带激活线的诊断报文、0x8003 诊断报文。相比 ISO-TP,DoIP 单包可携带数 KB 数据,天然适合大容量刷写与远程诊断。

选型依据可归纳为三点:一是带宽,CAN FD 理论 8Mbps 但实际有效载荷受仲裁与流控限制,而 100BASE-TX 可稳定提供数十 Mbps,刷写 20MB 固件的时间从数十分钟缩短到数分钟;二是拓扑适配,中央计算架构下 ECU 不再共享一条总线,DoIP 通过 IP 寻址天然支持跨域路由;三是可扩展性,DoIP 支持车辆发现、路由激活、多客户端并发,便于产线并行刷写与 OTA 场景。但 DoIP 并非完全取代 CAN,安全气囊、底盘等对确定性与成本敏感的节点仍保留 CAN/CAN FD 诊断,形成“以太网为主干、CAN 为末端”的混合诊断链路。

在混合架构中,诊断仪发出的 DoIP 报文到达中央网关后,网关需完成 DoIP 到 ISO-TP 的协议转换,再转发到目标 CAN 节点。此时网关的缓冲区大小、转换延迟与流控策略会直接影响端到端刷写稳定性,是排障时的重点观察对象。

四、关键参数速查

参数经典CANCAN FDDoIP
单帧最大有效数据7 字节(普通寻址)62 字节(普通寻址)受 TCP 窗口与 MTU 限制,通常数 KB
长度字段位宽12 位(FF)32 位(FF)DoIP 头 32 位载荷长度
流控机制FC 帧 BS/STminFC 帧 BS/STminTCP 滑动窗口 + DoIP 路由激活
典型诊断标识符0x7E0/0x7E80x7E0/0x7E8逻辑地址 + IP:port

掌握上述帧结构、流控参数与 DoIP 定位后,再去看刷写流程中的 0x34/0x36/0x37 服务时序,就能理解为什么每个 Block 之间要等待流控、为什么 STmin 设置过小会导致 ECU 返回 NRC 0x21(busyRepeatRequest),以及为什么在 DoIP 链路上需要关注 TCP 重传与路由激活超时。这些底层细节,正是后续排障与性能调优的抓手。