一、基本概念
SAE J1939(以下简称J1939)是美国汽车工程协会(SAE)的推荐标准,用于为中重型道路车辆上电子部件间的通讯提供标准的体系结构。它由“卡车与大型客车电气与电子委员会”(Track & Bus Electrical & Electronics Committee)下属的“卡车与大型客车控制和通讯网络附属委员会”(Track & Bus Control and Communications Network Subcommittee)开发编写。
J1939基于德国Bosch公司(Robert Bosch GmbH)开发的控制器局域网络(CAN:Controller Area Network),可达到250Kbps的通讯速率。它描述了重型车辆现场总线的一种网络应用,包括CAN网络物理层定义、数据链路层定义、应用层定义、网络层定义、故障诊断和网络管理。在SAE J1939协议中,不仅仅指定了传输类型、报文结构及其分段、流量检查等,而且报文内容本身也做了精确的定义。目前,J1939是在商用车辆、舰船、轨道机车、农业机械和大型发动机中应用最广泛的应用层协议。
基本规定:
PGN:Parameter Group Number
SA(源地址):Source Address
SPN:Suspect Parameter Number
SAE J1939的ID全部是29bit,是扩展帧
所有数据是小端(低字节LSB在前,高字节MSB在后)
二、PDU数据单元
PUD构成:
29-27|26|25|24-17|16-9|8-1
–|:–:|:–:|:–:|:–:|–:
P |R/EDP|DP |PF |PS |SA
P:优先权,从最高0设置到最低7。
R/EDP:保留位/扩展数据页,以备后续开发使用。一般设置为0
DP:数据页,选择参数群描述的辅助页,从页0开始分配,一般设置为0
PF:PDU格式,它有两个功能:
- 确定PDU的格式,PDU分为两种格式PDU1和PDU2。
- 是确定数据域对应参数群编号的域。参数群编号不仅用来标识命令、数据、请求、确认和否定外,还可以标识CAN多包发送的信息
PS:PDU特定,它的定义取决于PDU的格式,如下图所示
目标地址用DA标识,全局目标地址(255)要求所有设备作为消息响应者做出监听和响应。
SA:源地址(知道这帧数据是从那个ECU发出的)
三、PGN
PGN:参数群编号
把相同参数放到同一个组中,PGN就是编号,知道PGN就知道这个数据单元包传输了什么数据
PGN = PF + PS
将PGN转为十进制 —— 查J1939-71标准,找到PGN的数据进行数据分解 —— 将数据段数据根据对应的SPN进行分解,分别找到每个SPN的解释 —— 根据每个SPN的分辨率、偏移量计算实际物理值。
四、SPN
SPN,特定参数,它就是用来表示具体的物理参数。比如SPN190=发动机转速、SPN513=实际发动机-转矩百分比。
一个SPN码代表了一个物理参数。
PGN所代表的的参数组,就是由一个个的SPN组成的。
例如PGN 61444=发送机控制器参数组,这个参数组里面包含了发动机转矩模式、驾驶员需求发动机-转矩百分比、实际发动机-转矩百分比、发动机转速等。即PGN 61444=SPN 899+SPN 512+SPN 513+SPN 190…
每个帧中数据的部分就是SPN的实际数据,假设PGN所代表的的参数组是由2个SPN构成的,第一个SPN为2字节,第二个SPN为3字节,那么这个帧数据的大小就是5字节