最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

Intel与Motorola的编码格式区别

IT圈 admin 27浏览 0评论

2024年4月28日发(作者:藤浩然)

Intel格式与Motorola格式的区别

-CAN总线信号的编码方式之我见

在进行CAN总线通信设计或者测试过程中,经常看到CAN总线信号的编码格式有两种定义:Intel格

式与Motorola格式。究竟两种编码格式有什么样的区别呢?设计者、dbc文件编辑者或者测试人员又该

如何判断两种格式,并进行有效正确的配置和解析呢?下面作者给出自己在设计和测试过程中的一点体

会和见解,希望能够总结出来加深一下印象和理解。

在编码优缺点上,Motorola

格式与

Intel

格式并没有孰优孰劣之分,

只不过根据设计者的习惯,由用

户自主选择罢了。当时,对于使用者来讲,在进行解析之前,就必须要知道编码的格式是哪一种,否则,

就不能保证正确地解析信号的含义。以下就以8位字节编码方式的CAN总线信号为例,详细分析一下

两者之间的区别。

首先,介绍一下CAN总线的数据传输规则,首先传输一个字节的高位(msb),最后传输该字节的

低位(lsb)。如下图所示。

bytex

bit(8*x+7)

msb

注:x=0,1,2,3……7

bit(8*x)

lsb

一般情况下,主机厂在定义CAN总线信号定义时,都会明确定义字节的发送顺序,即:以首先发

送byte0(LSB),然后byte1,byte2,……(MSB)的发送顺序;还是以首先发送byte7(MSB),然后

byte6,byte5,……(LSB)的发送顺序。据作者了解到的多个主机厂定义的CAN总线字节发送顺序均

为前者(即:首先发送LSB,最后发送MSB)。这一点可以从目前主流的CAN总线信号数据库编辑器

德国verctor公司的CANoe软件工具的定义上看出,CANoe中的CANdb++编辑器中默认定义的CAN数

据场的字节结构及每一位的排布入下图所示。

在这种情况下,如果主机厂采用的是首先发送LSB,最后发送MSB的发送顺序,则在上表中可直接按

照从左至右,从上至下的顺序依次对信号进行排布即可;但是,如果主机厂采用的是首先发送MSB,最

后发送LSB的发送顺序,则在上表中需要从下至上,从右至左的顺序依次对信号进行排布,这样就比较

难以对应,而且信号与数据场各字节之间的映射关系也不太直观。所以,一般来讲,主机厂会采用首先

发送LSB,最后发送MSB的发送顺序。

下面就以CAN总线报文的发送顺序为首先发送LSB,最后发送MSB的方式为前提,介绍Intel格

式与Motorola格式这两种编码方式的不同之处。

一、 采用Intel格式编码

当一个信号的数据长度不超过1个字节(8位)并且信号在一个字节内实现(即,该信号没有跨字

节实现)时,该信号的高位(S_msb)

1

将被放在该字节的高位,信号的低位(S_lsb)

2

将被放在该字节

的低位。这样,信号的起始位

3

就是该字节的低位。下图分别以4位和8位数据长度的两种信号为例进

行了说明,并给出了某一车型的通信矩阵CANoe中的CAN数据库实现的图片说明。

4位数据长度的信号

byte1

bit15

S_msb

Signal

bit8

S_lsb

举例

bit15

0

10

byte1

bit8

1

Signal的数据值为0x05

8位数据长度的信号

byte3

bit131

S_msb

Signal

bit24

S_lsb

举例

bit31

1

01

0

byte3

0

10

bit24

1

Signal的数据值为0xA5

当一个信号的数据长度超过1个字节(8位)或者数据长度不超过一个字节但是采用跨字节方式实

现时,该信号的高位(S_msb)将被放在高字节(MSB)的高位,信号的低位(S_lsb)将被放在低字节

(LSB)的低位。这样,信号的起始位就是低字节的低位。对于一个信号的数据长度不超过一个字节,

但是采用跨字节方式实现的这种情况,因其对信号解析和编码以及信号完整性都存在不利因素,所以主

机厂在定义某一车型(系)的整车通信矩阵时,不太可能设计出这种编码结构。本文就不再考虑和分析

这种较为特殊的情况,但其原理与本文讨论的其他情况是相同的。下图分别以12位和16位数据长度的

两种信号为例进行了说明,并给出了CANoe中的某一车型的通信矩阵的CAN数据库的图片说明。

12位数据长度的信号

byte0

bit7

bit0

S_lsb

lsb half of Signal

举例

Signal的数据值为0x6A5

bit15

byte1

bit11

S_msb

msb half of Signal

bit8

