原因

最近刚进入自动驾驶领域,调试线控底盘时遇到CAN的解析问题,在此记录自己学到的知识点。

什么是大端小端

1.大端模式(big endian),小端模式(little endian),endianness翻译过来是字节顺序,因此大小端均指字节顺序,非位顺序。
2.在计算机内存/硬盘中,数据是以字节为单位的,二进制在内存中存储时有2种分布方式:高字节对应低地址(大端模式)、高字节对应高地址(小端模式)。有些CPU公司用大端,譬如51单片机,有些公司用小端,如ARM。用数据0x12345678来做演示,要存入32位系统的内存地址为0000~0003,,首先明确,这个数据的最高有效字节是12,最低是78,低地址是0000,高地址是0003,大端小端存储方式分别如下:

| 地址 | 0000 | 0001 | 0002 | 0003 |
|–|–|–|–|–|–|
| 大端 | 12 | 34 | 56 | 78 |
| 小端 | 78 | 56 | 34 | 12 |

3.在串口等串行通信中,一次只能发送一个字节,比如要发一个int类型的数据,有4个字节,这时就面临是按照:byte0, byte1, byte2, byte3,还是按照byte3, byte2, byte1, byte0,收发必须按照同样的字节顺序来通信。

CAN解析

在解析CAN数据时,尽量确认定义的通信协议大小端问题,大端(Motorola),小端(Intel),可从提供CAN协议处获取,也可用CAN卡读取数据,根据定义推导。

Motorola格式:

在这一帧数据中,以第一个条数据数据为例,发送顺序为:12,13,14,15,0,1,2,3,4,5,6,7,bit位是不连续的,但是发送的字节序体现出的信号值是连续的。例如设置行驶里程998km,信号值在报文中为3E,60,00,00,00,00,00,00。
在这里插入图片描述

Intel格式

在这一帧数据中,同样以第一个条数据数据为例,发送顺序为:0,1,2,3,4,5,6,7,8,9,bit位是由低到高连续的,但是发送的字节序体现出的信号值非连续,例如设置行驶里程998km,信号值在报文中为E6,03,00,00,00,00,00,00。

在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