can信号报文手写

文章详细介绍了CAN总线数据传输的规则,包括两种主要的编码格式——Intel格式和Motorola格式。Intel格式遵循小端规则,低字节先传输,而Motorola格式遵循大端规则,高字节在前。在解析多字节信号时,这两种格式的区别尤为明显。此外,文中还提到了DBC文件中如何表示这两种格式的信号。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、原理

1.1.CAN总线数据传输的规则

对于CAN协议,一般有两种编码格式:Intel 格式和Motorola格式。使用CAN之前,首先知道协议采用的是哪种格式,否则传输的数据有可能不是想要的效果。

一般情况下,对于一个字节的传输,CAN通常是先传输该字节的低位(Lsb),然后传输其高位(Msb)。如果一个信号只有8位(一个字节),那么不管是采用Intel 格式还是Motorola格式,它的传输方式都是一样的;如果要传输的信号超过一个字节,那么就要看采用哪种编码方式了。

如下图所示,CAN协议定义CAN报文BYTEBIT顺序。

正常情况下,每帧CAN数据最大有8个字节(如上图中从上到下依次是BYTE0BYTE1……BYTE7),在解析信号时,只有在这个信号跨字节时,才能看到Intel 格式和Motorola格式的差别。

1.2.Intel 格式和Motorola格式

1.2.1.区别

1.Intel 格式:同小端,低字节在前

Intel格式跟小端格式一样,低地址代表低字节,高地址代表高字节。比如一个信号Intel,它的起始位为3,长度为10,在dbc中它的排列顺序如下所示:

信号Intel = (byte0 >> 3) + (byte1 << 5)lsb表示低字节,msb表示高字节

其中(byte0 >> 3)为低字节的值,(byte1 << 5)为高字节的值

2.Motorola格式:同大端,高字节在前

Motorola格式跟大端格式一样,低地址代表高字节,高地址代表低字节。

与Intel不一样,Motorola格式有2种表达方式,一种是Motorola_LSB,另一种是Motorola_MSB,但实际上它们代表的数据结构是一样的,只是表达方式不一样而已.

其中Motorola_LSB的起始位是从低字节开始的,而Motorola_MSB的起始位是从高字节开始的。

在dbc中,只有Motorola_LSB的表达格式,没有Motorola_MSB的表达格式,比如一个Motorola_LSB的信号MotorolaSignal,其起始位为10,长度为10,在dbc中,其排列顺序如下所示:

例如:已知某报文start bit:10、signal size :2、value:0x3

1.数格子,找位置

找到start bit:10在表格中的位置

2.看占位

从start bit开始从右往左数signal size个格子

3.将value:0x3转换成二进制,BIN(3)=11

4. 四位为一个整体,将11放入刚刚数的格子里,即(0000 1100)

5.转换成16进制,BIN(1100)=HEX(0C)

6.byte数对应为1,即位置在D1上,即(00 0C 00 00)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值