SAE J1939
- 参考&春风有信大佬的博客
J1939/11物理层
1. 物理介质为屏蔽双绞线;
2. 传输速率为250Kbps;
3. 同一网络上最大子系统数为30个;
4. 最大传输线长度为40m;
5. 物理层还定义了数据的物理特性及总线的电气连接特性。
J1939/21数据链路层
-
J1939只使用CAN2.0B中的扩展帧,共29位标识符
-
CAN报文基于ID,1939基于PGN
-
重新解释了29位标识符,分解为
学习完所有的在这来个小总结
-
CAN报文基于ID,J1939基于PGN
- J1939将ID划分为各种段,并将其中某些段组成PGN
-
PDU和PGN
- PGN是 J1939 标准中的唯一帧标识符,用于引用将保留位®、数据页(DP)、PDU格式(PF)和 PDU特定字段(PS)的值组合成单个 18 位值。
- PDU是PF段+PS段,PF段标识PDU格式,PS段是在此格式下的参数值
- 看图应该是这种解释,但我看有些厂家的发动机手册,一般写PGN就是指代PDU
- 发动机厂商,实际将ID分为了三个部分:(优先级+R+DP) + PDU + 源地址
- 例如,最常见的0x0CF00400,0C为(优先级+R+DP),F004为PDU,00为源地址
- 0C二进制
00001100
,由于是29位,实际只有01100
有效,即优先级011
为3,保留位为0
,DP为0
,一般DP都为0
- 0C二进制
-
P占据3bit,代表优先级,一般控制报文都是011
-
R为保留位,一般都设置为0
-
DP为1,代表PGN的第一页。DP为0,代表PGN的第0页。
-
PF用于标识PGN的类型,以0xF0为分界线
-
如果PF <= 0xF0,则PS表示为目标地址( Destination Address, DA),否则PS表示为组扩展(Group Extension,GE)。
- 这个没啥用,
PGN个数计算:(240 + (16 * 256) * 2) = 8672。其中,240是数据页中的PF<240时,GE恒等于0,所以数目是240。16是数据页中的PF>240时,数值从240到255之间,共16个数。256是指GE(等于PS)的取值个数,具体是从0到255之间。2表示数据页(DP和R组成),分为页0和页1。
- 这个没啥用,
-
举例: 0x0CF00400,0C的二进制为 000 011 00,其中最高三位为填充功能,因为ID为29位,但ID只能为28或32位。其中0b011为优先级P段,0b00为R段和DP段,0xF0为PF段为8位,0x04为PS段(目标地址)为8位,0x00为SA段(源地址)为8位
-
所以PGN为0b00+0xF0+0x04 = 0xF004,根据PGN查询J1939标准文档,标准文档定义了数据帧的格式。
-
-
帧起始(SOF)
- 1bit,显性电平,与CAN相同
-
优先级(P)
- 3bit,仲裁的优先级,也用于优化发送数据的报文延迟
-
扩展数据页EDP(R)
- 保留位,设置为0
-
数据页(DP)
-
替换远程请求Substitute Remote Request (SRR)
- 只存在于扩展帧,SRR为隐性电平
-
标识符扩展位(IDE)
- IDE为1,表示扩展帧
-
PDU格式(PF)
- 确定PDU格式,两种方式计算得到的PGN不同
-
PDU特定域(PS)
- 占8bit,PS的定义取决于PF, 它可能表示目标地址( Destination Address, DA),可能表示组扩展(Group Extension,GE), 如果PF < 0xF0则表示为DA,否则表示为GE。
-
目标地址(DA)
-
占8bit,DA是报文的目标地址,除目标地址的设备外,其他设备应该忽略此报文。
-
如果目标地址为0xFF,则表示为全局地址,此时所有设备都应该监听此报文并在收到报文后做出响应。
-
-
组扩展(GE)
-
组扩展与PDU 格式域的低四位(注意:当PDU 格式域最高四位被置1,说明PS 域是组扩展)规定了每个数据页4096 个参数组。
-
这4096个参数组仅使用PDU2格式可用。此外,在每个数据页中提供了240个参数组,仅供PDU1格式使用。总共有8672个参数组可以使用当前可用的两个数据页面来定义
-
-
源地址(SA)
- 占8bit,发送报文的设备的地址,网络上只能有一个具有给定源地址的设备。
-
RTR,控制段,CRC段,ACK段,帧结束段与CAN保持一致
-
参数组编号(PGN)
-
是 J1939 标准中的唯一帧标识符,用于引用将保留位®、数据页(DP)、PDU格式(PF)和 PDU特定字段(PS)的值组合成单个 18 位值。
-
参数组还包含了每个报文的 8 字节 CAN 数据字段中的参数分配、重复率和优先级。PGN是J1939标准中唯一的帧标识符
-
全局参数组编号
- 此类PGN识别广播(发送给所有人)的参数组。这里,PDU格式(PF) >= 240,并且PDU特定字段(PS)是组扩展。
-
特定参数组编号
- 这些用于对等发送(到特定设备)的参数组。如果PDU格式(PF) <= 239,并且PDU特定字段(PS)设置为0,则无论两个 PGN 的类型如何, PDU 格式、PDU 特定字段、数据页和扩展数据页都用于识别相应的参数组。
-
Protocol Data Unit (PDU) Formats 协议数据单元格式
- 定义了两种PDU格式:
PDU1格式(PS =目标地址)和PDU2格式(PS =组扩展),PDU1格式允许将CAN数据帧定向到一个特定的目标地址(设备);
PDU2格式只能通信不特定于目标的can数据帧。 - 建立了两种单独的PDU格式,是为了提供更多可能的参数组号组合,同时仍然提供特定于目的地的通信。已分配了专有参数组定义,以便这两种PDU格式都可用于专有通信。为专有通信建立了一种标准化的方法,以防止在标识符使用中可能出现的冲突。
- PDU1
- 此格式允许将适用的参数组发送到特定的或全局目标。PDU特定字段包含一个目标地址。PDU1格式消息可以被请求或发送。
PDU1格式消息由PF字段确定。当PF字段值为0到239时,消息为PDU1格式。PDU1消息的格式如上图所示。另请参见下图,PDU1格式。
- 此格式允许将适用的参数组发送到特定的或全局目标。PDU特定字段包含一个目标地址。PDU1格式消息可以被请求或发送。
- PDU2
- 此格式只能用于将参数组作为全局消息进行通信。PDU2格式消息可以被请求或发送。
- 在分配PGN时选择PDU2格式,防止PGN无法被定向到特定的目的地。PDU特定项包含一个组扩展
PDU总结
- PDU1和PDU2格式下PGN的总数为:( 240+(16*256))*2 = 8672
- PDU1格式主要分配给必须指明目标地址的PGNs,数量有限;PDU2格式下的PGNs不能用于必须指明目标地址的情况。大部分PGNs都定义在PDU2段。
- 为了保证实时性,报文更新速率小于100ms时不允许多包发送。
- PDU1和PDU2格式下均支持单包报文和多包报文。无论是PDU1还是PDU2格式,其前半段PGNs标识的报文更新速率小于100ms,不允许多包发送;后前半段PGNs标识的报文更新速率大于100ms,允许多包发送。
- 目前支持五种类型消息,分别为:命令、请求、广播/响应、确认和群扩展。特定消息类型由其分配的参数群编号识别。
- RTR位(在CAN协议远程帧中定义)不可用于隐性状 态 ( 逻 辑 1 ) 。
- 因 此 , 远 程 传 输 请 求( RTR=1)在SAE J1939中不适用。