分享

让【思想】头疼的Motorola编码

 牛牵花 2021-08-31

【思想】所在的公司有一套完善CAN通讯的入网标准,比如使用Intel编码就是其中一条。大部分的供应商都会遵守客户入网标准,但是也有出现一些例外。最近【思想】就遇到这么一个,由于种种原因坚持使用Motorola编码拒绝修改成Intel,打不过他,只好迁就他(真·思想·没地位)。

【思想】之前从没接触过Motorola编码,花了大把时间在吃这口屎上!祸福相依,没想到,这个机会在Debug下,古德曼汽车工业旗下的各种基础开发工具,让它们全面支持Motorola格式编码!

区别

首先,我们来对比Motorola与【思想】比较熟悉Intel编码在协议上有什么不同。双方的区别主要体现为报文信号中的起始位置定义不同!先从Vector自带CANdb++Editor工具说起。

图片

在Message Signal窗口中ByteOrder选项中配置报文的字节序。配置的方式是很简单,但究其根本确实有天壤之别。

信号长度大于8个位

图片

为了演示方便,【思想】在一个报文中分别添加了Intel与Motorola格式长度为12bits的信号。注意:实际工程中千万别这么做!!!!报文中的lsb标记为读取的起始位,msb为读取的终止位。

图片

Intel格式比较好理解,起始位从第4位读取到第15位结束;

图片

Motorola格式就比较诡异了,起始位是第28位,读取从第28位起到该字节结束,既从第28位读取到第31位。然后从第16位读取到第23位。很拗口!容我喝口水!就好比我的位置火车的中间车上,到车尾餐车吃饭,然后又返回车前的卫生间上厕所( 这个比喻好像有点不太雅),及其蛋疼!

图片

所以在刚开始接触Motorola协议的时候就会有这样的奇葩现象,起始位是60长度12,那岂不是结束位会在72????

信号长度小于8个位

图片

【思想】继续往报文中分别添加了Intel与Motorola格式长度为6bits的信号,可以看到LBS与MBS标志是相同的,也就是说Intel与Motorola格式影响

图片

还没完,如果是上面这种极端情况(没有工程师会整出这样的CAN矩阵),即使长度小于8bits但是分属于两个字节的情况,读取时也会受到字节序的影响。

小结一下

Intel与Motorola什么情况下会影响我们的读取操作:

1、信号长度大于8bits;

2、信号长度小于8bits,但分属于2个Bytes的情况;

小心有坑!

接下来【思想】要嫌弃下CANdb++Editor的表里不如一了!

图片

如上图,定义的Motorola格式信号的起始位是34,信号长度是6

图片

DBC文件使用的是ASCII编码,可以通过记事本打开查看内容(DBC文件格式又是一个知识点,以后再找时间详细介绍一下)。起始位居然是39???

图片

可遇不可求的宝贝——DBC编辑工具

如果你跟【思想】一样,觉得CANdb++Editor非常不好用,可以试试古德曼汽车工业出品的DBC编辑工具

图片

或许对于大部分人来说这并不影响使用,但是如果大伙需要开发基于DBC的上位机或者生成工具的时候,这就非常蛋疼。这种表里不如一会造成开发者的困惑!!

嵌入式中怎么处理

那在嵌入式开发中如何处理摩托罗拉格式的CAN报文呢?

图片

大家不要心急,古德曼汽车工业正在酝酿一款CAN通讯C语言协议栈工具完美支持Intel与Motorola!敬请期待!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多