在简单介绍完J1939协议后,今天咱们来说讲J1939的数据链路层,熟悉数据链路层是开发任何一种协议软件的基础,数据链路层中的协议数据单元(PDU)格式是很是重要的。
web
SAE J1939 PDU(Protocol Data Unit)编程
P 优先级 数组
这三位仅在总线传输中用来优化消息延迟,接收机必须对其作全局屏蔽(即忽略)。消息优先级可从最高 0设置到最低 7。全部控制消息的缺省优先级是 3。其余全部信息、专用、请求和 ACK 消息的缺省优先级是 6。当定义新的参数组编号,或总线上通讯量变化时,优先级
能够升高或下降。当消息被添加到应用层,将给出一个推荐的优先级。 OEM 能够对网络作相应调整,优先级域应当是可重编程的。
微信
R 保留位网络
保留此位以备从此开发使用。不能将此位与 CAN 保留位混淆。全部消息应在传输中将 SAE 保留位置 0。从此新的定义可能扩展 PDU 格式域,定义新的 PDU 格式,扩展优先级段或增长地址空间
优化
DP 数据页 spa
数据页位选择参数组描述的辅助页。在分配页一的 PGN 以前,先分配完页零的可用 PGN。
.net
PF PDU 格式orm
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是留给用户自定义的。
本文分享自微信公众号 - 嵌入式程序猿(InterruptISR)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。