第3章:DoIP协议入门

3.1 DoIP协议概述

DoIP,全称Diagnostic over Internet Protocol。说白了,就是让诊断数据跑在以太网上。

我刚开始接触这个协议时,第一反应是:这不就是把CAN诊断报文打包成IP包吗?后来发现,事情远没那么简单。DoIP不是简单的"搬运工",它定义了一整套通信机制。

DoIP的核心,是ISO 13400标准。这个标准规定了:

  • 怎么建立诊断连接
  • 怎么路由诊断请求
  • 怎么处理多个ECU同时通信
  • 怎么保证数据安全

嗯,这里要注意。DoIP和传统的UDS on CAN有个本质区别:CAN是广播式通信,所有节点都能听到。以太网是点对点通信,你得先建立连接才能发数据。

我个人习惯把DoIP通信分成三个阶段:

  1. 发现阶段:诊断仪寻找车辆上的DoIP节点
  2. 连接阶段:建立TCP连接,完成路由激活
  3. 诊断阶段:传输UDS诊断报文

每个阶段都有特定的报文格式。举个例子,发现阶段用的是UDP广播,诊断仪发个"你是谁"的请求,车辆上的DoIP网关回复"我是谁,我能干啥"。

关键点:DoIP的报文头是8个字节,包含协议版本、报文类型、负载长度等信息。这和CAN的11位ID比起来,简直是"豪华配置"。

3.2 DoIP在汽车诊断中的优势

为什么我们要从CAN诊断迁移到DoIP?我总结了几个核心优势。

第一,带宽优势。CAN的最高速率是1Mbps,实际应用中通常只有500kbps。以太网呢?100Mbps起步,现在都上到1Gbps了。你想想看,刷写一个几十兆的固件,CAN要刷半小时,以太网几分钟搞定。

我在项目中遇到过一件事。某OEM要求刷写时间不超过5分钟,用CAN根本做不到。后来换成DoIP,3分钟就刷完了。客户当场就拍板了。

第二,并发能力。CAN是单主多从架构,同一时间只能有一个诊断请求在总线上。DoIP支持多个诊断会话同时进行。你可以一边刷写ECU A,一边读取ECU B的故障码。

第三,灵活性。DoIP可以跨网段通信。诊断仪在办公室,车辆在测试车间,只要网络通,就能远程诊断。这在CAN时代想都不敢想。

第四,安全性。DoIP支持TLS加密。诊断数据在传输过程中不会被窃听或篡改。我记得有一次,客户要求诊断数据必须加密传输,用CAN根本没法实现,DoIP加个TLS就搞定了。

个人经验:DoIP还有一个隐藏优势——调试方便。用Wireshark就能抓包分析,比CAN的调试工具好用太多了。我建议新手先从抓包入手,理解DoIP的报文交互过程。

3.3 DoIP与CAN诊断的对比

为了让你更直观地理解两者的区别,我整理了一个对比表。

对比项 CAN诊断 DoIP诊断
物理层 双绞线,差分信号 双绞线或光纤,以太网
传输速率 最高1Mbps 100Mbps~1Gbps
通信方式 广播式,所有节点共享总线 点对点,独立连接
最大节点数 理论30个,实际通常10个左右 理论上无限制
诊断并发 不支持,一次只能一个诊断会话 支持,多个会话同时进行
传输距离 最长40米(1Mbps时) 最长100米(100Mbps时)
安全性 无加密,依赖物理隔离 支持TLS加密
调试工具 专用CAN分析仪 Wireshark等通用工具
成本 较低 较高(需要以太网硬件)

从表里能看出来,DoIP在性能上全面碾压CAN。但为什么现在还没完全取代CAN?原因很简单——成本。

CAN的硬件成本低,一颗CAN控制器芯片几块钱。以太网呢?带MAC和PHY的芯片要几十块。对于一辆车上几十个ECU来说,成本差距就大了。

所以目前的主流方案是:高速诊断用DoIP,常规诊断用CAN。网关负责两种协议的转换。

避坑指南:我曾经在一个项目里踩过坑。客户要求所有ECU都支持DoIP,结果发现有些低端ECU根本跑不动以太网协议栈。后来只能折中,网关做协议转换。所以,选型时一定要评估ECU的计算能力。

还有一个实际差异:报文长度。CAN报文最多8个字节数据,UDS诊断服务经常需要多帧传输。DoIP的单个报文可以承载几千字节,大块数据传输效率高得多。

举个例子,读取ECU的VIN码。CAN需要发多个连续帧,DoIP一个包就搞定了。你想想看,这差距有多大。

最后说一句。DoIP不是要完全取代CAN,而是补充。就像现在车上既有CAN总线,又有LIN总线一样,未来会是CAN、CAN FD、以太网共存的局面。作为诊断工程师,两种协议都得会。