byte0

bit7

101001

0

bit0

1

bit15

byte1

bit11

01

1

bit8

0

lsb half of Signalmsb half of Signal

12位数据长度的信号

byte2

bit23

bit20

S_lsb

lsb half of Signal

举例

Signal的数据值为0x6A5

bit16

bit31

S_msb

msb half of Signal

byte3

bit24

byte2

bit23

01

0

bit20

1

bit16

bit31

01

1

byte3

0

101

bit24

0

lsb half of Signalmsb half of Signal

16位数据长度的信号

byte4

bit39

bit32

S_lsb

lsb half of Signal

举例

Signal的数据值为0x36A5

bit47

S_msb

msb half of Signal

byte5

bit40

byte4

bit39

101001

0

bit32

1

bit47

0

01

byte5

1

01

1

bit40

0

lsb half of Signalmsb half of Signal

二、 采用Motorola格式编码

当一个信号的数据长度不超过1个字节(8位)并且信号在一个字节内实现(即,该信号没有跨字

节实现)时,信号的高位(S_msb)将被放在该字节的高位,信号的低位(S_lsb)将被放在该字节的低

位。这样,信号的起始位就是该字节的低位。下图分别以4位和8位数据长度的两种信号为例进行了说

明,并给出了某一车型的通信矩阵在CANoe中CAN数据库实现的图片说明。

4位数据长度的信号

byte1

bit15

S_msb

Signal

bit8

S_lsb

举例

bit15

010

byte1

bit8

1

Signal的数据值为0x05

8位数据长度的信号

byte3

bit131

S_msb

Signal

bit24

S_lsb

举例

bit31

1

01

0

byte3

0

10

bit24

1

Signal的数据值为0xA5

当一个信号的数据长度超过1个字节(8位)或者数据长度不超过一个字节但是采用跨字节方式实

现时,该信号的高位(S_msb)将被放在低字节(MSB)的高位,信号的低位(S_lsb)将被放在高字节

(LSB)的低位。这样,信号的起始位就是高字节的低位。对于一个信号的数据长度不超过一个字节,

但是采用跨字节方式实现的这种情况,因其对信号解析和编码以及信号完整性都存在不利因素,所以主

机厂在定义某一车型(系)的整车通信矩阵时,不太可能设计出这种编码结构。本文就不再考虑和分析

这种较为特殊的情况,但其原理与本文讨论的其他情况是相同的。下图分别以12位和16位数据长度的

两种信号为例进行了说明,并给出了CANoe中的某一车型的通信矩阵的CAN数据库的图片说明。

12位数据长度的信号

byte0

bit7

S_msb

msb half of Signal

举例

Signal的数据值为0x6A5

bit0

bit15

byte1

bit12

S_lsb

lsb half of Signal

bit8

byte0

bit7

01

10

101

bit0

0

bit15

01

0

byte1

bit12

1

bit8

msb half of Signal

lsb half of Signal

12位数据长度的信号

byte2

bit23

bit19

S_msb

msb half of Signal

举例

Signal的数据值为0x6A5

bit16

bit31

byte3

bit24

S_lsb

lsb half of Signal

byte2

bit23

bit19

01

1

bit16

0

bit31

101

byte3

0

01

0

bit24

1

msb half of Signal

lsb half of Signal

16位数据长度的信号

byte4

bit39

S_msb

msb half of Signal

举例

Signal的数据值为0x36A5

bit32

bit47

byte5

bit40

S_lsb

lsb half of Signal

byte4

bit39

0

01

1

01

1

bit32

0

bit47

1010

byte5

01

0

bit40

1

msb half of Signallsb half of Signal

由上,可以看出,当一个信号的数据长度不超过1个字节(8位)时,Intel与Motorola两种格式的

编码结果没有什么不同,完全一样。当信号的数据长度超过1个字节(8位)时,两者的编码结果出现

了明显的不同。

文中术语解释及定义:

1. 信号的高位,即最能表达信号特性的因子,比如:车速信号500km/h按照给定的公

,那么其中6就

