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 扩展带宽。
二、数据链路层:帧结构与仲裁机制
CAN 数据帧由帧起始、仲裁场、控制场、数据场、CRC 场、应答场和帧结束组成。标准帧使用 11 位标识符,扩展帧使用 29 位标识符。J1939 强制使用扩展帧,其 29 位标识符被拆分为优先级(P)、保留位、数据页(DP)、PDU 格式(PF)、PDU 特定(PS)和源地址(SA)。
仲裁发生在仲裁场:每个节点边发送边回读总线电平,若发送隐性却读到显性,说明有更高优先级节点在竞争,该节点立即退出并转为接收。标识符数值越小优先级越高,因此 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 与错误计数器,定位物理层问题 |
综上,CAN/CAN FD 提供了可靠的位传输、帧封装、仲裁与错误恢复机制,J1939 则在此基础上定义了标识符语义、参数组与网络管理。掌握这两层的分工与衔接,才能在节点通信、报文解析和故障定位中做到有的放矢。