SAE J1939 协议简介(大结局)


因为应用层会根据不一样的行业和需求有所不一样,因此应用层的开发能够参考标准自行研究,关于这个系列,今天是最后一集,咱们来说讲 J1939的网络管理层(J1939/81)微信

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


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

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


控制器应用程序(CAController Application(CA) ci

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


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

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


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

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


把一个地址与惟一的名字相关联,也就把一个地址和一个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)的详细文档仔细琢磨研究。




本文分享自微信公众号 - 嵌入式程序猿(InterruptISR)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索