今天我们来讲讲J1939的数据链路层,熟悉数据链路层是开发任何一种协议软件的基础,数据链路层中的协议数据单元(PDU)格式是非常重要的。
P 优先级
这三位仅在总线传输中用来优化消息延迟,接收机必须对其做全局屏蔽(即忽略)。消息优先级可从最高 0设置到最低 7。所有控制消息的缺省优先级是 3。其他所有信息、专用、请求和 ACK 消息的缺省优先级是 6。当定义新的参数组编号,或总线上通信量变化时,优先级
可以升高或降低。当消息被添加到应用层,将给出一个推荐的优先级。 OEM 可以对网络做相应调整,优先级域应当是可重编程的。
R 保留位
保留此位以备今后开发使用。不能将此位与 CAN 保留位混淆。所有消息应在传输中将 SAE 保留位置 0。今后新的定义可能扩展 PDU 格式域,定义新的 PDU 格式,扩展优先级段或增加地址空间
DP 数据页
数据页位选择参数组描述的辅助页。在分配页一的 PGN 之前,先分配完页零的可用 PGN。
PF PDU 格式
PF 域,8位。确定 PDU 的格式,也是确定数据域对应参数组编号的域之一。参数组编号用来确定或标识命令、数据、请求、确认和否定等参数组编号所确定或标识的信息需要一个或多个 CAN 数据帧进行通信。若消息长于 8 字节,必须将消息分包发送。如消息长小等于 8 字节,则使用单个 CAN 数据帧。
PS 特定PDU
特定 PDU 是一个 8 位域,它的定义取决于 PDU 格式,根据 PDU 格式它可能是目标地址或者组扩展。 若 PDU 格式( PF)域的值小于 240,特定 PDU 域是目标地址。
SA 源地址
这个域定义了消息发送的特定目标地址。注意,对于任何设备,如果源地址与接收到消息的目标地址不相同应忽略此消息。所有设备作为消息响应者应对全局目标地址( 255)作出监听和响应。
Data 数据域
如果给定参数组用于表示不多于 8 字节的数据时,
可使用 CAN 数据帧全部的 8 个字节。通常,建议对所有的参数组进行分配时,将 8 个字节分配或保留以备今后扩展之用。这样可以很容易地添加新参数,并确保与只定义了部分数据域的旧版本的兼容。当数据长度不多于 8 字节时,将预定义的参数组数据长度值赋予 CAN 数据长度码( DLC);否则,如果参数组的数据长度大于 8,将 CAN 数据长度码( DLC)赋值为 8。
长度从 9 字节到 1785 字节的数据
如果一个给定的参数组数据长度为 9 至 1785 字节时,数据通信是通过多个 CAN 数据帧实现的。因此,用“多包“来描述这种类型的参数组编号。如果参数组的定义为多包,在少数特定场合只传输少于 9 字节的数据时,参数组以单帧 CAN 数据帧发送,其中 DLC 置 8。如果某特定参数组传输 9 字节或者更多字节,将使用“传输协议功能”。通过传输协议功能的连接管理能力来建立和关闭多包参数组的通信。传输协议功能的数据传输能力,通过传送一系列包含分包数据的 CAN 数据帧(包),能独自实现数据通信。另外,传输协议功能还提供了对于目标地址特定的传输的流控制和握手功能。所有与特定多包应答相关的 CAN 数据帧必须置 DLC 为 8。
SAE J1939 消息类型:
J1939 的消息类型总共有 命令,请求,确认/响应,组功能
了解了数据链路层的结构后,那么在应用中,是如何解析一个参数呢?
PGN(Parameters Group Number)就是解决这一问题的,那么PGN的格式以及构成可以通过下图一目了然,其中 61184 和65280~65535是留给用户自定义的。