SAE 自推出CAN的高层协议,J1939标准后,在商用车,卡车,舰船,农机等上面应用非常广泛,标准要求每一个节点都有一个8字节的名字域,用来识别,其中有11位是用来表示制造商代码的,而这个代码是由SAE分配的,也就是说你如果要做带J1939的产片且要上市,必须从SAE哪里申请一个制造商代码,总共11位所以可以表示2048个代码,目前已经分配到
0是保留留作将来用的,在这个代码里可以找到很多有名的公司,像GMC 代码是27,摩托罗拉 41,伍德沃德 153,伍德沃德很多的发电机控制上用了J1939协议。如果是你自己学习可以赋予其中任何一个,也可以填写预留的值,但是如果是开发正式产品上市,一定要遵守规则,否则就可能招来麻烦。
在代码中就可以按照标准来定义名字的这些域
所以说熟悉标准对你的开发是多么的重要。这几个域要弄清楚,因为这个对网络管理很重要,在J1939-81中有明确清楚的描述,而代码中也要使用这些名字域用来做地址仲裁。还包含制造商唯一的信息,如产品串号代码,等。制造商代码表明谁对这个产品负责,且制造商代码不依赖于名字8个字节中的其他域,关于制造商代码的一些信息,总共11位,1位代表一个制造商,可以表示2048个,但是0目前是保留的.
关于网络管理的部分大家需要详细阅读J1939-81, 数据链路层需要阅读J1939-21,还有诊断曾等等,这些都需要阅读官方权威正版的文档,你才能开发出符合标准要求的协议栈。嵌入式程序猿公众号提供权威正版新版标准全部分档,正版的文档在SAE官方是非常贵的,全套大概需要700多美元,网上有翻译的,但是是比较老的版本,最近的两个版本里对结构做了不小的调整,如果需要J1939 或者CANOpen全部文档的,可以联系小猿,祝每一个工程师都开发出符合标准定义的协议栈和产品。