CAN总线的编码方式
对CAN总线的常见编码格式解析
我们在进行CAN总线的通讯设计过程中,对于通讯矩阵的建立,我们常常会选择一种编码方式,最常见的编码格式是Intel格式和Motorola格式。但是往往人们都是以一种习
CAN总线的编码方式
对CAN总线的常见编码格式解析
我们在进行CAN总线的通讯设计过程中,对于通讯矩阵的建立,我们常常会选择一种编码方式,最常见的编码格式是Intel格式和Motorola格式。但是往往人们都是以一种习惯去选择,究竟两种格式具体的区别在哪里呢?我们需要明白两种格式对信号是如何排布的,又是按照什么顺序进行正确解析的。本篇文章就是作者根据在整理通讯矩阵和dbc文件中遇到的一些问题,提出的自己的一些体会和见解,希望大家通过此篇文章对两种格式有更加深刻的理解。
我们在设计初期,都会首先选择一种编码格式,这种选择大多都是根据设计者自己的习惯,具体Intel格式和Motorola格式哪个更有优势的问题,在这里没有区别。但是就使用者而言,需要对接收到数据帧进行正确的解析,否则就无法得到想要的信号。下面我们就来说一下两种格式的区别。
首先我们需要明确一点,无论是Intel格式还是Motorola格式,在每个字节中,数据传输顺序都是从高位(msb)传向低位(lsb)。如下图所示。
图1
一般主机厂设计人员在设计初期都会定义好字节的发送顺序,定义Byte0为LSB,Byte7为MSB。第一种情况:先发送Byte0,然后Byte1到Byte7;第二种情况:先发送Byte7,然后Byte6到Byte0。根据我了解到的大部分主机厂都会采取第一种发送方法,很少会采取后者。我们在用CANoe中的CANdb++编辑数据库时,肯定会用到如下图所示的编辑界面。
下Intel格式和Motorola格式在CANdb++中的区别。
一、Motorola编码格式:
如果我们选择使用Motorola编码格式,那需要知道它在CANdb++中的3种信号排布方式。这三种排布的主要区别在于它们的起始位不同。我们假设一个信号的位长为12,那么它就要跨字节排布。在Motorola格式中的第一种排布形式为Motorola Forward LSB,即从小端开始,它的起始位为lsb(16);第二种排布形式为Motorola Forward MSB,即从大端开始,它的起始位为msb(11);第三种排布形式为Motorola Backward,它的起始位为第8位,这种形式基本不采用,因为排布规律相对于前两种比较复杂。如下图所示;
图4
针对上述Motorola格式第一种排布形式,信号的起始位为高字节的低位。在CANdb++中的具体体现如图所示。
图5
在CANdb++中,无法区别这三种排布形式,它的起始位也是自动定义的,所以我们在设计通讯矩阵时,一般都会采用第一种,即Motorola Forward LSB。只是有的工程师根据自己的个人习惯,去改变起始位,但我们需要明确一点就是,在Canoe软件中,一种格式的信号排布是没有区别的。
二、Intel编码格式
如果我们选择使用Intel编码格式,它在CANdb++中也有两种信号排布方式。我们假设一个信号位长为12,它也是要跨字
CAN总线的编码方式 来自淘豆网m.daumloan.com转载请标明出处.