在定义CAN通信矩阵或制作dbc时,我们需要知道报文的字节排列顺序。字节的排列顺序有2种,一种是Intel的排列顺序,另一种是Motorola的排列顺序,就跟大小端字节排序是一样的。下面笔者将简单介绍这2种字节排序的区别。
Intel格式:
Intel格式跟小端格式一样,
低地址代表低字节,高地址代表高字节
。比如一个信号Intel,它的起始位为3,长度为10,在dbc中它的排列顺序如下所示:
要注意其箭头的增长方向,这样我们在提取该信号的值为
Intel = (byte0 >> 3) + (byte1 << 5)
其中(byte0 >> 3)为低字节的值,(byte1 << 5)为高字节的值。
Motorola格式:
Motorola格式跟大端格式一样,
低地址代表高字节,高地址代表低字节
。与Intel不一样,
Motorola格式有2种表达方式,一种是Motorola_LSB,另一种是Motorola_MSB,但实际上它们代表的数据结构是一样的,只是表达方式不一样而已
,其中
Motorola_LSB的起始位是从低字节开始的,而Motorola_MSB的起始位是从高字节开始的
。在dbc中,比如一个Motorola_LSB的信号MotorolaSignal,其起始位为10,长度为10,在dbc中,其排列顺序如下所示:
要注意其箭头的增长方向,这样我们在提取该信号的值为
MotorolaSignal= (byte1 >> 2) + (byte0 << 6)
其中(byte1 >> 2)为低字节的值,(byte0 << 6)为高字节的值。
该MotorolaSignal信号用Motorola_MSB表示则为起始位为3,长度为10,但其值的计算方式跟Motorola_LSB是一样的。
在定义CAN通信矩阵或制作dbc时,我们需要知道报文的字节排列顺序。字节的排列顺序有2种,一种是Intel的排列顺序,另一种是Motorola的排列顺序,就跟大小端字节排序是一样的。下面笔者将简单介绍这2种字节排序的区别。Intel格式: Intel格式跟小端格式一样,低地址代表低字节,高地址代表高字节。比如一个信号Intel,它的起始位为3,长度为10,在...
我之前写过好几篇文章介绍大端小端的存储、显示和读取。在介绍DBC的文章中,也有
信号
在CAN消息数据中如何定义的
顺序
,它和大端小端采用的原理相同,但是不能带入数据大端小端存储的方法。这里千万要注意!
DBC数据库中定义
信号
时采用的
字节
顺序
,如果想讲明白,很简单。但是如何讲明白的同时,还能通俗易懂,让人容易记住,这是我一直思考的问题!之前看过几篇别人写的介绍
信号
字节
顺序
的文章,怎么说呢?不那么通俗易懂,尤其对于初学者来说,太八股文了,今天尝试以我的角度解读
信号
的
字节
顺序
。这篇文章,我打算通过:画图、举例与分
参考博客:
Intel
格式与
Mo
tor
ola
格式的区别。
主要是对上面提到的博客做下笔记,结合其他文章,转化为自己的理解写下来。直接阅读链接博客时请结合评论内容理解,博客内使用的图片有误。
1.多数厂商定义的CAN总线
字节
发送
顺序
均为先发送
LSB
,最后发送
MSB
。即:首先发送byte0(
LSB
),然后byte1,byte2,……(
MSB
)的发送
顺序
。
(链接博客有人指出:主机厂发送CAN
报文
数据从byte0~byte7,并不是针对
信号
的,而是针对CAN2.0规范,CAN2.0
报文
格式和时序就是从byte0到b
本篇只
描述
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,如下图:
此图是客户的诊断需求规范,其
字节
表就是
Mo
tor
ala
字节
序,关键点讲解:
1. #1代表第一个
字节
,在程序中存放时,就是在CAN数组的0下标内存中,ECU发送数据给上位机时就会首先发送
字节
31(且从0x31的高位bit到低位bit进行发送),再发送0x01\0xFF……
2. 该#1#8
字节
,ECU开发人员会以#5#8这4个
字节
代表内存地址这个数据,
MSB
代表地址内存的高
字节
ADC是指模数转换器,是将连续
信号
(如电压、电流等)转换成离散数字
信号
的过程。而
MSB
和
LSB
则是ADC数字输出的其中两个概念。
MSB
,即
Mo
st Significant Bit,即“最高有效位”,在ADC数字输出中指的是二进制数字中最高位的那一位。因为二进制数字中最高位的值是2的最高次幂,因此
MSB
可以看作是数字中最重要的部分。在ADC数字输出中,
MSB
所代表的电
信号
电平对应的电压通常都是比较高的。
LSB
,即Least Significant Bit,即“最低有效位”,在ADC数字输出中指的是二进制数字中最低位的那一位。因为二进制数字中最低位的值是2的最低次幂,因此
LSB
可以看作是数字中最不重要的部分。在ADC数字输出中,
LSB
所代表的电
信号
电平对应的电压通常都比较低。
MSB
和
LSB
的关系就是,数字输出中的位数越多,
MSB
和
LSB
之间的差距也就越大。因此,在设计ADC系统时需要根据应用需求选择合适的分辨率,以充分利用数字输出中的所有位数,同时还需注意信噪比和动态范围等因素,以保证系统的准确性和可靠性。