大端 vs 小端 — 车内通 信

上篇文章我们介绍了大端和小端的概念,那么车内通信的时候具体是使用大端还是小端呢?CAN总线中的Intel和Motorola格式和大小端又有什么关系?

大端 vs 小端 — 车内通 信

原创 车载以太网王师傅

大端 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协议头部:

大端 vs 小端 — 车内通 信

其中每个字节的传输顺序为下图中的Tx order,编号即顺序,从1开始,依次传输。

大端 vs 小端 — 车内通 信

这里要注意一点,网络字节序仅针对网络协议本身,和系统和处理器没有关系,如果系统和处理器是小端,在协议数据收发时则需要进行转换。

另外还有一点容易有歧义,以太网的标准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。

大端 vs 小端 — 车内通 信

在总线上传输一个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),颠倒后的布局如下图。

大端 vs 小端 — 车内通 信

颠倒之后,在总线上传输一个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

声明:本站内容资源均来源于网友分享及网络公开合法渠道,但我们不对这些内容的观点、描述的准确性负责,也不保证所有信息的原创性、真实性、完整性及即时性。对于本站所含文章或资料的版权问题,如您发现有侵犯版权的情况,请联系我们进行处理。同时,我们提倡将本站内容用于个人学习交流,严禁未授权的商业用途,否则由此产生的法律后果由使用者自行承担。感谢支持!
技术分享车载通讯

大端 vs 小端 —— 基础原理

2024-6-1 17:14:46

技术分享车载通讯

大端 vs 小端 —— Motorola vs Intel

2024-6-1 17:44:05

2 条回复 A文章作者 M管理员
  1. IntoAuto

    👍👍👍

个人中心
今日签到
有新私信 私信列表
搜索