2. 车载网络基础

J1939 并不是一套“另起炉灶”的物理网络,它建立在 CAN 与 CAN FD 之上:物理层决定电平、终端电阻与位时间,数据链路层决定帧格式、仲裁与错误处理,而 J1939 则在这些机制之上定义 29 位标识符的语义、参数组(PGN)、地址声明与多包传输。理解这一分层关系,是后续做节点通信、报文解析与故障排查的基础。

一、物理层:差分电平与位时间

CAN 采用差分信号传输,CAN_H 与 CAN_L 之间的电压差表示显性(Dominant,逻辑 0)与隐性(Recessive,逻辑 1)。显性电平会覆盖隐性电平,这一“线与”特性正是仲裁机制成立的物理前提。总线两端必须各接一个 120 Ω 终端电阻,用于吸收信号反射、稳定差分阻抗。

位时间被划分为同步段、传播段、相位缓冲段 1 和相位缓冲段 2,采样点通常落在 75%~87.5% 位置。CAN FD 进一步引入可变数据段速率:仲裁段仍用较低速率保证兼容与仲裁可靠,数据段切换到更高速率以提升有效载荷吞吐。J1939 传统上运行在 250 kbit/s,J1939-22 等新规范则利用 CAN FD 扩展带宽。

关键点:物理层不区分“J1939 报文”和“普通 CAN 报文”,它只负责把位流可靠地送到总线。J1939 的差异全部体现在标识符语义与数据场组织上。

二、数据链路层:帧结构与仲裁机制

CAN 数据帧由帧起始、仲裁场、控制场、数据场、CRC 场、应答场和帧结束组成。标准帧使用 11 位标识符,扩展帧使用 29 位标识符。J1939 强制使用扩展帧,其 29 位标识符被拆分为优先级(P)、保留位、数据页(DP)、PDU 格式(PF)、PDU 特定(PS)和源地址(SA)。

仲裁发生在仲裁场:每个节点边发送边回读总线电平,若发送隐性却读到显性,说明有更高优先级节点在竞争,该节点立即退出并转为接收。标识符数值越小优先级越高,因此 J1939 中优先级字段越小,报文越先获得总线。这一机制保证了安全相关报文(如制动、扭矩)能优先传输。

CAN / CAN FD 分层与 J1939 标识符映射 物理层 差分电平 / 120Ω / 位时间 数据链路层 帧结构 / 仲裁 / CRC / 错误处理 J1939 应用层 PGN / SPN / 地址声明 / 多包 J1939 扩展帧 29 位标识符 P 3位 R 1位 DP 1位 PF 8位 PS 8位 SA 8位 优先级 页选择 PDU格式 PDU特定 源地址 数据场:0~8 字节(CAN) / 最多 64 字节(CAN FD) J1939 单帧 ≤ 8 字节;更长数据用 TP.CM / TP.DT 多包传输 仲裁与错误处理要点 • 显性覆盖隐性 → 标识符越小优先级越高,低优先级节点自动退让 • CRC 校验失败 / 位错误 / 填充错误 → 错误帧,TEC/REC 计数递增 • 错误主动 → 错误被动 → 总线关闭,节点需恢复后才能重新通信 • J1939 地址声明依赖仲裁:地址冲突时低优先级地址胜出

三、错误处理与节点状态

CAN 节点维护发送错误计数器(TEC)和接收错误计数器(REC),并据此在错误主动、错误被动、总线关闭三种状态间迁移。错误主动节点可发送主动错误帧;错误被动节点只能发送被动错误帧;当 TEC 超过 255 时进入总线关闭,节点必须经过恢复流程(如 128 次 11 位隐性位)才能重新参与通信。

常见错误类型包括位错误、填充错误、CRC 错误、格式错误和应答错误。J1939 节点在总线关闭后,通常会通过诊断报文(DM1/DM2)上报通信故障,工程上需要区分“物理层断线”“终端电阻缺失”“波特率不匹配”与“节点自身错误状态”这几类根因。

四、案例:J1939 地址声明中的仲裁

J1939 节点上电后发送地址声明报文(PGN 60928,即 Address Claimed)。若两个节点声明同一地址,则比较 64 位 NAME 字段,NAME 数值较小者获得该地址,另一节点必须改用其他地址或停止通信。这一过程完全依赖 CAN 仲裁:地址声明报文使用固定优先级,NAME 比较结果最终体现为谁在仲裁中胜出。

地址声明报文示例(29 位 ID 解析):
ID = 0x18EEFF80
  优先级 P   = 6
  数据页 DP  = 0
  PDU格式 PF = 0xEE  (地址声明)
  PDU特定 PS = 0xFF  (广播)
  源地址 SA  = 0x80

数据场 8 字节 = 64 位 NAME:
  低 21 位  = 制造商代码
  位 21-23  = 功能实例
  位 24-27  = ECU 实例
  位 28-31  = 功能
  位 32-39  = 车辆系统
  位 40-42  = 车辆系统实例
  位 43-63  = 行业组与保留位

五、常见误区与复盘清单

误区 正确认识 排查动作
把 J1939 当成独立物理网络 J1939 运行在 CAN/CAN FD 物理层之上 先确认 CAN 物理层波形与终端电阻
认为标识符只是“编号” 29 位 ID 含优先级、PGN、源地址语义 用解析工具拆解 P/PF/PS/SA 字段
忽略 CAN FD 数据段速率切换 仲裁段与数据段速率可不同 核对采样点与波特率配置是否匹配
总线关闭后直接重启节点 需确认 TEC/REC 与根因 读取 DM1 与错误计数器,定位物理层问题
工程建议:调试 J1939 节点时,先用示波器确认 CAN_H/CAN_L 差分波形与终端电阻,再用 CAN 分析仪确认波特率与采样点,最后才解析 PGN 与 SPN。顺序颠倒会把物理层问题误判为协议问题。

综上,CAN/CAN FD 提供了可靠的位传输、帧封装、仲裁与错误恢复机制,J1939 则在此基础上定义了标识符语义、参数组与网络管理。掌握这两层的分工与衔接,才能在节点通信、报文解析和故障定位中做到有的放矢。