logo资料库

Intel与Motorola格式在CNA总线信号编码中的区别.pdf

第1页 / 共9页
第2页 / 共9页
第3页 / 共9页
第4页 / 共9页
第5页 / 共9页
第6页 / 共9页
第7页 / 共9页
第8页 / 共9页
资料共9页,剩余部分请下载后查看
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 数据库实现的图片说明。 bit15 bit131 S_msb Signal 4位数据长度的信号 举例 bit15 bit8 S_lsb 8位数据长度的信号 bit24 S_lsb 举例 bit31 1 byte1 S_msb byte3 Signal byte1 0 1 0 bit8 1 Signal的数据值为0x05 byte3 0 1 0 0 1 0 Signal的数据值为0xA5 bit24 1
当一个信号的数据长度超过 1 个字节(8 位)或者数据长度不超过一个字节但是采用跨字节方式实 现时,该信号的高位(S_msb)将被放在高字节(MSB)的高位,信号的低位(S_lsb)将被放在低字节 (LSB)的低位。这样,信号的起始位就是低字节的低位。对于一个信号的数据长度不超过一个字节, 但是采用跨字节方式实现的这种情况,因其对信号解析和编码以及信号完整性都存在不利因素,所以主 机厂在定义某一车型(系)的整车通信矩阵时,不太可能设计出这种编码结构。本文就不再考虑和分析 这种较为特殊的情况,但其原理与本文讨论的其他情况是相同的。下图分别以 12 位和 16 位数据长度的 两种信号为例进行了说明,并给出了 CANoe 中的某一车型的通信矩阵的 CAN 数据库的图片说明。
12位数据长度的信号 bit0 S_lsb bit15 举例 Signal的数据值为0x6A5 byte0 lsb half of Signal byte0 0 1 0 0 1 0 bit0 1 bit15 lsb half of Signal byte1 bit11 S_msb byte1 bit11 0 bit8 msb half of Signal 1 1 bit8 0 msb half of Signal bit7 bit7 1 bit23 bit39 bit39 1 lsb half of Signal bit23 0 1 0 lsb half of Signal byte2 bit20 S_lsb byte2 bit20 1 byte4 12位数据长度的信号 bit16 bit31 S_msb 举例 Signal的数据值为0x6A5 bit16 bit31 0 byte3 msb half of Signal byte3 1 1 0 1 0 1 msb half of Signal byte5 16位数据长度的信号 bit32 S_lsb bit47 S_msb bit24 bit24 0 bit40 bit40 0 lsb half of Signal msb half of Signal byte4 举例 Signal的数据值为0x36A5 byte5 0 1 0 0 1 0 bit32 1 bit47 0 0 1 1 0 1 1 lsb half of Signal msb half of Signal
二、 采用 Motorola 格式编码 当一个信号的数据长度不超过 1 个字节(8 位)并且信号在一个字节内实现(即,该信号没有跨字
节实现)时,信号的高位(S_msb)将被放在该字节的高位,信号的低位(S_lsb)将被放在该字节的低 位。这样,信号的起始位就是该字节的低位。下图分别以 4 位和 8 位数据长度的两种信号为例进行了说 明,并给出了某一车型的通信矩阵在 CANoe 中 CAN 数据库实现的图片说明。 bit15 bit131 S_msb Signal 4位数据长度的信号 举例 bit15 bit8 S_lsb 8位数据长度的信号 bit24 S_lsb 举例 bit31 1 byte1 S_msb byte3 Signal byte1 0 1 0 bit8 1 Signal的数据值为0x05 byte3 0 1 0 0 1 0 Signal的数据值为0xA5 bit24 1 当一个信号的数据长度超过 1 个字节(8 位)或者数据长度不超过一个字节但是采用跨字节方式实 现时,该信号的高位(S_msb)将被放在低字节(MSB)的高位,信号的低位(S_lsb)将被放在高字节 (LSB)的低位。这样,信号的起始位就是高字节的低位。对于一个信号的数据长度不超过一个字节, 但是采用跨字节方式实现的这种情况,因其对信号解析和编码以及信号完整性都存在不利因素,所以主 机厂在定义某一车型(系)的整车通信矩阵时,不太可能设计出这种编码结构。本文就不再考虑和分析 这种较为特殊的情况,但其原理与本文讨论的其他情况是相同的。下图分别以 12 位和 16 位数据长度的 两种信号为例进行了说明,并给出了 CANoe 中的某一车型的通信矩阵的 CAN 数据库的图片说明。
byte0 12位数据长度的信号 bit0 bit15 msb half of Signal lsb half of Signal 举例 Signal的数据值为0x6A5 byte0 1 1 0 1 0 1 bit0 0 bit15 0 1 0 msb half of Signal lsb half of Signal 12位数据长度的信号 bit16 bit31 byte2 bit19 S_msb byte1 bit12 S_lsb byte1 bit12 1 byte3 msb half of Signal lsb half of Signal 举例 Signal的数据值为0x6A5 byte3 bit19 0 1 1 bit16 0 bit31 1 0 1 0 0 1 0 msb half of Signal lsb half of Signal 16位数据长度的信号 bit32 bit47 byte5 byte2 byte4 bit7 S_msb bit7 0 bit23 bit23 bit39 S_msb msb half of Signal lsb half of Signal byte4 举例 Signal的数据值为0x36A5 byte5 bit39 0 0 1 1 0 1 1 bit32 0 bit47 1 0 1 0 0 1 0 bit8 bit8 bit24 S_lsb bit24 1 bit40 S_lsb bit40 1 msb half of Signal lsb half of Signal
由上,可以看出,当一个信号的数据长度不超过 1 个字节(8 位)时,Intel 与 Motorola 两种格式的 编码结果没有什么不同,完全一样。当信号的数据长度超过 1 个字节(8 位)时,两者的编码结果出现 了明显的不同。
分享到:
收藏