前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SAE J1939 协议简介(大结局)

SAE J1939 协议简介(大结局)

作者头像
用户1605515
发布2018-04-10 11:37:28
1.8K0
发布2018-04-10 11:37:28
举报
文章被收录于专栏:嵌入式程序猿嵌入式程序猿

由于应用层会根据不同的行业和需求有所不同,所以应用层的开发可以参考标准自行研究,关于这个系列,今天是最后一集,我们来讲讲 J1939的网络管理层(J1939/81)。

其实任何一种协议单看协议文件都是很枯燥的,但是其实协议软件的开发流程图就隐含在这协议描述中,多看几遍,多读几遍,多琢磨琢磨,在找些参考资料,相信你一定会理解协议中的需求,为你的后续开发扫平障碍。

肯定有人会问,总线上有那么多节点,总线上的那么多节点是如何管理和通信的呢?

网络管理层就是解决这些问题的。先来讲讲什么叫控制器应用程序。

控制器应用程序(CA)Controller Application(CA)

控制器为电控单元(ECU) 内执行一种特殊控制功能的软件和硬件。控制器里的软件称为“控制器应用程序”(CA)。一个ECU 可以执行一个或多个控制功能,因此可以包括一个或多个CA。为了能够在本标准网络上进行通信,每个CA都必须有一个地址以及一个和它联系在一起的名字。

网络管理层为唯一识别网络上的CA、管理地址分配和网络错误提供必要的定义和程序。

每个CA应能提供唯一的64位名字(8个字节).CA必须首先声明地址成功,然后才能向网络发送,如果CA按地址声明过程声明地址失败,必须按标准方式进行处理并向网络报告。在采用J1939标准的网络中,地址用于保证消息标识符的唯一性以及表明消息的源地址。地址声明消息包括地址和名字,用于把名字和网络中的某个地址关联在一起。每个CA在开始正常的网络通信之前,必须有一个名字并且成功声明了一个地址。名字有两个用途:

其一用于表示CA的功能描述(如发动机1,发动机2)

其二,作为一个数值,用于地址仲裁。

把一个地址与唯一的名字相关联,也就把一个地址和一个CA关联起来。ECU的制造商和网络集成商必须保证所有在一个网络上传输消息CA的名字是唯一的。网络上的每个CA都应有一个名字,这样 CA可以根据它的主要功能被唯一标识。当多个 CA试着声明同一个地址时,名字的所有8 个字节作为一个数值用于仲裁过程,这样进一步增强了标识符的唯一性,网络上的每个CA依次得到一个唯一的地址,能够正确地和其它ECU仲裁CAN数据帧。关于64位名字各个域的描述和使用,大家可以在开发的时候根据自己的系统或工程按照标准的要求填写,不用死记硬背这些域的定义.

总之一句话,用地址和名字来保证节点的唯一识别性。在发送任何应用层的消息之前,必须先进行地址声明,地址声明PGN(60928)。每个CA 在完成上电自检(POST)后,发送其它通信消息之前,要通过地址声明消息获得一个网络中唯一的源地址。成功声明源地址的过程:首先发送一个地址声明消息声明地址;其后没有收到竞争该地址的地址声明消息。地址在 0-127 和248-253 范围内,有单一地址的CA,可以在发送地址声明信息后立即开始正常的网络通信。对于其它的CA在使用地址之前要允许仲裁地址,因此要等到发送地址声明消息250ms 后才可以开始或恢复正常的网络通信。

对于接收到地址声明请求消息如何处理

接收到地址声明消息请求后,CA必须发送地址声明消息。消息包括:CA已经声明到并正在使用的地址、CA还没有声明过但它想声明的地址及空地址(CA已经声明过但没有成功).没有尝试地址声明的CA不能参与网络通信直至它尝试声明了一个源地址。CA在没有尝试地址声明之前不能发送不能声明地址消息或其它任何消息。

如果你一时半会不能理解这里的简介也没有关系,只要记住,每个节点必须用地址和名字来保持自己的唯一性。所以在上电后,必须先完成地址声明才能开始通信。在具体开发时候可以在找J1939(81)的详细文档仔细琢磨研究。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-04-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嵌入式程序猿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档