导航菜单
首页 >  CAN总线之CAN的报文格式  > 车载测试系列:CAN报文之Intel格式与Motorola格式

车载测试系列:CAN报文之Intel格式与Motorola格式

CAN通讯矩阵中关于信号排列格式Byte Order的字段,其作用为:描述字节排布顺序。

取值包含:Intel、Motorola LSB、Motorola MSB、Motorola sequential。

LSB:least significant byte(CAN某个信号的最低字节)

MSB:most significant byte(CAN某个信号的最⾼字节)

lsb:least significant bit(CAN某个信号中某个字节的最低有效位)

msb:most significant bit(CAN某个信号中某个字节的最⾼有效位)

信号的起始位就是信号的最低位。主机厂在定义整车CAN总线通信矩阵时,每一个信号都从其最低位开始填写。

车载测试系列:CAN报文之Intel格式与Motorola格式_数据

 

什么是大端小端

在计算机内存/硬盘中,数据是以字节为单位的,二进制在内存中存储时有2种分布方式:

高字节对应低地址(大端模式big endian)、高字节对应高地址(小段模式little endian)。

大小端均指字节顺序,非位顺序。有些CPU公司用大端,譬如51单片机,有些公司用小端,如ARM。用数据0x12345678来做演示,要存入32位系统的内存地址为0000~0003,,首先明确,这个数据的最高有效字节是12,最低是78,低地址是0000,高地址是0003,大端小端存储方式分别如下:

| 地址 | 0000 | 0001 | 0002 | 0003 |

|–|–|–|–|–|–|

| 大端 | 12 | 34 | 56 | 78 |

| 小端 | 78 | 56 | 34 | 12 |

车载测试系列:CAN报文之Intel格式与Motorola格式_数据_02

 

车载测试系列:CAN报文之Intel格式与Motorola格式_数据_03

 

在串口等串行通信中,一次只能发送一个字节,比如要发一个int类型的数据,有4个字节,是按照:byte0, byte1, byte2, byte3,还是按照byte3, byte2, byte1, byte0,收发必须按照同样的字节顺序来通信。

Motorola格式和Intel格式

1. 数据在CAN报文中存放顺序

CAN每个报⽂可包含8Byte的字节数据域,在报⽂内数据的字节序和位序如下:

字节序:Byte0、Byte1、Byte2、Byte3、Byte4、Byte5、Byte6、Byte7

位序:bit7、bit6、bit5、bit4、bit3、bit2、bit1、bit0

2. CAN报文数据域的传输顺序

字节顺序:先传Byte0,最后传Byte7;

字节内位序:先传bit7,最后传bit0;

关于CAN报文,用Motorola,还是Intel格式,只在信号数据跨字节解析时,才有区别。单个字节数据没有区别。

Intel格式即小端,MSB存放在高字节单元,反映到矩阵图中就是以起始位为原点,自上而下填充。Intel格式,MSB在LSB下面。

车载测试系列:CAN报文之Intel格式与Motorola格式_有效位_04

 

Motorola格式即大端,MSB存放在低字节单元,反映到矩阵图中就是以起始位为原点,自下而上填充。Motorola格式,MSB在LSB上面。

车载测试系列:CAN报文之Intel格式与Motorola格式_有效位_05

 

Motorola格式和Intel格式案例分析

信号值:0xB79,⼆进制:101101111001

信号长度:12bit

字节顺序和位顺序如下表所示:Byte0为低字节,Byte7为高地址

什么是高低字节?比如说对于0xFF22来说,FF就叫做数据的高字节部分,22就是低字节部分。

车载测试系列:CAN报文之Intel格式与Motorola格式_数据_06

 

Motorola_LSB和Motorola_MSB的区别是某个信号起始位置确定的情况下,在报⽂中的映射空间不⼀样,映射顺序⼀样(低字节放在⾼字节,⾼字节放在低地址,位序都是从右到左是b0到b7)。

Motorola Forward MSB(大端在前):矩阵文档中起始位置为MSB的起始位34,往高字节借位。

车载测试系列:CAN报文之Intel格式与Motorola格式_有效位_07

 

Motorola Forward LSB(小端在前):矩阵文档中起始位置为LSB的起始位34,往低字节借位。

车载测试系列:CAN报文之Intel格式与Motorola格式_软件测试_08

 

小结:

当信号在一个字节内实现(信号不跨字节)时,Intel模式和Motorola模式的信号字节顺序,完全一样:

信号的高位(MSB)放在该字节的高位,信号的低位(LSB)放在该字节的低位。

当信号在多个字节内实现(信号跨字节)时,Intel模式和Motorola模式的信号字节顺序,明显不同:

Intel模式:信号的高位(MSB)放在高字节的高位,信号的低位(LSB)放在低字节的低位;Motorola模式:信号的高位(MSB)放在低字节的高位,信号的低位(LSB)放在高字节的低位。

俗称:小端模式“高在后,低在前”;大端模式“高在前,低在后”。

另:不管是Intel模式,还是Motorola模式,起始位都该信号的低位(LSB)。

作者: ​​千里和他的软件测试​​

相关推荐: