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-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在这两层之上定义了参数语义、地址管理和诊断规则。只有把三层放在一起看,才能在测试与故障诊断中快速定位问题究竟出在线束、控制器还是协议配置。