2. 车载网络基础

CAN(Controller Area Network)是J1939协议的底层承载网络。理解CAN的物理层、数据链路层、帧格式、仲裁机制与错误处理,是掌握J1939报文收发、地址声明、多包传输和故障诊断的前提。本节从电气信号出发,逐层向上梳理CAN总线的工作机制,并结合J1939应用场景说明关键参数与常见误区。

一、CAN总线核心原理

CAN采用多主、广播式、差分信号的总线结构。所有节点并联在同一对差分线上,任意节点发送的报文都会被总线上其他节点接收。CAN不使用主从轮询,而是通过报文标识符(ID)决定优先级,实现无冲突的仲裁访问。

其核心机制可概括为三点:

  • 差分传输:CAN_H与CAN_L电压差表示显性(Dominant,逻辑0)和隐性(Recessive,逻辑1),抗共模干扰能力强。
  • 非破坏性仲裁:多个节点同时发送时,ID数值越小优先级越高,显性位覆盖隐性位,失败节点自动退出并等待下次发送。
  • 位填充与同步:发送器在连续5个相同电平后插入1个相反电平,接收方据此保持位同步,避免时钟漂移导致采样错误。
J1939在CAN基础上定义了29位扩展标识符,将优先级(P)、保留位(R)、数据页(DP)、PDU格式(PF)、PDU特定(PS)和源地址(SA)编码进ID,使CAN帧直接承载J1939的寻址与优先级语义。

二、物理层:电气特性与拓扑

CAN物理层定义总线电平、终端匹配、线缆阻抗和节点连接方式。高速CAN(ISO 11898-2)是车载主流,典型参数如下:

参数典型值说明
总线速率250 kbps / 500 kbpsJ1939常用250 kbps,部分商用车用500 kbps
显性电平CAN_H≈3.5V,CAN_L≈1.5V差分电压约2V
隐性电平CAN_H≈CAN_L≈2.5V差分电压约0V
终端电阻120Ω × 2总线两端各一个,防止信号反射
线缆阻抗120Ω 双绞线屏蔽双绞线更佳
节点数最多30个(典型)受驱动能力和总线负载限制

物理层故障是车载网络最常见的排障对象。终端电阻缺失会导致信号反射、误码率上升;CAN_H与CAN_L短路会拉低差分电压,使总线进入错误被动甚至总线关闭状态;屏蔽层接地不当会引入共模干扰。使用示波器观察CAN_H/CAN_L波形,是判断物理层健康度的直接手段。

CAN总线物理层拓扑与差分信号 CAN_H CAN_L 120Ω 120Ω 发动机ECU 变速箱ECU 仪表/网关 差分信号:显性位(0)与隐性位(1) 显性 Dominant CAN_H高 / CAN_L低 隐性 Recessive CAN_H≈CAN_L≈2.5V 仲裁:显性覆盖隐性 ID小 → 优先级高 失败节点自动退让

三、数据链路层:帧格式与仲裁机制

CAN数据链路层负责位编码、帧封装、仲裁、CRC校验、应答和错误管理。标准CAN帧分为数据帧、远程帧、错误帧和过载帧,其中数据帧是J1939报文的主要载体。

CAN 2.0B扩展数据帧的关键字段顺序如下:

SOF(1) | 标识符A(11) | SRR(1) | IDE(1) | 标识符B(18) | RTR(1)
| 控制场(6) | 数据场(0~8字节) | CRC(15+1) | ACK(2) | EOF(7) | IFS(3)

J1939使用29位扩展标识符,其编码结构为:

| 优先级P(3) | 保留R(1) | 数据页DP(1) | PDU格式PF(8) | PDU特定PS(8) | 源地址SA(8) |

示例:0x18FEEE00
  优先级 = 6
  PF = 0xFE(PDU2格式,目标地址在PS中)
  PS = 0xEE(目标地址)
  SA = 0x00(源地址)

仲裁机制是CAN区别于其他总线的重要特征。当多个节点同时发送时,每个节点在发送每一位的同时回读总线电平。若某节点发送隐性位而总线上出现显性位,说明有更高优先级报文正在发送,该节点立即停止发送并转为接收,等待总线空闲后重发。这一过程不会破坏已获胜报文的任何位,因此称为“非破坏性仲裁”。

在J1939中,优先级数值越小优先级越高。例如优先级3的扭矩控制报文会优先于优先级6的常规状态报文。设计网络时,应把安全相关、实时性要求高的报文分配更小的优先级值。

四、错误处理与故障界定

CAN节点通过发送错误计数器(TEC)和接收错误计数器(REC)管理自身状态,形成错误主动、错误被动和总线关闭三种状态:

  • 错误主动(Error Active):TEC和REC均小于128,节点可正常发送主动错误帧。
  • 错误被动(Error Passive):TEC或REC超过127,节点仍可通信,但只能发送被动错误帧,发送后需额外等待。
  • 总线关闭(Bus Off):TEC超过255,节点自动脱离总线,停止发送和接收,需软件干预或复位后才能恢复。

常见错误类型包括位错误、填充错误、CRC错误、格式错误和应答错误。J1939网络排障时,若某节点频繁进入Bus Off,通常需要检查:终端电阻是否正常、CAN_H/CAN_L是否短路或反接、波特率是否一致、是否存在强干扰源、节点供电是否稳定。

误区:认为“总线能通就没问题”。实际上,间歇性错误帧、错误计数器缓慢累积、终端电阻偏差等隐患,可能在振动、温度变化或负载升高时集中爆发。建议在台架和实车阶段用CAN分析仪持续统计错误帧和总线负载率,而不是只做一次通信测试。

五、案例:J1939报文发送失败的排查路径

某商用车在整车联调时,发动机ECU的J1939报文无法被仪表接收。按以下顺序排查:

  1. 用示波器测量CAN_H/CAN_L静态电平,确认隐性电平约2.5V,排除短路。
  2. 测量总线两端终端电阻,应为约60Ω(两个120Ω并联),若为120Ω说明一端缺失。
  3. 用CAN分析仪监听总线,确认波特率是否为250 kbps,观察是否有错误帧。
  4. 检查发动机ECU的29位ID配置,确认PF、PS、SA是否符合J1939地址声明结果。
  5. 查看ECU错误计数器,若TEC持续上升,重点检查线束屏蔽和接地。

最终发现是仪表节点终端电阻未焊接,导致信号反射,发动机ECU在仲裁和应答阶段频繁出错,TEC累积后进入错误被动,报文被大量丢弃。补焊终端电阻后通信恢复正常。

掌握CAN物理层、帧格式、仲裁和错误状态机,才能在J1939层面对“报文收不到、时断时续、Bus Off、地址冲突”等问题做出快速定位。CAN是J1939的“路”,J1939是跑在这条路上的“交通规则”,两者必须结合理解。