2. CAN与J1939基础

在J1939网络测试与故障诊断中,几乎所有问题最终都会落到两个层面:一是物理层信号是否可靠,二是数据链路层报文是否按规则收发。J1939并不是脱离CAN独立存在的协议,它是在CAN 2.0B基础上建立的应用层与网络层规范。理解CAN与J1939的层次关系,是后续使用CANoe、CANalyzer、诊断仪或示波器定位故障的前提。

一、CAN物理层:差分信号与终端匹配

CAN总线采用差分传输,两条信号线分别称为CAN_H和CAN_L。隐性状态时两线电压约为2.5V,显性状态时CAN_H升高、CAN_L降低,形成约2V的差分电压。接收节点判断的是差分电压,而不是单线对地电压,因此共模干扰会被大幅抑制。J1939推荐总线拓扑为线性主干,两端各接一个120Ω终端电阻,并联后约为60Ω。若终端电阻缺失、阻值偏差过大或节点支线过长,都会造成信号反射、边沿畸变和误码率上升。

物理层测试通常关注以下参数:终端电阻、CAN_H/CAN_L静态电压、显性差分电压、位时间、上升/下降沿、总线负载率以及共模噪声。对于J1939,标准速率以250kbps为主,部分新应用使用500kbps。速率越高,对线束长度、支线长度和终端匹配越敏感。

物理层快速检查清单:

  • 断电测终端电阻:约60Ω为正常,明显偏高说明缺终端,明显偏低说明短路或多终端。
  • 上电测静态电压:CAN_H约2.5V,CAN_L约2.5V,隐性时差分接近0V。
  • 显性时差分电压:通常应在1.5V~3V之间,过低说明驱动能力或负载异常。
  • 支线长度:250kbps下建议不超过1m,过长会引入反射。
  • 屏蔽与接地:屏蔽层应单点接地,避免地环流。

二、CAN数据链路层:帧、仲裁与错误处理

CAN数据链路层负责把物理层比特流组织成帧,并完成仲裁、应答、错误检测与重发。CAN 2.0B定义两种帧格式:标准帧为11位标识符,扩展帧为29位标识符。J1939使用扩展帧,29位标识符被划分为优先级、保留位、数据页、PDU格式、PDU特定和源地址等字段。这意味着J1939的“报文ID”并不是随意编号,而是携带了优先级、目标地址和源地址等语义。

CAN采用非破坏性逐位仲裁:多个节点同时发送时,标识符数值越小优先级越高,显性位覆盖隐性位,发送显性位而回读为隐性的节点退出仲裁。J1939正是利用这一点,把安全相关报文放在较高优先级。数据链路层还提供CRC校验、应答槽和错误计数器机制。节点进入错误被动或总线关闭状态时,往往表现为整段网络通信异常,而不是单条报文丢失。

J1939 29位标识符结构(简化):
| 优先级(3) | 保留(1) | 数据页(1) | PDU格式(8) | PDU特定(8) | 源地址(8) |
    3bit        1bit       1bit         8bit          8bit         8bit

示例:0x18FEF100
优先级=6,PDU格式=0xFE,目标=全局,源地址=0x00

三、J1939与CAN的关系:分层与映射

J1939可以理解为“CAN之上的规则集”。CAN只规定了物理层和数据链路层,而J1939在此基础上增加了网络层、应用层和网络管理功能。具体来说,J1939定义了PGN(参数组编号)和SPN(可疑参数编号),把车辆参数如转速、车速、水温、故障码等映射到具体报文和字节位置。CAN负责“怎么把一帧发出去”,J1939负责“这一帧代表什么参数、由谁发、发给谁、如何解释”。

因此,在诊断时不能只看CAN帧是否发出,还要看PGN是否合法、源地址是否冲突、周期是否符合要求、数据字节是否符合SPN定义。很多“CAN通信正常但J1939功能异常”的问题,根源就在应用层映射或地址管理上。

J1939 与 CAN 的分层映射关系 J1939 应用层 PGN / SPN / 故障码 / 参数定义 J1939 网络层 地址声明 / 目标寻址 / 传输协议 CAN 数据链路层 扩展帧 / 仲裁 / CRC / 应答 / 错误处理 CAN 物理层 差分信号 / 120Ω终端 / 位定时 / 拓扑 J1939 29位标识符字段 优先级 3 bit 保留 1 bit 数据页 1 bit PDU格式 8 bit PDU特定 8 bit 源地址(8 bit) 标识发送节点,0~253 可用 PGN = 数据页 + PDU格式 + PDU特定 SPN = 参数组内的具体信号 诊断要点 CAN帧正常 ≠ J1939语义正确 需同时检查PGN、源地址与周期 CAN_H CAN_L ECU1 ECU2 ECU3 诊断仪 终端 120Ω 120Ω

四、标准体系与文档结构:从J1939-11到J1939-73

J1939标准由SAE发布,采用分册结构,每一册对应一个层次或功能域。工程中最常接触的是J1939-11、J1939-21、J1939-71和J1939-73。J1939-11规定物理层,包括250kbps、屏蔽双绞线、终端电阻和拓扑要求;J1939-21规定数据链路层与网络层,包括PGN、地址声明、请求与应答、传输协议;J1939-71规定车辆应用层参数,是SPN和PGN定义的主要来源;J1939-73规定诊断报文,包括DM1、DM2等故障码报文。此外还有J1939-81网络管理、J1939-13诊断连接器等。

标准分册对应层次核心内容测试关注点
J1939-11物理层250kbps、屏蔽双绞线、终端电阻电阻、电压、波形、拓扑
J1939-21数据链路层/网络层PGN、地址声明、传输协议ID结构、周期、地址冲突
J1939-71应用层车辆参数SPN/PGN定义数据字节、缩放、单位
J1939-73应用层诊断DM1/DM2故障码报文故障码、灯状态、清除
J1939-81网络管理地址分配与声明地址冲突、动态地址

五、典型场景与误区复盘

某商用车在路试中出现发动机转速信号间歇丢失。用CANalyzer观察,CAN总线负载率正常,无错误帧,但J1939报文中源地址为0x00的转速PGN周期从20ms变为不规则。进一步检查发现,该ECU地址声明报文未按J1939-81要求发送,导致网络中存在两个节点争用同一源地址。仲裁虽然不会破坏总线,但应用层数据被覆盖,表现为“CAN正常、J1939异常”。

常见误区:

  • 只测CAN波形,不检查J1939的PGN和源地址,导致应用层故障被漏判。
  • 把终端电阻并联值60Ω误认为单端60Ω,实际每个终端应为120Ω。
  • 认为CAN无错误帧就代表J1939通信健康,忽略周期抖动和地址冲突。
  • 混淆标准帧与扩展帧,J1939必须使用29位扩展帧。

掌握CAN物理层与数据链路层,是理解J1939报文结构和诊断方法的基础。物理层决定信号能否可靠传输,数据链路层决定帧能否正确仲裁与校验,而J1939在这两层之上定义了参数语义、地址管理和诊断规则。只有把三层放在一起看,才能在测试与故障诊断中快速定位问题究竟出在线束、控制器还是协议配置。