第三章 物理层差异:OBD的物理层 vs UDS的物理层

聊完协议栈的宏观差异,咱们得把袖子撸起来,看看最底层的物理层了。

物理层这东西,说白了就是信号怎么在线上跑。OBD和UDS在这块儿差别挺大。我最早接触OBD时,用的还是K线,那时候觉得这玩意儿挺简单。后来转到UDS,发现物理层的选择多了不少,也复杂了不少。

3.1 OBD的物理层:K线与CAN总线

OBD-II标准规定了两种主要的物理层:早期的K线和后来的CAN总线。

3.1.1 K线(ISO 9141-2 / ISO 14230)

K线,全称是“K-Line”,一根单线,双向通信。你想想看,一根线既要发又要收,那肯定得有个协议来协调。

  • 通信方式:半双工,一次只能一个人说话。
  • 电压电平:12V系统,逻辑“1”是12V,逻辑“0”拉到地(0V)。
  • 波特率:通常只有10.4 kbps。嗯,你没看错,就是这么慢。
  • 特点:简单、成本低。但速度慢,抗干扰能力一般。

个人经验:我在做售后诊断仪时,遇到过一台老款欧洲车,死活连不上。查了半天,发现是K线的上拉电阻虚焊了。那根线对电压特别敏感,稍微有点接触不良,通信就断断续续。从那以后,我设计K线电路时,都会在PCB上留两个上拉电阻的位置,一个焊上,一个备用。

3.1.2 CAN总线(ISO 15765-4)

后来OBD-II也拥抱了CAN总线。这算是OBD物理层的一次大升级。

  • 通信方式:差分信号,双绞线(CAN_H和CAN_L)。抗干扰能力强很多。
  • 电压电平:显性电平(逻辑0)和隐性电平(逻辑1)。具体电压值取决于CAN收发器。
  • 波特率:OBD强制要求250 kbps或500 kbps。比K线快了一个数量级。
  • 特点:速度快、可靠性高、支持多节点。

避坑指南:我曾经在测试一款国产车时,发现OBD的CAN总线终端电阻没匹配好。CAN总线两端需要各有一个120欧姆的终端电阻。那台车只在ECU端有一个,诊断仪端没有,导致信号反射严重,通信时好时坏。加了个电阻,问题解决。

3.2 UDS的物理层:更多选择,更多可能

UDS作为更通用的诊断协议,它的物理层选择就丰富多了。说白了,UDS不挑食,什么物理层都能跑。

3.2.1 CAN总线(ISO 11898)

这是UDS最常用的物理层。和OBD的CAN总线基本一样,但波特率更灵活。

  • 波特率:从125 kbps到1 Mbps都有。我个人习惯用500 kbps,兼顾速度和稳定性。
  • 应用:动力总成、车身控制、底盘系统等几乎所有ECU。

3.2.2 LIN总线(ISO 17987)

LIN总线是CAN总线的低成本替代方案。速度慢,但便宜。

  • 通信方式:单线,主从架构。一个主节点,多个从节点。
  • 波特率:最高20 kbps。通常用在车窗、座椅、门锁等对速度要求不高的地方。
  • 特点:成本极低,但功能有限。

注意:LIN总线做诊断时,通常只支持UDS的部分服务。比如,你没法用LIN做复杂的刷写(34/36/37服务)。因为速度太慢,刷个固件得等到天荒地老。

3.2.3 FlexRay

FlexRay是高速、确定性通信的总线。主要用于高端车型的线控制动、线控转向等安全关键系统。

  • 通信方式:双通道,差分信号。每个通道可以独立工作,也可以冗余。
  • 波特率:每个通道最高10 Mbps。
  • 特点:速度快、实时性好、可靠性极高。但成本也高,实现复杂。

我记得在开发一款豪华车的主动安全系统时,就用到了FlexRay。那玩意儿调试起来比CAN复杂多了,时序要求特别严格。不过一旦跑起来,确实稳如老狗。

3.2.4 以太网(DoIP - ISO 13400)

这是UDS物理层的最新趋势。DoIP,全称Diagnostic over Internet Protocol。

  • 通信方式:基于TCP/IP和UDP/IP。说白了,就是把诊断数据包在以太网上跑。
  • 波特率:100 Mbps起步,现在已经有1000 Mbps(千兆)了。
  • 特点:速度极快,适合刷写大固件。支持远程诊断。

个人经验:有一次做OTA(空中升级)项目,用CAN刷写一个2GB的固件,预计要3个多小时。后来换成DoIP,同样的固件,15分钟搞定。你想想看,这效率差距有多大。从那以后,我强烈建议新平台都上DoIP。

3.3 物理层对比总结

咱们用一张表来总结一下OBD和UDS在物理层上的差异。

特性 OBD(K线) OBD(CAN) UDS(CAN) UDS(LIN) UDS(FlexRay) UDS(以太网)
通信介质 单线 双绞线 双绞线 单线 双绞线(双通道) 双绞线/光纤
波特率 10.4 kbps 250/500 kbps 125 kbps - 1 Mbps 最高20 kbps 最高10 Mbps 100/1000 Mbps
通信方式 半双工 半双工 半双工 半双工(主从) 全双工 全双工
成本 极低 中高
主要应用 老款车型 排放相关 通用诊断 低速车身 安全关键 高速刷写/远程

3.4 我的选择建议

说了这么多,到底该怎么选?我个人的经验是:

  • 如果你在做OBD相关产品:老老实实用CAN总线。K线基本可以退休了,除非你还在维护20年前的老车。
  • 如果你在做UDS相关产品:首选CAN总线,成熟、稳定、够用。如果对成本极度敏感,可以考虑LIN。如果对速度和实时性有变态要求,上FlexRay。如果要做OTA或远程诊断,别犹豫,直接上以太网。

最后说一句:物理层的选择,往往决定了整个诊断系统的性能和成本。别小看这几根线,选错了,后面全是坑。我见过太多项目,因为物理层没选好,导致后期各种改板、加线、换芯片。嗯,提前想清楚,能省很多麻烦。