CAN signal Layout怎么那么绕?
扫描二维码
随时随地手机看文章
1、CANoe工程的新建
打开CANoe软件,在工具栏的”File”中点击”New”,双击选择创建的模板 ,再保存创建的cfg工程文件。如下:2、Channel Mapping
每个CAN网络都有所属的Channel,称之为Application Channel,如果在Real BUS的环境下要映射到相应的硬件接口单元及相应的Transceiver。下图为网络上的各个网络(Comfort和Powertrain),及其网络中的Can控制器节点和DBC文件。
通过Hardware-Channel Mapping实现逻辑上通道和物理通道的映射,当你发现trace上没有报文时,第一检查一下你通过DB9的接插件是否插在正确的硬件通道上了。
3、CAN DBC中报文及信号的属性
CAN通信中物理层中一帧由以下几个部分组成:- 报文ID
- 报文数据
- 报文长度
Remote frame 将 CAN 报文指定为远程帧。
Start bit 指定数据的开始位。开始位是从报文数据的开头计数的最低有效位。开始位必须是 0 到 63 之间的整数。信号的起始位,一般来讲,主机厂在定义整车CAN总线通信矩阵时,其每一个信号都从其最低位开始填写,
Length (bits) 指定信号在报文中占用的位数。长度必须是 1 到 64 之间的整数。Data type 指定信号如何解释分配的位中的数据。从下列各项中选择:
-
signed(默认值)
-
unsigned
-
single
-
double
4、信号在报文中的Layout问题
CAN 报文中的比特流有两方面要注意,第一是字节序,第二是bit numbering。字节序也叫大小端,决定如何去解析一系列字节来组装成有意义的数据。即小端支持从低字节向高字节去排布信号。即大端支持高字节向低字节去排布信号。
注意:字节内的位的重要性(Significant)的顺序是一定的,不随两种格式的变化而变化。
bit numbering,即报文中支持两种方式的计数方式:
- 从右向左
这种情况的报文一般是Byte0_bit7的位最先被发送,然后是bit6,,,最后是Byte7_bit56位被发送。这种方式在汽车工业中是最通用的方式,为各大主机厂采用,在Vector的DBC中也按照这种排布方式去布局信号的index。
-从左向右
这种情况的报文一般是Byte0_bit0的位最先被发送,然后是bit1,,,最后是Byte7_bit63位被发送。相应地和上述两种bit numbering对应的就是两种message的Layout,
1)字节中的位序为从右到左
2)字节中的位序为从左到右
通常在DBC中选择Byte order时,可以选择以下任一选项:LE:其中字节顺序为 little-endian 格式 (Intel®)。在这种格式中,从开始位(最低有效位)到最高有效位(具有最高位索引)进行计数。例如,如果以 little-endian 格式打包数据的一个字节0x12(默认其他信号为0),并且开始位为 29,则数据位表类似于下图(从最低有效位到最高地址计数的 Little-Endian 字节顺序)所示。
则我们接收到的8字节的Can报文消息为:00 00 20 01 00 00 00 00,字节2和字节3的layou如下表所示:
Bytes | 2 | 3 |
---|---|---|
Hex | 0x20 | 0x01 |
Bits | 0100 0010 | 0000 0001 |
BE:其中字节顺序为 big-endian 格式 (Motorola®)。在这种格式中,从开始位(最低有效位)到最高有效位进行计数。例如,如果以 big-endian 格式打包数据的一个字节,并且开始位为 29,则数据位表类似于下图(从最低有效位到最低地址计数的 Big-Endian 字节顺序)所示。
则我们接收到的8字节的Can报文消息为:00 01 20 00 00 00 00 00,字节1和字节2的layou如下表所示:
Bytes | 1 | 2 |
---|---|---|
Hex | 0x01 | 0x20 |
Bits | 0000 0001 | 0010 0000 |