式,转换成十六进制数为0x6A5,因为6代表的数量级最大(16

2

是其信号的高位。

2. 信号的低位,即最不能表达信号特性的因子,比如:车速信号500km/h按照给定的

,那么其中5

公式,转换成十六进制数为0x6A5,因为5代表的数量级最小(16

0

就是其信号的低位。

3. 信号的起始位,

一般来讲,主机厂在定义整车

CAN

总线通信矩阵时,其每一个信

号都从其最低位开始填写,这样也符合使用习惯。

所以信号的起始位就是信号的最

低位。这也与CANoe中CANdb++的定义Startbit含义一致。

2024年4月28日发(作者:藤浩然)

Intel格式与Motorola格式的区别

-CAN总线信号的编码方式之我见

在进行CAN总线通信设计或者测试过程中,经常看到CAN总线信号的编码格式有两种定义:Intel格

式与Motorola格式。究竟两种编码格式有什么样的区别呢?设计者、dbc文件编辑者或者测试人员又该

如何判断两种格式,并进行有效正确的配置和解析呢?下面作者给出自己在设计和测试过程中的一点体

会和见解,希望能够总结出来加深一下印象和理解。

在编码优缺点上,Motorola

格式与

Intel

格式并没有孰优孰劣之分,

只不过根据设计者的习惯,由用

户自主选择罢了。当时,对于使用者来讲,在进行解析之前,就必须要知道编码的格式是哪一种,否则,

就不能保证正确地解析信号的含义。以下就以8位字节编码方式的CAN总线信号为例,详细分析一下

两者之间的区别。

首先,介绍一下CAN总线的数据传输规则,首先传输一个字节的高位(msb),最后传输该字节的

低位(lsb)。如下图所示。

bytex

bit(8*x+7)

msb

注:x=0,1,2,3……7

bit(8*x)

lsb

一般情况下,主机厂在定义CAN总线信号定义时,都会明确定义字节的发送顺序,即:以首先发

送byte0(LSB),然后byte1,byte2,……(MSB)的发送顺序;还是以首先发送byte7(MSB),然后

byte6,byte5,……(LSB)的发送顺序。据作者了解到的多个主机厂定义的CAN总线字节发送顺序均

为前者(即:首先发送LSB,最后发送MSB)。这一点可以从目前主流的CAN总线信号数据库编辑器

德国verctor公司的CANoe软件工具的定义上看出,CANoe中的CANdb++编辑器中默认定义的CAN数

据场的字节结构及每一位的排布入下图所示。

在这种情况下,如果主机厂采用的是首先发送LSB,最后发送MSB的发送顺序,则在上表中可直接按

照从左至右,从上至下的顺序依次对信号进行排布即可;但是,如果主机厂采用的是首先发送MSB,最

后发送LSB的发送顺序,则在上表中需要从下至上,从右至左的顺序依次对信号进行排布,这样就比较

难以对应,而且信号与数据场各字节之间的映射关系也不太直观。所以,一般来讲,主机厂会采用首先

发送LSB,最后发送MSB的发送顺序。

下面就以CAN总线报文的发送顺序为首先发送LSB,最后发送MSB的方式为前提,介绍Intel格

式与Motorola格式这两种编码方式的不同之处。

一、 采用Intel格式编码

当一个信号的数据长度不超过1个字节(8位)并且信号在一个字节内实现(即,该信号没有跨字

节实现)时,该信号的高位(S_msb)

1

将被放在该字节的高位,信号的低位(S_lsb)

2

将被放在该字节

的低位。这样,信号的起始位

3

就是该字节的低位。下图分别以4位和8位数据长度的两种信号为例进

行了说明,并给出了某一车型的通信矩阵CANoe中的CAN数据库实现的图片说明。

4位数据长度的信号

byte1

bit15

S_msb

Signal

bit8

S_lsb

举例

bit15

0

10

byte1

bit8

1

Signal的数据值为0x05

8位数据长度的信号

byte3

bit131

S_msb

Signal

bit24

S_lsb

举例

bit31

1

01

0

byte3

0

10

bit24

1

Signal的数据值为0xA5

当一个信号的数据长度超过1个字节(8位)或者数据长度不超过一个字节但是采用跨字节方式实

现时,该信号的高位(S_msb)将被放在高字节(MSB)的高位,信号的低位(S_lsb)将被放在低字节

(LSB)的低位。这样,信号的起始位就是低字节的低位。对于一个信号的数据长度不超过一个字节,

但是采用跨字节方式实现的这种情况,因其对信号解析和编码以及信号完整性都存在不利因素,所以主

机厂在定义某一车型(系)的整车通信矩阵时,不太可能设计出这种编码结构。本文就不再考虑和分析

这种较为特殊的情况,但其原理与本文讨论的其他情况是相同的。下图分别以12位和16位数据长度的

两种信号为例进行了说明,并给出了CANoe中的某一车型的通信矩阵的CAN数据库的图片说明。

12位数据长度的信号

byte0

bit7

bit0

S_lsb

lsb half of Signal

举例

Signal的数据值为0x6A5

bit15

byte1

bit11

S_msb

msb half of Signal

bit8

byte0

bit7

101001

0

bit0

1

bit15

byte1

bit11

01

1

bit8

0

lsb half of Signalmsb half of Signal

12位数据长度的信号

byte2

bit23

bit20

S_lsb

lsb half of Signal

举例

Signal的数据值为0x6A5

bit16

bit31

S_msb

msb half of Signal

byte3

bit24

byte2

bit23

01

0

bit20

1

bit16

bit31

01

1

byte3

0

101

bit24

0

lsb half of Signalmsb half of Signal

16位数据长度的信号

byte4

bit39

bit32

S_lsb

lsb half of Signal

举例

Signal的数据值为0x36A5

bit47

S_msb

msb half of Signal

byte5

bit40

byte4

bit39

101001

0

bit32

1

bit47

0

01

byte5

1

01

1

bit40

0

lsb half of Signalmsb half of Signal

二、 采用Motorola格式编码

当一个信号的数据长度不超过1个字节(8位)并且信号在一个字节内实现(即,该信号没有跨字

节实现)时,信号的高位(S_msb)将被放在该字节的高位,信号的低位(S_lsb)将被放在该字节的低

位。这样,信号的起始位就是该字节的低位。下图分别以4位和8位数据长度的两种信号为例进行了说

明,并给出了某一车型的通信矩阵在CANoe中CAN数据库实现的图片说明。

4位数据长度的信号

byte1

bit15

S_msb

Signal

bit8

S_lsb

举例

bit15

010

byte1

bit8

1

Signal的数据值为0x05

8位数据长度的信号

byte3

bit131

S_msb

Signal

bit24

S_lsb

举例

bit31

1

01

0

byte3

0

10

bit24

1

Signal的数据值为0xA5

当一个信号的数据长度超过1个字节(8位)或者数据长度不超过一个字节但是采用跨字节方式实

现时,该信号的高位(S_msb)将被放在低字节(MSB)的高位,信号的低位(S_lsb)将被放在高字节

(LSB)的低位。这样,信号的起始位就是高字节的低位。对于一个信号的数据长度不超过一个字节,

但是采用跨字节方式实现的这种情况,因其对信号解析和编码以及信号完整性都存在不利因素,所以主

机厂在定义某一车型(系)的整车通信矩阵时,不太可能设计出这种编码结构。本文就不再考虑和分析

这种较为特殊的情况,但其原理与本文讨论的其他情况是相同的。下图分别以12位和16位数据长度的

两种信号为例进行了说明,并给出了CANoe中的某一车型的通信矩阵的CAN数据库的图片说明。

12位数据长度的信号

byte0

bit7

S_msb

msb half of Signal

举例

Signal的数据值为0x6A5

bit0

bit15

byte1

bit12

S_lsb

lsb half of Signal

bit8

byte0

bit7

01

10

101

bit0

0

bit15

01

0

byte1

bit12

1

bit8

msb half of Signal

lsb half of Signal

12位数据长度的信号

byte2

bit23

bit19

S_msb

msb half of Signal

举例

Signal的数据值为0x6A5

bit16

bit31

byte3

bit24

S_lsb

lsb half of Signal

byte2

bit23

bit19

01

1

bit16

0

bit31

101

byte3

0

01

0

bit24

1

msb half of Signal

lsb half of Signal

16位数据长度的信号

byte4

bit39

S_msb

msb half of Signal

举例

Signal的数据值为0x36A5

bit32

bit47

byte5

bit40

S_lsb

lsb half of Signal

byte4

bit39

0

01

1

01

1

bit32

0

bit47

1010

byte5

01

0

bit40

1

msb half of Signallsb half of Signal

由上,可以看出,当一个信号的数据长度不超过1个字节(8位)时,Intel与Motorola两种格式的

编码结果没有什么不同,完全一样。当信号的数据长度超过1个字节(8位)时,两者的编码结果出现

了明显的不同。

文中术语解释及定义:

1. 信号的高位,即最能表达信号特性的因子,比如:车速信号500km/h按照给定的公

,那么其中6就

式,转换成十六进制数为0x6A5,因为6代表的数量级最大(16

2

是其信号的高位。

2. 信号的低位,即最不能表达信号特性的因子,比如:车速信号500km/h按照给定的

,那么其中5

公式,转换成十六进制数为0x6A5,因为5代表的数量级最小(16

0

就是其信号的低位。

3. 信号的起始位,

一般来讲,主机厂在定义整车

CAN

总线通信矩阵时,其每一个信

号都从其最低位开始填写,这样也符合使用习惯。

所以信号的起始位就是信号的最

低位。这也与CANoe中CANdb++的定义Startbit含义一致。

发布评论

评论列表 (0)

  1. 暂无评论