Motorola、Intel CAN DBC 布局

                                    Motorola、Intel CAN DBC 布局


嵌入式软件开发中大多都与CAN打交道,但是不同项目CAN协议以及格式均会有一定的差异,软件如何处理才会更加便捷,更加模块化呢?本文主要描述不同模式下DBC的内部布局,后续会更新DBC文件解析;基于DBC文件自动生成代码。

一:Motorola 与Intel 格式浅析

1):Motorola 格式定义:

当一个信号的数据长度超过 1 个字节(8 位)或者数据长度不超过一个字节但是采用跨字节方式实

现时,该信号的高位(S_msb)将被放在低字节(MSB)的高位,信号的低位(S_lsb)将被放在高字节

(LSB)的低位。

2):Intel 格式定义:

当一个信号的数据长度超过1 个字节(8 位)或者数据长度不超过一个字节但是采用跨字节方式实

现时,该信号的高位(S_msb)将被放在高字节(MSB)的高位,信号的低位(S_lsb)将被放在低字节

(LSB)的低位。

分析如下:

  • 定义A信号:起始位:3,长度12;大端格式
Motorola 格式:A

假设A信号数据为0x123,如何排布?【高字节对应Msb原则】

Byte 0: * * * *  0 0 0 1

Byte 1:0 0 1 0 0 0 1 1

  • 定义B信号:起始位:12,长度8;小端:
Intel 格式:B

假设B信号数据为0x35,如何排布?【高字节对应Lsb原则】

Byte 1:0 1 0 1 * * * * 

Byte 1:* * * * 0 0 1 1

 

总结:仅当信号存在跨字节的情况,才考虑这种大端小端问题;大端格式:高字节对应Msb;小端:高字节对应Lsb;

大家可以看下Motorola、Intel CAN差异相关文档,这里不细述!

 

个人觉得:作为开发人员仅仅知道大端小端差别是不够的,还要知道不同模式下CAN内部的布局,便于软件CAN解析及开发!

 

二:基于大端小端格式的CAN 布局

按照上述规则,如果要你定义一个信号 C【起始位 44;长度10】,分别以Motorola、Intel格式在DBC中布局:

Motorola

Tip:感谢各位大神的反馈,上图关于 Motorola格式的信号:起始位51,长度10;上面表述的存在问题!

 

Intel

 

此时会发现大端,小端格式下CAN布局是不一致的,如此布局的原理是什么?我自己总结了一下,还是挺好用的,嘻嘻.

        1):基于不同的模式定义起始位为Msb还是Lsb;【大端:定义为Msb;小端:定义为Lsb】

        2):明确一个Byte里箭头走向“

        3):Intel格式:Lsb位可以理解为该Byte内最小的位,所以该信号只能占Lsb左边的位;当跨字节时,考虑上下箭头走向是否冲突,即跨字节时从右向左逐一分布位,直至信号长度符合预期;

       4):Motorola格式:Msb位可以理解为该Byte内最大的位,所以该信号只能占Lsb右边的位;当跨字节时,考虑上下箭头走向是否冲突,即跨字节时从左向右逐一分布位,直至信号长度符合预期;

 

发布了13 篇原创文章 · 获赞 35 · 访问量 4万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览