大端 vs 小端 — 车内通 信
上篇文章我们介绍了大端和小端的概念,那么车内通信的时候具体是使用大端还是小端呢?CAN总线中的Intel和Motorola格式和大小端又有什么关系?
关键字:大端、小端、网络字节序、Intel、Motorola、车载以太网、CAN
车载以太网
车载以太网使用的字节序是网络字节序,即大端字节序。TCP/IP等一系列协议,以及其他在互联网上传输数据所使用的协议基本都是大端的,其最初在RFC 791 page 39和RFC 1700 page 3中都有定义。针对车载以太网特有的协议,也就是车内通信所使用的协议,比如SOME/IP、DoIP以及各个主机厂自定义的协议格式也基本都是大端。
SOME/IP,[PRS_SOMEIP_00368]
All SOME/IP Header Fields shall be encoded in network byte order (big endian). [SOME/IP Protocol Specification AUTOSAR FO R21-11, p. 25]
DoIP,[DoIP-147]
The big-endian network byte order of IP shall be used for DoIP messages in accordance with IETF RFC 791 (September 1981), Annex B. [ISO 13400-2 2019, p. 14]
数据传输的顺序和我们的阅读顺序是一致的,从左到右,从上到下,左侧为最高有效字节MSB,右侧为最低有效字节LSB。下图为一条普通的IP协议头部:
其中每个字节的传输顺序为下图中的Tx order,编号即顺序,从1开始,依次传输。
这里要注意一点,网络字节序仅针对网络协议本身,和系统和处理器没有关系,如果系统和处理器是小端,在协议数据收发时则需要进行转换。
另外还有一点容易有歧义,以太网的标准IEEE 802.3中定义比特的传输顺序是LSBBit先传输,MSBit后传输,其顺序和上层网络协议是相反的。但这里仅针对物理层,接收端底层会直接将其进行转换,所以对于上层来说,无需关心底层比特的传输顺序,网络字节序也仅规定到字节的层级。
CAN总线
在CAN总线中,通常不用大端和小端表述,而是使用Intel和Motorola格式。本质上没有区别,Intel对应小端,Motorola对应大端,Intel和Motorola叫法的由来是因为早期Intel的处理器均使用小端,如Intel 8088、8086(现在经典的x86架构就是在这款处理器上诞生的),而Motorola则使用大端,如Motorola M6800系列。在70、80年代,处理器领域的竞争主要是Intel和Motorola两个厂商间的竞争,所以就产生了用Intel和Motorola来命名的两种格式。
数据在总线上传输时,会先传输Byte 0,后传输 Byte 1、Byte 2…在每个字节中,会先传输MSBit,后传输LSBit。下图为一个标准8字节长度CAN报文的布局,该布局和CANdb++ Editor(业内常用的DBC编辑软件之一)中的默认格式一致。图中字节的传输顺序为从上到下,每一个字节中比特的传输顺序为从左至右,左侧为高位MSBit,右侧为低位LSBit。
在总线上传输一个8字节的报文时,传输顺序为:
7、6、5、4、3、2、1、0、15、14、13 … 59、58、57、56
即首先传输Byte 0的第7位(MSBit),最后传输Byte 7的第56位(LSBit)。这种编号顺序叫Sawtooth, 比特的序号是不连续的, 像锯齿一样。
在CANdb++ Editor中报文的Layout页,可以选择颠倒每个字节的比特位顺序(勾选Bit index中的Inverted),颠倒后的布局如下图。
颠倒之后,在总线上传输一个8字节的报文时,传输顺序为:
0、1、2、3、4、5、6、7、8、9、10 … 60、61、62、63
即首先传输Byte 0的第0位(MSBit),最后传输Byte 7的第63位(LSBit)。颠倒之后是不是突然变得丝滑了,这种编号顺序叫Sequential,比特的序号是连续的。
这两种格式对数据传输没有影响,但在信号排列的时候会有区别,信号的排列格式一共有以下几种:
Intel有两种:
Intel standard
Intel sequential
Motorola有四种:
Motorola forward LSB
Motorola forward MSB
Motorola sequential
Motorola backward
具体使用sawtooth还是sequential,取决于选用哪种排列格式。
Sawtooth
Intel standard
Motorola forward LSB
Motorola forward MSB
Motorola backward
Sequential
Intel sequential
Motorola sequential
下一篇文章,王师傅会通过具体的实例介绍下 Intel 和 Motorola 的几种格式在信号排布时候的区别。
封面图片作者 Oliver Widder
图片来源 https://geek-and-poke.com
👍👍👍
谢谢分享