推荐阅读(单击下方文字即可跳转至对应博文):

1、【DBC专题】-1-如何使用CANdb++ Editor创建并制作一个DBC

2、【DBC专题】-2-CAN Signal信号的Multiplexor多路复用在DBC中实现

3、【DBC专题】-3-利用CANdb++ Editor在DBC文件添加帧CAN_ID和信号CAN_Signal

4、【DBC专题】-5-DBC文件格式解析

5、【DBC专题】-6-Signal信号字节顺序Motorola_LSB/MSB/Sequential/Backward,Intel_Standard/Sequential等6类格式详解

关键字

Intel : Little endian小端

Motorola : Big endian大端

Start Bit :CAN信号的起始位

Byte order :字节顺序

Message/CAN_ID中的Signal信号的“Byte order字节顺序”有两种模式: Intel Motorola 。在排列方式上, Intel 模式和 Motorola 模式没有孰优孰劣之分 ,只不过是设计者的习惯。

一般情况下,发送CAN信号时,首先发送Byte0,然后Byte1,Byte2,....Byte7顺序发送,其位的编号可以参照CANdb++ Editor的Layout子选项卡中CAN数据域分布,见如图0-1。

右下角的 Inverted 一般默认不勾选,符合正常的二进制阅读习惯 。若勾选右下角的Inverted,其显示的位排列是相反的。

在这种情况下, 首先发送 Byte0 ,最后发送 Byte7 的发送顺序 ,则在上图中可直接按照 从左至右,从上至下 的顺序依次对信号进行排布即可

下面介绍Intel 格式和Motorola 格式这两种“字节顺序”排列的不同之处。

1 小端(Intel)编码格式

1.1 Signal信号不跨字节

信号在一个字节内实现(信号没有跨字节)时 ,该 信号的高位( MSB )放在该字节的 高位 ,该 信号的低位( LSB )放在该字节的 低位 (见图1-1)。

起始位 在该信号的低位( LSB (见图1-2)。

1.2 Signal信号跨字节

信号在多个字节内实现(信号跨字节)时 ,该 信号的高位( MSB )放在 高字节 的高位, 信号的低位( LSB )放在 低字节 的低位 (见图1-3)。

起始位 在该信号的低位( LSB (见图1-4)。

2.1 Signal信号不跨字节

信号在一个字节内实现(信号没有跨字节)时 ,该 信号的高位( MSB )放在该字节的 高位 信号的低位( LSB )放在该字节的 低位 (见图2-1)。

起始位 在该信号的低位( LSB (见图2-2)。

2.2 Signal信号跨字节

信号在多个字节内实现(信号跨字节)时 ,该 信号的高位( MSB )放在 低字节 的高位, 信号的低位( LSB )放在 高字节 的低位 (见图2-3)。

起始位 在该信号的低位( LSB (见图2-4)。

信号在一个字节内实现(信号不跨字节) 时,Intel模式和Motorola模式的信号字节顺序,完全一样: 信号的高位( MSB )放在该字节的 高位 信号的低位( LSB )放在该字节的 低位。

信号在多个字节内实现(信号跨字节) 时,Intel模式和Motorola模式的信号字节顺序,明显不同:

  • Intel模式 信号的高位( MSB )放在 高字节 的高位,信号的低位( LSB )放在 低字节 的低位;
  • Motorola模式 信号的高位( MSB )放在 低字节 的高位, 信号的低位( LSB )放在 高字节 的低位

俗称:小端模式“高在后,低在前”;大端模式“高在前,低在后”。

另:不管是 Intel 模式,还是 Motorola 模式, 起始位 都该信号的低位( LSB )。

目录0 引言1 小端(Intel)编码格式1.1 Signal信号不跨字节1.2 Signal信号跨字节2 大端(Motorola)编码格式2.1 Signal信号不跨字节2.2 Signal信号跨字节3 小结推荐阅读:1、【DBC专题】-1-如何使用CANdb++ Editor创建并制作一个DBC2、【DBC专题】-2-CAN Signal信号的Multiplexor多路复用在DBC中实现3、【DBC专题】-3-利用CANdb++ Editor在DBC文..
我之前写过好几篇文章 介绍 大端小端的存储、显示和读取。在 介绍 DBC 的文章 ,也有 信号 在CAN消息数据 如何定义的 顺序 ,它和大端小端采用的原理相同,但是不能带入数据大端小端存储的方法。这里千万要注意! DBC 数据库 定义 信号 时采用的 字节 顺序 ,如果想讲明白,很简单。但是如何讲明白的同时,还能通俗易懂,让人容易记住,这是我一直思考的问题!之前看过几篇别人写的 介绍 信号 字节 顺序 的文章,怎么说呢?不那么通俗易懂,尤其对于初学者来说,太八股文了,今天尝试以我的角度解读 信号 字节 顺序 。这篇文章,我打算通过:画图、举例与分
在这份教程的第一部分,我们提到没有CAN数据库,CANoe还不能工作。在第二部分,我们来看看CAN数据库是怎样的。通过CANoe的Tools菜单,或者从开始菜单打开Vec tor 的CAN数据库编辑器——CANdb++ Edi tor 。 CAN总线上有4种报文:
本篇只描述 Mo tor ola 格式 字节 排序方式, Intel 格式 的不作 介绍 。 首先以下面的表格来表示 字节 顺序 和位 顺序 ,用红色背景表示高位MSB,蓝色背景表示地位LSB,绿色为LSB到MSB的过渡。 下面以起始位位34,长度位12的 信号 来做演示来区分 Mo tor ola Forward MSB和 Mo tor ola Forward LSB的区别 Mo tor ola Forward MSB(大端在前): 矩阵文档 起始位置则为MSB的起始位为34,往高 字节 借位。 填入填入0xB79,即101101111001,如下图:
DBC 文件 ,CRC-16/CCITT-FALSE通常用于校验消息或 信号 的数据完整性。下面是在 DBC 文件 计算CRC-16/CCITT-FALSE的步骤: 1. 初始化一个16位寄存器,初始值为0xFFFF。 2. 将消息或 信号 的数据按 字节 进行处理。 3. 对每个 字节 ,将其与寄存器的低8位进行异或运算。 4. 将寄存器向右移一位。 5. 如果异或运算的结果为1,则将寄存器与特定的生成多项式(0x1021)进行异或运算。 6. 重复第3至第5步,直到所有 字节 都被处理完毕。 7. 最后,寄存器 的值就是计算得到的CRC-16/CCITT-FALSE校验码。 需要注意的是,在计算CRC时, 字节 顺序 可能会影响最终的校验码结果。有些 DBC 文件 可能要求 字节 顺序 进行翻转,所以在实际应用 ,您需要参考具体的 DBC 文件 规范以及相关文档来正确计算CRC-16/CCITT-FALSE校验码。 希望这个回答能够帮助您理解在 DBC 文件 计算CRC-16/CCITT-FALSE的方法。如果您有任何进一步的问题,请随时提问。