【控制器局域网】CAN报文的字节排序

在线进制转换


前言

  • 在通信和计算机系统中,字节排序是指多字节数据在存储或传输过程中的排列顺序。Motorola Forward MSB(Most Significant Byte)和Motorola Forward LSB(Least Significant Byte)是两种不同的字节排序方式,也称为大端序小端序
  • 不同的处理器和体系结构可能采用不同的字节排序方式。大多数个人计算机和服务器使用小端序,而一些嵌入式系统和网络协议使用大端序。当不同系统之间进行数据交换时,字节序列的一致性变得至关重要,否则可能会导致数据解释错误。在网络通信中,通常会规定字节序列的格式,以确保正确的数据解析。

CAN通信矩阵

CAN是一种在实时嵌入式系统中广泛使用的串行通信协议,常用于连接汽车电子系统中的各种控制单元。在CAN网络中,通信矩阵通常指的是不同的电子控制单元(ECU)之间的通信关系。这种矩阵描述了每个ECU能够与哪些其他ECU进行通信,以及它们之间的通信协议和消息传递。通信矩阵对于确保系统中各个组件之间的有效通信至关重要。

通信矩阵可以包含以下信息:

  1. 通信对象: 每个ECU的身份,表示为节点或模块。
  2. 通信协议: 描述通信所使用的CAN协议的特定参数,例如波特率。
  3. 消息ID: 每个消息的唯一标识符,用于在网络上识别消息。
  4. 允许的通信方向: 描述每个ECU是否可以发送、接收或两者兼而有之。
  5. 数据格式: 描述传输的数据的格式和结构。

Motorola Forward MSB (Big-Endian) 大端序
  • 在大端序中,多字节数据的最高有效字节(Most Significant Byte,MSB)存储在内存的最低地址处,而最低有效字节(Least Significant Byte,LSB)存储在内存的最高地址处。
  • 这意味着整个数据的起始部分是最高有效字节,然后依次是次高有效字节,直到最低有效字节。

例如,对于16位整数0x1234,存储顺序如下:

内存地址: 0x1000   0x1001
数据内容:  0x12     0x34
Motorola Forward LSB (Little-Endian) 小端序
  • 在小端序中,多字节数据的最低有效字节(LSB)存储在内存的最低地址处,而最高有效字节(MSB)存储在内存的最高地址处。
  • 这意味着整个数据的起始部分是最低有效字节,然后依次是次低有效字节,直到最高有效字节。

例如,对于16位整数0x1234,存储顺序如下:

内存地址: 0x1000   0x1001
数据内容:  0x34     0x12

例如,对于16进制整数0xB79

0xB79这个16位的整数的最低有效字节是0x79,它存储在内存的最低地址0x1000处;而最高有效字节是0xB7,它存储在内存的次低地址0x1001处。

内存地址: 0x1000   0x1001
数据内容:  0x79     0xB7

案例说明

以下面的表格来表示字节顺序和位顺序,用红色表示高位MSB,蓝色表示低位LSB,绿色为LSB到MSB的过度

\ Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
Byte0 7 6 5 4 3 2 1 0
Byte1 15 14 13 12 11 10 9 8
Byte2 23 22 21 20 19 18 17 16
Byte3 31 30 29 28 27 26 25 24
Byte4 39 38 37 36 35 34 33 32
Byte5 47 46 45 44 43 42 41 40
Byte6 55 54 53 52 51 50 49 48
Byte7 63 62 61 60 59 58 57 56

下面以起始位34,长度为12的信号详细说明MSB与LSB的区别

Motorola Forward MSB (Big-Endian) 大端序

矩阵文档中的起始位置是MSB的起始位34,往高字节借位

【控制器局域网】CAN报文的字节排序_第1张图片

填入 0xB79 , 对应二进制 101101111001,如下图

【控制器局域网】CAN报文的字节排序_第2张图片

Motorola Forward LSB (Little-Endian) 小端序

矩阵文档中的起始位置是LSB的起始位34,往低字节借位
【控制器局域网】CAN报文的字节排序_第3张图片

填入 0xB79 , 对应二进制 101101111001,如下图
【控制器局域网】CAN报文的字节排序_第4张图片

你可能感兴趣的:(学习笔记,arm开发,嵌入式硬件,c++,计算机网络)