第3章:DoIP协议入门
3.1 DoIP协议概述
DoIP,全称Diagnostic over Internet Protocol。说白了,就是让诊断数据跑在以太网上。
我刚开始接触这个协议时,第一反应是:这不就是把CAN诊断报文打包成IP包吗?后来发现,事情远没那么简单。DoIP不是简单的"搬运工",它定义了一整套通信机制。
DoIP的核心,是ISO 13400标准。这个标准规定了:
- 怎么建立诊断连接
- 怎么路由诊断请求
- 怎么处理多个ECU同时通信
- 怎么保证数据安全
嗯,这里要注意。DoIP和传统的UDS on CAN有个本质区别:CAN是广播式通信,所有节点都能听到。以太网是点对点通信,你得先建立连接才能发数据。
我个人习惯把DoIP通信分成三个阶段:
- 发现阶段:诊断仪寻找车辆上的DoIP节点
- 连接阶段:建立TCP连接,完成路由激活
- 诊断阶段:传输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、以太网共存的局面。作为诊断工程师,两种协议都得会。