【车载开发系列】CAN报文排列格式–Motorola_MSB、Motorola_LSB、Intel
CAN报文排列格式--Motorola_MSB、Motorola_LSB、Intel
一. 引言
汽车电子中最常用的CAN报文排列格式就是Motorola与Intel两种了,其中Motorola又分为MSB(Most Significant bit-- 最高有效位)与LSB(Least Significant bit-- 最低有效位),两者的规则与标准就是对应的两家公司大力推广的技术规范,Motorola着重于大端字节序,而Intel着重于小端字节序。这两套标准可以说是各有优劣,大端字节序更适配一些网络协议且可读性高,小端字节序可以提高处理器的性能且在内存访问时更为方便。最后两者谁也没有一统江湖,而是二分了天下。
二. 大端与小端
因为Intel与Motorola的字节排列规则与大小端的字节序紧密相关,所以要想了解这两者的具体规则,得先知道计算机概念中的大端与小端的概念。如果用一句话概括的话那就是大端是对于一个多字节数据,高位字节存储在内存的低地址,而低位字节存储在内存的高地址;小端就是高位字节 存储在内存的高地址,而低位字节存储在内存的低地址。
| 0x12345678 | 大端 | 小端 |
|---|---|---|
| 地址0 | 0x12 | 0x78 |
| 地址1 | 0x34 | 0x56 |
| 地址2 | 0x56 | 0x34 |
| 地址3 | 0x78 | 0x12 |
三. LSB与MSB
LSB(Least Significant Bit) 和 MSB(Most Significant Bit) 是计算机科学中常用的术语,用于描述一个数字或数据单位中的位(bit)顺序。
MSB 是最重要的位,通常指的是一个二进制数中最高位。在一个二进制数中,MSB是表示数值大小的 最重要的位,即对数值大小影响最大的位。它通常位于数值的最左边(对于普通的二进制表示)。
LSB是最不重要的位,通常指的是一个二进制数中最低位。在一个二进制数中,LSB是表示数值大小的最不重要的位,即对数值大小影响最小的位。它通常位于数值的最右边。
| 0x1234位顺序 | 二进制 | 说明 |
|---|---|---|
| - | 0001 | 最左边0就是MSB |
| - | 0010 | - |
| - | 0011 | - |
| - | 0100 | 最右边0就是LSB |

以十六进制数0xB7A来举例,它的排布如下图所示,它长度是14,前面先需要补两个0,然后二进制数表示为00 1011 0111 1010

此时
Motorola LSB:起始位是26,长度是14
Motorola MSB:起始位是23,长度是14
由此可见,Motorola MSB和LSB格式除了占位不一样二进制数填入顺序是一样的,只是起始位不一样。(下图的箭头代表了LSB格式)

以同样的十六进制0xB7A来举例,起始位为26开始,Intel(小端)排列的话,就会变成以下的样子。

它的排布顺序是由右向左,由上往下。

通过上面的介绍我们都知道了Motorola分为LSB与MSB,加上Intel一共是三中数据的排列规则。
四. 总结
| 报文格式 | 说明 | 占位 | 二进制数 |
|---|---|---|---|
| Intel格式 | 8字节占位从后往前,多字节占位从上到下,填入二进制数从后往前,从上到下 | ↓← | ↓← |
| MSB格式 | 8字节占位从前往后,多字节占位从上到下,填入二进制数从后往前,从下到上 | →↓ | ↑← |
| LSB格式 | 8字节占位从后往前,多字节占位从下到上,填入二进制数从后往前,从下到上 | ↑← | ↑← |

249

被折叠的 条评论
为什么被折叠?



