DBC 中的 Intel 与 Motorola 格式

在使用 CAN DBC 文件进行通信开发时,我们经常会遇到两种不同的字节顺序 ——Intel 和 Motorola。这两种字节顺序都很常见,但通常在一个矩阵中只会选用其中一种。最近看了点相关资料,一起和大家分享一下。在深入了解字节顺序之前,我们需要先理解 LSB 和 MSB 的概念。

LSB:Least Significant Bit,最低有效位,二进制中代表最低值的比特位,该位对数值的影响最小。

MSB:Most Significant Bit,最高有效位,二进制中代表最高值的比特位,该对数值的影响最大。

例如,在二进制的 [MSB] 1001 [LSB](十进制的9)中,最左边的 “1” 即是 MSB对数值影响最大,从 1 到 9 的变化幅度。而最右边的 1 是 LSB 因为仅会让数值产生8到9的变化。

Intel 与 Motorola

Motorola 与 Intel 是 DBC 中常用的两种字节顺序。当 CAN 报文的信号不超过一个字节(8 bit)时,两种格式没有区别;当超过一个字节时,两种格式就有所不同。其中,Motorola 采用“大端”格式,而 Intel 采用“小端”格式。

DBC 中的 Intel 与 Motorola 格式:原文配图 1

Intel 与 Motorola 格式的共同点是,在两种格式中,Startbit 都为 lsb(最低有效位),Endbit 都为 Msb(最高有效位)。区别在于,Intel 格式下 Endbit = Startbit + Length而 Motorola 格式下,Endbit 的位置取决于信号是否跨字节。如果信号未跨字节,Motorola 格式的Endbit 计算方式与 Intel 相同;但如果信号跨字节,计算方式则有所不同。

DBC 中的 Intel 与 Motorola 格式:原文配图 2
DBC 中的 Intel 与 Motorola 格式:原文配图 3

如果信号有跨字节,Motorola 格式的排列方式将占据前一个字节的位置,如果前一个字节还不够排满,将会继续占用前面的字节。

DBC 中的 Intel 与 Motorola 格式:原文配图 4

例如把 0x87654 这个数以如上的 DBC 排列发出去,得到的结果就是:87 65 40 00 54 76 08 00。

References

[1] CAN总线常见的两种编码格式(Intel/Motorola) by isAndyWu

联系我:

✍🏻 知 乎:@META👬 公众号:@汽车ECU设计

关于我:

教育 🎓 关山口职业技术学院工作 💻 Tier1 软件工程师,✏ 业余写手爱好 🏀 老年东契奇,🏎 红牛首席换胎工准则 🪟 极简主义,🍅 番茄工作法

【汽车ECU设计】汽车总线文章合集

【汽车ECU设计】Autosar文章合集

【汽车ECU设计】第151~200期目录

【汽车ECU设计】第101~150期目录

【汽车ECU设计】第51~100期目录

【汽车ECU设计】第1~50期目录

车载通讯1 汽车电子2

← 返回文章列表