大端 vs 小端
Motorola vs Intel
前两篇文章我们介绍了大端小端的概念和在车内通信中的应用,今天我们来具体介绍大端和小端,也就是Motorola和Intel两个格式在信号排布时候的区别。
✦ + +
基础规则
上篇文章中提到了,Intel和Motorola一共有六种排列格式:
Intel 有两种:
Intel standard
Intel sequential
Motorola 有四种:
Motorola forward LSB
Motorola forward MSB
Motorola sequential
Motorola backward
Intel为小端,低地址(序号小的Byte)存放最低有效字节(LSByte),高地址(序号大的Byte)存放最高有效字节(MSByte);Motorola为大端,低地址存放最高有效字节(MSByte),高地址存放最低有效字节(LSByte)。
为了方便阅读,本文中最高有效字节(MSByte)统称为高字节,最低有效字节(LSByte)统称为低字节;同理,最高有效位(MSBit)统称为高位,最低有效位统称为低位(LSBit),详细含义在大小端的第一篇文章《 大端 vs 小端 —— 基础原理 》中有过介绍,这里就不过多赘述了。
如果要排布的信号不跨字节,Intel和Motorola没有区别,信号的高位(MSBit)放在字节的高位,信号的低位(LSBit)放在字节的低位即可。
如果要排布的信号跨字节, 信号的高位(MSBit) 放在高字节(MSByte) 的高位,信号的低位(LSBit)放在低字节(LSByte)的低位,但因为Intel和Motorola的高低字节位置不同,所以跨字节的时候就有了区别。
排信号的时候,除了格式,还有两个重要的参数是起始位(Start bit)和信号长度(Length,单位Bit), 下面我们通过排列一个长度为12 Bit,起始位为28的信号来具体了解下这几种排列格式的区别。
✦ + +
示例
Intel格式的起始位都是LSBbit,我们先来对比下Intel standard和Motorola forward LSB,对Intel和Motorola有个大概的了解。
Intel standard:
Start bit 26,Length 12
起始位:LSBit,最高有效字节:Byte 7
Motorola forward LSB:
Start bit 26,Length 12
起始位:LSBit,最高有效字节:Byte 0
Intel standard和Motorola forward LSB的排列方式一致,起始位是低位(LSBit),但高低字节的位置不同。Intel standard格式中Byte 0为低字节,Byte 7为高字节,所以跨字节排列时,信号向下排列;Motorola forward LSB格式中Byte 0为高字节,Byte 7为低字节,所以跨字节排列时,信号向上排列。
紧接着我们来对比上面的Motorola forward LSB和Motorola forward MSB的区别:
Motorola forward MSB:
Start bit 26,Length 12
起始位:MSBit,最高有效字节:Byte 0
这两种格式的区别为起始位不同,从名字也能看出,Motorola forward LSB的起始位是LSBit,Motorola forward MSB的起始位是MSBit。
下面这种Motorola backward是最奇怪的一种格式,甚至无法在CANdb++ Editor中显示。比特的序号是Motorola forward格式完全颠倒过来,如下图
Motorola backward:
Start bit 26,Length 12
起始位:LSBit,最高有效字节:Byte 0
上篇文章《大端 vs 小端 —— 车内通信》中介绍了比特位的编号顺序有两种,分别是Sawtooth和Sequential,上面四种格式使用的都是Sawtooth顺序,比特的序号是不连续的。而下面两种格式则使用Sequential顺序,比特的序号是连续的。
注意
如果使用Sequential顺序,想在CANdb++ Editor中正确显示的话,需要勾选Bit index中的Inverted,否则显示的序号是错乱的。
如果在软件的设置中将显示格式都选为Sequential,CANdb++Editor会自动跳出个提示框,询问是否使用反转格式,如下图
Intel sequential:
Start bit 26,Length 12
起始位:LSBit,最高有效字节:Byte 7
Intel sequential的排列规则其实和Intel standard一致,只不过比特的编号顺序不同。同理,Motorola sequential和Motorola forward MSB的排列规则也一致。
Motorola sequential:
Start bit 26,Length 12
起始位:MSBit,最高有效字节:Byte 0
今天的分享就到这里,本文介绍了在信号排布的时候Intel和Motorola几种排列格式的区别。
封面图片作者
Oliver Widder
图片来源
https://geek-and-poke.com
通过这三篇文章,王师傅分别介绍了大端小端的基础原理、车内通信的场景以及Intel和Motorola几种格式的区别。接下来,王师傅会分享更多车载以太网的相关知识,敬请期待。
END
感谢你的分享,如同繁星点点般照亮了我前行的道路
厉害