CAN2.0和J1939协议的关系

CAN2.0和J1939协议的关系转发自http://www.cankau.cn/support/help/can-vs-j1939.html很长时间没搞明白j1939与CAN2.0的关系,这篇文章让我明白了。CAN2.0是一种总线规范,是数据链路层的技术。J1939是SAE(美国汽车协会)定义的基于CAN总线的规范,目的是解决不同发动机厂商、不同ECU厂商的兼容性问题。1、J1939和CAN2.0的关系J1939是在CAN2.0…

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

转发自http://www.cankau.cn/support/help/can-vs-j1939.html

很长时间没搞明白j1939与CAN2.0的关系,这篇文章让我明白了。

CAN2.0是一种总线规范,是数据链路层的技术。J1939是SAE(美国汽车协会)定义的基于CAN总线的规范,目的是解决不同发动机厂商、不同ECU厂商的兼容性问题。

1、J1939和CAN2.0的关系

J1939是在CAN2.0B的基础上,对仲裁场部分的29位ID的重新解释;其它部分完全一样。
29位ID分为:3位的优先级、8位的PF(帧格式)、8位的PS(帧扩展)、8位的SA(源地址)、1位的DP(Data Page数据页)、1位的保留位。
其中1位的DP、8位的PF、8位的PS组成了PGN;
PGN是Parameter Group Number;是参数组列表。
在J1939中,将消息分为了PDU1和PDU2两种格式。
PDU1格式的消息发送给特定地址的ECU,地址用8位的PS记录;PDU2格式的消息则发送给所有的ECU,8位的PS用于扩展。
当PF的值在0-239时,表示该消息为PDU1格式,PS为DA(目地地址)。
当PF的值在240-255时,表示该消息为PDU2格式,PS为扩展地址。

2、J1939的物理特性:

总线最大长度为40M;最大支持30个节点;节点最大长度为1M;传输速率最大为250Kbps;3根线(CAN_H、CAN_L、GND)
J1939的分层:
J1939/11:物理层:物理介质、总线设计、长度、节点;
J1939/21:数据层:PGN信息、帧格式;
J1939/31:网络层;
J1939/71/73:应用层;信息分享、控制、广播、故障诊断;

3、PGN

PGN是Parameter Group Number的简称。J1939中最大支持(240+16×256)×2个PGN。
当消息为PDU1格式时,PGN=DP×256×256+PF;
当消息为PDU2格式时,PGN=DP×256×256+PF*256+PS;
在J1939中,消息的传递以参数组的形式,每个参数组中有若干参数,每个参数是一个SPN;

4、SPN

SPN:Suspent Parameter Number:特定的参数编号;例如:SPN 190表示发动机转速。

5、CAN2.0与J1939的关系、J1939与特定的厂商协议的关系

CAN2.0是一种总线规范,是数据链路层的技术。J1939是SAE(美国汽车协会)定义的基于CAN总线的规范,目的是解决不同发动机厂商、不同ECU厂商的兼容性问题。J1939定义了 一系列的PGN和SPN,这些PGN包含了发动机、变速器、车轴等汽车上各部件的信息;对参数的表示方法(状态和值)又定义了SLOT(Scaling比例、Limit界限、Offset偏移、Transfer传送)。ECU厂商都应该遵循这个规范。ECU模块的功能不同,厂商不同,在J1939的基础上,又表现出其多样性:支持或者不支持某些PGN、SPN和SLOT;新增了某些J1939未定义的PGN和SPN。

6、PDU消息包在CAN2.0上的拆包和重组

CAN2.0的数据场最多支持8字节的数据,如果PDU的数据小于等于8字节,1个PDU用1个CAN2.0帧传输即可;如果PDU的数据大于8字节,就需要在发送时进行拆包,在接收时进行重组。接收端如何识别是否需要重组以及怎么重组呢?J1939的做法是在拆包的情况下,将8字节的数据区的第一个字节用于表示拆包后的序号(1-255);因此,最长的PDU为255×7字节。

7、PDU的内容解析

PDU:Protocol Data Unit:协议数据单元。
在数据链路层CAN之上的就是PDU,包含了CAN2.0中仲裁场、控制场和数据场部分的内容。对J1939协议的解析其实就是对PDU的协议解析,先对接收到的包进行重组,构建一个完整的PDU包;再从PDU中数据包中提取出PGN和SPN对应的值。

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/144743.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【Linux 内核】Linux 内核源码结构 ( 下载 Linux 内核源码 | 使用 VSCode 阅读 Linux 内核源码 )[通俗易懂]

    【Linux 内核】Linux 内核源码结构 ( 下载 Linux 内核源码 | 使用 VSCode 阅读 Linux 内核源码 )[通俗易懂]一、下载Linux内核源码、二、使用VSCode阅读Linux内核源码

    2022年7月23日
    14
  • linux 修改mysql端口「建议收藏」

    linux 修改mysql端口「建议收藏」1)先关闭MySQL的进程2)更改端口vim/etc/my.cnf添加:port=33083)重启MySQL服务:servicemysqldrestart4)查看MySQL的端口号3.1.登录mysqlmysql-uroot-p3.2.查看当前端口号showglobalvariableslike‘port’;…

    2022年10月3日
    0
  • windows无法连接到打印机错误为0x000000011b_无法连接到打印机错误0000011b

    windows无法连接到打印机错误为0x000000011b_无法连接到打印机错误0000011b最近打印机连不上,查了下网上的资料,发现是Windows10的一个更新bug导致,但是按照网上的方法视乎重启后windows会强制更新,还是无法彻底解决问题。于是在继续查找到相关资料,现在将解决方法记录下来。注意:以下操作只需要在打印机连接的那台电脑上修改即可,其他电脑无需操作一、打开注册表按住win和R键,输入regedit打开注册表二、修改依次打开[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSe…

    2022年9月10日
    0
  • MySQL的JDBC连接

    MySQL的JDBC连接MySQL的JDBC连接MySQL的JDBC概念MySQL的JDBCJDBC添加数据封装连接工具更新数据和事务删除数据查询数据MySQL的JDBC概念JDBC是JavaDatabaseConnective的缩写,表示使用Java去连接数据库进行数据操作的过程MySQL的JDBC创建动态项目-以eclipse为例,首先要创建动态项目连接开发包(在www.mvnrepositor…

    2022年7月17日
    11
  • 手摸手教你写一个vue的toast弹窗[通俗易懂]

    手摸手教你写一个vue的toast弹窗[通俗易懂]前言:我们在项目开发的过程中,也许会在很多页面实现弹窗的消息,普通的方法就是在这每个界面写些原生js代码来控制弹窗效果,这样明显非常冗余。可通过引入组件的方式,可解决部分冗余的代码,但是每个要使用的界面都必须导入、注册、使用,这些代码还是比较冗余。通过插件的方式封装Toast,可解决每个页面重复导入、注册、使用的重复过程。一.封装Toast组件css自行设计二.Toast插件方式的封装在使用Toast前需要做相应的准备工作:添加一个index.js文件-里面定义一个对象-然后导

    2022年9月25日
    0
  • 转罗马字符_罗马字符是什么意思

    转罗马字符_罗马字符是什么意思publicclassNumToRoman{publicstaticstringToRomanNum(intpNum){string[,]a=newstring[3,10]{{“”,”I”,”II”,”III”,”IV”,”V”,”VI”,”VII”,”VIII”,

    2022年9月29日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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