1. J1939协议简介
一、协议基础属性:研发 / 应用 / 技术基底
二、协议分层架构:3 大核心层 + 子标准编号
| 物理层 | J1939/11 | 定义重型车辆适配的电气接口(如屏蔽双绞线、250Kbps 固定传输速率、终端匹配要求等) |
| 数据链路层 | 无专属编号(核心参考 J1939/21) | 制定报文构建规则(如 29 位 ID 格式)、总线访问仲裁、故障诊断与数据传输规则 |
| 应用层 | J1939/71/73 |
定义报文的实际数据含义(如发动机转速 / 扭矩的参数编码、PGN/SPN 标准定义) |
2. 报文格式及使用方法(J1939/21)
一、核心传输逻辑:广播为主,单播为辅(J1939 设计核心)
- 大部分报文无目标地址,总线所有设备可直接接收 / 解析,无需主动请求(适配重型车辆中转速、车速等全局共享数据);
- 优势:兼容性极强,新设备接入无需修改旧程序,软件升级 / 设备拓展成本低。
- 定向请求 / 指令类报文(如仅读取发动机扭矩),可在标识符中嵌入目标地址,实现一对一精准通信,避免无关设备处理无效数据。
二、标识符基础:复用 CAN 2.0B 的 29 位扩展 ID
- 忽略 SOF(帧起始)、SRR(替代远程请求)、IDE(扩展标识位)(仅底层 CAN 协议使用,J1939 解析无需关注);
- RTR(远程请求位)强制置 0(J1939 不使用 CAN 远程帧,所有数据均为主动发送的数帧)。
三、29 位 ID 核心结构:6 个固定字段
J1939 将 29 位 ID 按功能拆分为 6 个字段,位长固定,无冗余,是解析报文的基础:
| 优先权位(Prio) | 3 位 | 总线仲裁优先级:0 = 最高(如制动 / 转矩控制),数值越大优先级越低(如车速 / 油耗); |
| 保留位(R) | 1 位 | 备用字段,强制置 0,为协议拓展预留; |
| 数据页位(DP) | 1 位 | 扩展参数组范围,0/1 两个值,配合后续字段拓展 PGN 定义; |
| PDU 格式(PF) | 8 位 | 核心区分字段:判定报文是 PDU1(单播)还是 PDU2(广播); |
| 特定 PDU(PS) | 8 位 | 含义由 PF 决定(单播 = 目标地址,广播 = 组扩展); |
| 源地址(SA) | 8 位 | 报文发送设备的地址(0-253 唯一,254 = 未分配,255 = 全局广播); |
四、PDU1/PDU2 核心区分规则(PF 字段是唯一判定依据)
PS 字段的含义完全由 PF 的数值范围决定,无例外,是区分广播 / 单播的关键:
| PDU1 | 0~239 | 目标地址(接收设备) | 定向单播报文 | 读取某设备的特定参数(如发动机扭矩) |
| PDU2 | 240~255 | 组扩展(拓展 PGN) | 全局广播报文 | 发送车速、油温等全局共享数据 |
五、PGN 核心定义:18 位参数组编号(报文含义的唯一标识)
六、实战案例解析(0x0CF004EE):吃透字段拆解与 PGN 计算
示例 ID=0x0CF004EE,拆解 + 解读是实操核心,步骤如下:
- 先将 0x0C 转换为 8 位二进制:0000 1100
- 按 J1939 29 位结构提取前 5 位有效位:
- Prio=011(3 位,对应十进制 3)
- R=0(1 位,固定为 0)
- DP=0(1 位,数据页为 0)
- 后续字段:
- PF=0xF0(8 位,二进制 11110000,十进制 240)
- PS=0x04(8 位,二进制 00000100,十进制 4)
- SA=0xEE(8 位,二进制 11101110,十进制 238)
- PF=240 → 属于 PDU2(广播报文);
- PS=0x04 → 组扩展 = 4(无目标地址);
- PGN = R(1 位)+ DP(1 位)+ PF(8 位)+ PS(8 位) → 合并为 0x0F004(18 位,十进制 61444);
- SA=0xEE → 发送设备地址为 238。
七、地址规则:唯一且有限(实操必守)
3. 地址和名称 (J1939/81)
- ECU 名称(NAME)为 64 位固定长度,是设备全球唯一标识,主要用于 地址冲突仲裁 和设备功能、身份识别。
- 名称包含随机存取位、行业组、系统实例、车辆系统、保留位、函数、函数实例、ECU 实例、制造商代码、身份编号等字段。
- 函数字段 0~127 为 SAE 预定义标准设备(发动机、变速箱、仪表等),128~254 为自定义函数,依赖行业组与车辆系统区分。
- 地址冲突仲裁规则:NAME 数值更小的 ECU 优先级更高,可占用目标地址,NAME 更大的设备需重新选择地址。
- 有效通信地址范围 0~253,一个网络最多支持 254 个节点 同时在线。
- 地址 254 为空地址,用于设备上电未配置地址或地址申请失败时使用。
- 地址 255 为全局广播地址,总线上所有设备都会接收并处理该地址报文。
- 一个 ECU 可对应 多个名称 + 多个地址,支持在同一物理设备上实现发动机、缓速器等多逻辑节点功能。
- 设备名称标识功能与唯一身份,地址标识总线上通信位置,二者配合完成组网、通信与冲突处理。
4. 地址请求
- J1939 地址分配以静态预分配为主,设备上电即可直接使用,兼顾效率;同时支持动态地址分配,适配后期设备拓展、新增功能的组网需求。
- 地址请求(动态分配)包含两种核心方式,均为设备入网获取合法地址的关键流程。
- 方式 1(申请指定地址):设备发送报文申请目标地址,全网设备校验地址占用状态;若地址被高优先级设备占用,高优先级设备会回复地址占用报文,设备 NAME 数值越小,地址申请优先级越高。
- 方式 2(申请可用地址):设备发送地址表请求报文,全网设备回复自身已占用地址;申请设备根据反馈的地址表,自主选择并申请未被占用的地址,适配工具、追踪器等临时接入设备。
- 动态地址分配为可选机制,仅当设备检测到地址冲突、无预分配地址时触发,避免无意义的总线交互。
- 大部分 ECU 配置推荐地址(定义于 J1939/71),优先使用推荐地址入网以加快识别速度;仅推荐地址被占用时,设备才触发动态分配流程申请其他地址。
5. 报文传递(J1939/21和J1939/7x)
- 报文传递遵循 J1939/21(传输规则)和 J1939/7x(应用规范),核心原则为相关数据合并传输,减少控制报文占用总线资源。
- J1939/71 定义标准 PGN,既标识报文参数含义,也规定对应报文的优先级和传输速率,是报文解析和传输的核心依据。
- 设备无指定参数数据时,对应字节固定填充0xFF(表示 “无法获得”),接收器可据此识别数据丢失,无需额外交互确认。
- CAN 单帧仅支持 8 字节数据,超 8 字节的大数据需通过多数据包传输,传输规则遵循 J1939/21,核心分两种传输方式。
- 多包传输包含广播通知报文 (TP_BAM) 和连接管理 (TP_CM) 两类,分别适配不同的大数据传输场景
6. TP_BAM报文
- TP_BAM 是 J1939 超 8 字节大数据的广播式多包传输方式,基于全局地址通信,总线中所有设备均可接收该类报文。
- TP_BAM 传输以CM 连接管理报文为起始,固定 PGN=0x00EC00,报文中的控制字节用于标识当前为 TP_BAM 传输类型。
- 后续的实际业务数据,通过DT 数据传输报文分段发送,DT 报文固定 PGN=0x00EB00,承接 CM 起始报文完成整包数据传输。
- TP_BAM 无点对点交互确认,仅单向广播传输,适配需全网设备同步接收大数据的场景,传输效率高。
7. TP_CM报文
- TP_CM 是 J1939 里两点之间一对一的多包传输方式,只在发送方和接收方之间通信,不广播。
- 传输以 CM 报文(PGN=0x00EC00) 开始,控制字为 RTS(请求发送),并携带总字节数、总包数、要传输的 PGN 信息。
- 接收方回复 CTS(清除发送) 的 CM 报文,告知可以接收的包数量和起始包号。
- 发送方按 CTS 要求,用 DT 数据报文(PGN=0x00EB00) 分段发数据。
- CTS 与 DT 反复交互,直到所有数据发完。
- 传输完成后,接收方发 EOM(结束确认) 的 CM 报文,连接正式关闭。
- 整个过程有握手、有确认、有流控,可靠但比 TP_BAM 复杂。
8. 报文接收(J1939/21和J1939/7x)
| 定向地址报文(单播) | 检查目标地址是否为本机地址;匹配则必须处理报文,并按要求给出确认 / 应答 |
| 全局请求报文 | 总线上所有设备(含发送方自身)都必须处理,并回复数据是否可用 |
| 广播报文 | 设备自行判断报文内容是否与自身相关;相关则处理,无关可忽略,不强制应答 |
9. 如何解读J1939报文的示例
一、示例报文
CAN 标识符:0xCF00401数据字节:0xFF FF 82 DF 1A FF FF FF
二、CAN-ID 包含信息解析
- 优先级:从 ID 高位解析得出,报文优先级为 3
- 保留位 + 数据页:用于组合计算完整 PGN
- PF(PDU 格式):0xF0,标识报文为广播类型
- PS(PDU 特定):0x04,作为组扩展参与 PGN 计算
- 源地址 SA:ID 最低 8 位,发送设备地址为 1
- 计算 PGN:0x0F004
- 报文定义:依据 J1939/71,对应 电子引擎控制器 1 号报文 EEC1
三、数据字节解析规则
- 字节为 0xFF 时,表示该参数数据无法获取,为无效值
- 单字节参数:按协议给定的分辨率 + 偏移量计算实际物理值
- 多字节参数:采用小端模式,低字节在前,高字节在后拼接计算
四、报文数据解析过程
五、J1939 报文通用解读步骤


