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总线通信矩阵时,每一个信号都从其最低位开始填写。
什么是大端小端
在计算机内存/硬盘中,数据是以字节为单位的,二进制在内存中存储时有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 |
在串口等串行通信中,一次只能发送一个字节,比如要发一个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下面。
Motorola格式即大端,MSB存放在低字节单元,反映到矩阵图中就是以起始位为原点,自下而上填充。Motorola格式,MSB在LSB上面。
Motorola格式和Intel格式案例分析
信号值:0xB79,⼆进制:101101111001
信号长度:12bit
字节顺序和位顺序如下表所示:Byte0为低字节,Byte7为高地址
什么是高低字节?
比如说对于0xFF22来说,FF就叫做数据的高字节部分,22就是低字节部分。
Motorola_LSB和Motorola_MSB的区别是某个信号起始位置确定的情况下,在报⽂中的映射空间不⼀样,映射顺序⼀样(低字节放在⾼字节,⾼字节放在低地址,位序都是从右到左是b0到b7)。
Motorola Forward MSB(大端在前):
矩阵文档中起始位置为MSB的起始位34,往高字节借位。
Motorola Forward LSB(小端在前):
矩阵文档中起始位置为LSB的起始位34,往低字节借位。
小结:
当信号在一个字节内实现(信号不跨字节)时,Intel模式和Motorola模式的信号字节顺序,完全一样:
- 信号的高位(MSB)放在该字节的高位,信号的低位(LSB)放在该字节的低位。
当信号在多个字节内实现(信号跨字节)时,Intel模式和Motorola模式的信号字节顺序,明显不同:
- Intel模式:信号的高位(MSB)放在高字节的高位,信号的低位(LSB)放在低字节的低位;
- Motorola模式:信号的高位(MSB)放在低字节的高位,信号的低位(LSB)放在高字节的低位。
俗称:小端模式“高在后,低在前”;大端模式“高在前,低在后”。
另:不管是Intel模式,还是Motorola模式,起始位都该信号的低位(LSB)。
标签:Motorola,LSB,Intel,信号,格式,MSB,字节 From: https://www.cnblogs.com/laoluoits/p/16943994.html