整理一下研究生第一年学到的东西,因为研究方向是和无人车相关,最先学习的就是CAN总线的相关知识了,这里简单地po一个笔者利用C/C++写的一个CAN的使用模板。
1. CAN简单了解
CAN的全称是controller area network是一种车内常用的通信协议,网络的设备直接互联通信。[1]基本上,现在很多车都是使用CAN协议作为车内ECU与各个模块之间的通信手段。这些协议的具体格式:例如它们的时间间隔、帧的每一位是什么含义,发送方和接收方是谁、怎样解读等等,各个车厂各有不同,还没有形成一个统一的标准。而且这些协议车厂不会轻易公开,否则非常容易被人直接控制车辆或者获取车辆的行驶数据。
对于我们来说,直接利用CAN协议进行改造是一件最为轻松的事情,因为我们只需要拿到CAN的协议内容,再利用CAN分析仪和简单电路修改,就可以选择屏蔽掉车内原来的CAN的线路,转而使用我们通过代码发出的指令到各个执行部分,例如ESP、ACC等等。
1.1. CAN协议的结构
这一部分,可以参考http://www.cnblogs.com/pejoicen/p/3986587.html 这篇文章,讲的非常详细,这里笔者就简单地概括了一下:
分为数据帧、远程帧、错误帧、过载帧和帧间隔。其中我们一般使用的都是数据帧。一个数据帧包括了帧起始、仲裁段、控制段、数据段、CRC段、ACK段、帧结束这几个部分,具体的命令含义都是集中在数据段,传输的数据量是8