J1939协议
J1939 是 SAE(美国汽车工程师学会)制定的一套通信协议标准,主要应用于商用车辆(卡车、客车、工程机械、农用机械等)的车载网络。它的核心是基于 CAN 总线(Controller Area Network),但在 CAN 2.0 的物理层和数据链路层之上,J1939 定义了更高层的通信规则,使得车辆上的不同 ECU(Electronic Control Unit, 电子控制单元)能统一规范地交互数据。
📌 J1939 的主要内容
我给你拆分一下:
1. 物理层
-
基于 CAN 2.0B,支持 29 位扩展帧 ID。
-
波特率一般为 250 kbps(工程机械、卡车等)或 500 kbps(部分农业、建筑设备)。
-
总线拓扑采用 多主机、差分双绞线。
2. 数据链路层
-
报文 ID 使用 29 位扩展帧,其中包括 优先级、参数组号(PGN)、源地址(SA)。
-
J1939 将 CAN 的 29 位 ID 做了明确划分:
-
优先级(3 bit)
-
数据页(1 bit)
-
PDU 格式(PF,8 bit)
-
PDU 特定(PS,8 bit)
-
源地址(SA,8 bit)
-
🧩 J1939 29 位 ID 格式
| 28 27 26 | 25 | 24 ........ 17 | 16 ........ 8 | 7 ........ 0 |
+----------+----+----------------+---------------+--------------+
| Priority | DP | PF | PS | SA |
+----------+----+----------------+---------------+--------------+3 bit 1bit 8 bit 8 bit 8 bit
字段说明:
-
Priority(优先级,3 bit)
-
数字越小优先级越高。
-
0 最高优先级,7 最低。
-
在 CAN 仲裁过程中使用。
-
-
DP(Data Page,数据页,1 bit)
-
用于扩展参数组号 (PGN) 的命名空间。
-
一般情况下 = 0,高层应用扩展时可能用到 1。
-
-
PF(PDU Format,8 bit)
-
决定报文是点对点 (PDU1) 还是广播 (PDU2)。
-
PF < 240 (0xF0):PDU1 格式 → PS = 目标地址 (DA)。
-
PF ≥ 240 (0xF0):PDU2 格式 → PS = 组扩展(Group Extension)。
-
-
PS(PDU Specific,8 bit)
-
当 PF < 240 → 目标地址 (Destination Address),点对点通信。
-
当 PF ≥ 240 → 组扩展 (Group Extension),用于广播 PGN 扩展。
-
-
SA(Source Address,8 bit)
-
表示报文发送方的地址 (0–253)。
-
254 保留,255 表示全局地址。
-
🔑 PGN(Parameter Group Number)的组成
PGN = {DP, PF, PS?}
-
如果 PF < 240 (PDU1) → PGN = {DP, PF, 0} (PS 不算入 PGN)。