Intel 格式与 Motorola 格式的区别 -CAN 总线信号的编码方式之我见 在进行 CAN 总线通信设计或者测试过程中,经常看到 CAN 总线信号的编码格式有两种定义:Intel 格式与 Motorola 格式。究竟两种编码格式有什么样的区别呢?设计者、dbc 文件编辑者或者测试人员又该如何判断两种格式,并进行有效正确的配置和解析呢?下面作者给出自己在设计和测试过程中的一点体会和见解,希望能够总结出来加深一下印象和理解。 在编码优缺点上,Motorola 格式与Intel 格式并没有孰优孰劣之分,只不过根据设计者的习惯,由用户自主选择罢了。当时,对于使用者来讲,在进行解析之前,就必须要知道编码的格式是哪一种,否则,就不能保证正确地解析信号的含义。以下就以8 位字节编码方式的 CAN 总线信号为例,详细分析一下两者之间的区别。 首先,介绍一下 CAN 总线的数据传输规则,首先传输一个字节的高位(msb),最后传输该字节的低位(lsb)。如下图所示。 bytexbit(8*x )bit(8*x +7)msblsb注:x =0,1,2,3……7 一般情况下,主机厂在定义 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 位)并且信号在一个字节内实现(...