CAN协议 J1939「建议收藏」

CAN协议 J1939「建议收藏」转自:http://blog.sina.com.cn/s/blog_bf97bd7e0102wl2y.html这几天在公司看了SAE推行的J1939标准(SAE:美国汽车工程协会),这里整理下学习要点,主要包含以下几个协议:物理层SAEJ1939-11(未看)数据链路层SAEJ1939-21网络层SAEJ1939-31(未看)应用层SAEJ1939-…

大家好,又见面了,我是你们的朋友全栈君。

转自:http://blog.sina.com.cn/s/blog_bf97bd7e0102wl2y.html

这几天在公司看了SAE推行的 J1939标准(SAE:美国汽车工程协会),这里整理下学习要点,主要包含以下几个协议:

物理层 SAE  J1939-11(未看)

数据链路层  SAE  J1939-21

网络层 SAE  J1939-31(未看)

应用层 SAE  J1939-71

故障诊断 SAE  J1939-73

网络管理层 SAE  J1939-81

 

下面主要介绍数据链路层和应用层:

 

介绍前,首先介绍下缩写:

PGN:参数组(群)编号           

PDU:协议数据单元

SPN:可疑参数编号

SOF:帧起始位

SRR:代用远程请求

RTR:远程传输请求

IDE:标识符扩展为

DLC:数据长度码

 

 

J1939-21 数据链路层:

数据链路层:为物理链接之间提供一种可靠的数据传输(发送CAN数据帧必需的同步、出错控制、顺序控制和流控制)。

 

有几个概念先介绍下:

帧 (Frame):组成一个完整信息的一系列有序的数据位;

其中CAN帧以帧起始(SOF)开始,以帧结束(EOF)结尾;

标准帧:定义为11位标识符

扩展帧:定义为29位标识符

报文(Message):一个或多个具有相同参数组编号(PGN)的CAN数据帧;(一个或多个

CAN数据帧具有相 同PGN号,就是报文)

包(Packet):一个单一的CAN数据帧就是1个包;(一个报文包含参数组的长度小于等

于8字节,也称为包)

多包报文:当具有相同参数组编号(PGN)的所有数据需要使用多个CAN数据帧来传输时使

用的一种J1939报 文。(每个CAN数据帧拥有相同的标识符,但每个包中数据不同)

 

协议数据单元(PDU):

格式如下图:

 

优先级

扩展数据页(保留)

数据页位

PDU格式

PDU特定域

源地址

数据域

P

R

DP

PF

PS

SA

DATA

3

1

1

8

8

8

8Byte

                 

其中,

优先级(P):3位用来表示优先级范围,所有控制 消息的缺省值是3(0112),其他所有信息、专用、请求和ACK的缺省优先级是6(1102)

数据页位(DP):数据页位选择参数群描述的辅助页。在分配页一的PGN之前,先分配完页零的可用PGN。

数据扩展页(EDP)和数据页(P)关系:

扩展数据页位

(EDP)

数据页位

(DP)

功能描述

0

0

SAE J1939 第0页PGN

0

1

SAE J1939 第1页PGN

1

0

SAE J1939 保留

1

1

定义位ISO 15765-3报文

 

 

PDU格式(PF)和PDU特定域(PS)的关系:

PDU格式(PF)

PDU格式

PDU特定域(PS)

PF<240

PDU1格式

PS是目标地址(DA)

PF = 240-255

PDU2格式

PS是组扩展(GE)值

 

PDU1和PDU2时的参数组编号(PGN)数目为:

EDP 

 

DP

PF

PS 

 

PDU1时参数组编号

0

0或者1

0-239

目标地址

 2X240(PF的值)=480

 

EDP 

DP

PF 

PS 

PDU2时参数组编号

0或者1 

 

240-255共16个数

组扩展值0-255

(共256个数)

2X16X256=8192

 

其中PGN计算公式为:

    PGN = DP<<|PF<<8|PS;

例:数据页位:0,PDU格式:235,特定PDU段:目标地址(对于TP.CM_BAM数据传送使用全局地址(DA=255))(对于RTS/CTS数据传送不允许用全局地址)

 

         则PGN = 235*256+0 = 60160(0xEB0016)

                            11101011<<8|0

 

 

多包发送:

BAM:广播通知/公告消息

DT:数据传送消息

多包数据发送拆装与重组:大于8字节消息发送,必须拆分,

拆分原则:数据域的首字节定义为数据包序列编号:1-255;

            最大拆分数据长度是255包*7字节/包 = 1785个字节

其中,RTS(发送者),请求发送

      CTS(响应者),准备发送

广播数据传送次序如下图:

字节:

1

控制字节=32,广播公告消息(BAM)

 

2,3

整个消息大小,字节数目

 

4

全部数据包的数目

 

5

保留给SAE设定使用,该字节应设为FF16

 

6-8

所装载数据的参数群编号

而数据传送消息格式(TP.DT):

    Byte:       1           序列号 1-255(1Byte)

            2-8         分组数据(7 Bytes)

                      注意多包参数组的最后一个包可能需要不到8个字节数据,

多余的字节填充0xff16   

 

故障诊断

故障诊断代码DTC构成:

    a、可以参数编号(SPN)

    b、故障模式标志(FMI)

    c、发生次数(OC)

    d、可以参数标号的转换方式(CM)

其中,DM1:当前故障码(正在发送的所有故障)

    DM2:历史故障码 

DTC由四个字节构成 

DTC

字节3

SPN低8位

(第8位为最高有效位)

字节4

SPN第2字节

(第8位为最高有效位)

字节5

SPN高3位(第8位为最高有效位)

FMI低5位(第5位为最高有效位)

字节6

SPN

FMI

CM

OC

8bit

3bit

5bit

1bit

7bit

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/140896.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号