一、DoIP协议概述

1.1 什么是DoIP

DoIP,全称是Diagnostic over Internet Protocol。说白了,就是把汽车诊断跑在以太网上。

我刚开始接触这个协议时,第一反应是——这不就是把UDS报文塞进TCP/IP包里吗?后来发现,事情没那么简单。

DoIP不是简单的「UDS over TCP」。它有一套完整的通信机制,包括车辆发现、路由激活、连接管理等等。你想想看,一辆车上可能有几十个ECU,每个ECU都要支持诊断,怎么让诊断仪找到它们?怎么保证数据不冲突?这些都是DoIP要解决的问题。

我个人习惯把DoIP理解成三层结构:

  • 物理层和传输层:以太网+TCP/UDP/IP
  • DoIP协议层:处理车辆发现、连接管理、路由激活
  • 应用层:UDS诊断服务(就是我们熟悉的0x10、0x22、0x2E那些)

嗯,这里要注意,DoIP的报文格式和UDS on CAN完全不同。CAN上我们习惯用CAN ID来区分功能地址和物理地址,DoIP里用的是逻辑地址(Logical Address)。

核心要点:DoIP = 以太网传输 + 诊断协议封装 + 车辆网络管理

1.2 DoIP在汽车电子中的角色

DoIP在汽车电子里扮演什么角色?我举个例子你就明白了。

以前做刷写(Flash Programming),用CAN总线,一条CAN报文最多8个字节。刷一个几百KB的固件,那叫一个慢。我记得有一次在项目现场,刷一个域控制器花了40分钟,客户直接投诉了。

DoIP来了之后,以太网报文一包能传1500字节。刷写时间从40分钟缩短到5分钟以内。这就是DoIP的价值——高带宽、高效率

具体来说,DoIP在智能驾驶域控制器中承担以下几个角色:

  1. 刷写通道:OTA升级、产线刷写,这是最刚需的场景
  2. 诊断通信:读取故障码、标定参数、执行例程
  3. 数据采集:高速采集传感器数据、日志上传
  4. 远程诊断:通过T-Box连接云端,实现远程故障排查

你可能会问,为什么不用CAN?因为智能驾驶域控制器要处理的数据量太大了。摄像头、激光雷达、毫米波雷达,这些传感器的数据量动辄几百Mbps。CAN那1Mbps的带宽,根本不够用。

个人经验:我在做L3级智驾项目时,域控制器需要同时采集6路摄像头数据做诊断。如果用CAN,光传输协议开销就把带宽占满了。换成DoIP后,带宽不再是瓶颈。

1.3 DoIP与传统诊断协议的对比

传统诊断协议,大家最熟悉的就是KWP2000和UDS on CAN。我们来做个对比。

对比项 KWP2000 UDS on CAN DoIP
传输层 K线/CAN CAN 以太网
最大报文长度 255字节(K线) 8字节(CAN 2.0) 1500字节(以太网MTU)
传输速率 10.4 Kbps(K线) 500 Kbps - 1 Mbps 100 Mbps - 1 Gbps
寻址方式 物理寻址/功能寻址 CAN ID + 物理/功能寻址 逻辑地址 + 源地址/目标地址
车辆发现 无(直接连接) 无(直接连接) UDP广播/组播(VIN/GID/EID)
并发连接 单连接 单连接 多连接(最多支持多个测试设备)
安全性 可选(SecOC) TLS/DTLS + 路由激活认证

从表格里能看出来,DoIP最大的优势就是带宽和灵活性

但这里我要说一个避坑指南:带宽大不代表延迟低。我曾经在项目中遇到过一个问题——DoIP刷写速度很快,但诊断请求的响应时间反而比CAN还慢。后来排查发现,是TCP的Nagle算法在作祟。TCP默认会把小包合并成大包再发送,导致诊断请求被延迟了。

解决方案是什么?关闭Nagle算法,设置TCP_NODELAY。嗯,这个细节很多工程师容易忽略。

再对比一下KWP2000。说实话,KWP2000现在基本已经退出历史舞台了。我入行时还用过KWP2000,那时候诊断仪连到OBD接口上,用K线通信,速度慢得让人抓狂。后来UDS on CAN普及了,大家终于用上了8字节的报文。现在DoIP来了,直接跳到1500字节。

你想想看,从8字节到1500字节,这是将近200倍的提升。所以我说,DoIP不是简单的技术升级,而是诊断通信范式的转变

重要提醒:虽然DoIP带宽大,但不要滥用。我曾经见过有人把DoIP当成普通以太网来用,大量发送非诊断数据,结果导致诊断通道拥塞。记住,DoIP的核心是诊断,不是数据传输。

1.4 为什么智能驾驶域控制器需要DoIP

这个问题其实前面已经提到了,但我还是想单独拿出来说。

智能驾驶域控制器有几个特点:

  • 算力高:动不动就是几十TOPS甚至上百TOPS
  • 数据量大:传感器数据、算法中间结果、日志文件
  • 功能安全要求高:ASIL-B甚至ASIL-D
  • OTA升级频繁:算法迭代快,需要经常刷写

这些特点决定了,传统的CAN诊断根本扛不住。举个例子,智驾域控制器在做故障排查时,需要把一段时间内的传感器原始数据上传到诊断仪进行分析。这些数据量可能是几百MB甚至几个GB。用CAN传?别想了。用DoIP,几分钟就能搞定。

我个人习惯在智驾域控制器上同时保留CAN诊断和DoIP诊断。CAN诊断用于基础功能(比如读取VIN、故障码),DoIP用于大数据量场景(刷写、日志上传)。这样既保证了兼容性,又发挥了DoIP的优势。

小技巧:在智驾域控制器中,我建议把DoIP的TCP端口和UDP端口分开规划。TCP用于可靠传输(刷写、诊断),UDP用于广播发现和实时性要求高的场景(比如事件触发上报)。

好了,这一章就到这里。下一章我们会深入DoIP的协议细节,包括报文格式、状态机、路由激活流程。这些东西在实际开发中非常关键,尤其是状态机,搞错了会导致通信失败。