APP下载

基于Linux的CAN总线通信实验平台研究

2016-11-10田梅兰李向功

汽车实用技术 2016年9期
关键词:报文嵌入式总线

田梅兰,李向功

(1.中国石油大学(华东)机电工程学院,山东 青岛 266580;2.一汽解放青岛汽车有限公司,山东 青岛 266043)

基于Linux的CAN总线通信实验平台研究

田梅兰1,李向功2

(1.中国石油大学(华东)机电工程学院,山东 青岛 266580;2.一汽解放青岛汽车有限公司,山东 青岛 266043)

∶目前的CAN总线实验设备大多属于演示型设备,学生很难参与到CAN总线通信的设计中,为解决此问题,将Linux系统中SocketCAN通信方式引入到汽车电子CAN总线实验中,SocketCAN通信方式屏蔽了对底层硬件的操作,学生可以基于SAE J1939协议对CAN报文进行设计,对深入掌握CAN总线通信机制有很大帮助。文章提出了一种基于嵌入式Linux的CAN总线通信实验平台,经测试表明,实验平台运行稳定,能够很好地运用到汽车电子实验中。

∶汽车电子;嵌入式Linux;CAN总线通信;SocketCAN

10.16638/j.cnki.1671-7988.2016.09.057

CLC NO.: U467Document Code: AArticle ID: 1671-7988 (2016)09-166-03

引言

汽车内部控制系统的数据通信都是基于CAN总线来实现的,CAN总线由于其突出的可靠性、灵活性、实时性使它在车载总线上的应用远远高于其他现场总线,学习和掌握CAN总线通信机制成为了汽车电子课程中必不可少的一部分[1-7]。如何直观、形象地将CAN总线通信原理讲授给学生也成为了汽车电子实验中一项值得深入思考的问题。

目前,CAN总线相关的实验设备大多属于演示型,学生很难深入理解CAN报文发送与接收机制。Linux系统提供了一种简单便捷的CAN总线通信实现方式-SocketCAN,在使用上更加通用、更加灵活,解决了原来用字符设备实现上的一些困难,为学习CAN总线通信提供了一个新思路和新方法。同时,本文提出了一种用嵌入式Linux开发板实现的CAN总线通信实验平台,能很好地应用于汽车电子实验,对车辆工程专业实验教学有很大的现实意义。

1、Linux下使用SocketCAN对CAN通信的实现

Linux下最初是使用字符设备来实现CAN通信的,字符设备是依特定的硬件设备而存在的,需要对硬件进行直接操作,并且提供的功能很少,如果在使用过程中更换另一个CAN控制器,则必须同时换用另一个设备驱动,还需要修改应用程序来适应新驱动的接口。SocketCAN使用的是Socket接口和Linux网络协议栈来实现CAN协议。它的设计非常地接近TCP/IP协议,这样就能像使用以太网通信一样来使用CAN总线通信,在使用上也变得更加通用、更加灵活[3]。

Linux下使用SocketCAN实现CAN总线通信一般要有以下步骤:

⑴初始化:要想使用SocketCAN实现CAN通信,必须在应用程序中包含两个头文件:linux/can.h和sys/socket.h,其中,linux/can.h中定义了SocketCAN通信中需要使用的大部分的数据结构和函数;头文件sys/socket.h中定义了与网络套接字相关的数据结构和函数。

SocketCAN通信和标准套接字通信最大的区别在于,SocketCAN是通过特定的结构体can_frame进行通信的,在can_frame中将数据封装成帧来实现CAN报文的发送和接收。can_frame的定义如下:

由can_frame结构体的定义可知,学生可以灵活定义需要发送的CAN报文数据内容,可以深入学习CAN总线通信机制。

就像使用TCP/IP通信一样,使用SocketCAN通信之前,首先要打开一个套接字,创建方法和普通套接字创建方式一样。

⑵绑定套接字:创建套接字以后,要将其绑定在一个CAN接口上。

⑶发送/接收CAN总线报文:绑定套接字以后,即可进行报文的发送和接收,发送报文可以使用send()、 sendto()、sendmsg()函数,接收报文可以使用read()或recv()函数。

2、基于嵌入式Linux的CAN总线通讯实验平台设计

设计实现的CAN总线通信实验平台的主要功能如下:

⑴CAN报文发送功能:能够发送常用的CAN报文,如车速、发动机转速、冷却液温度、燃油液位和里程等车况信息。

⑵CAN报文接收功能:能够接收发送过来的CAN报文,并且能够过滤干扰信息。

⑶ CAN报文数据处理功能:对CAN报文中的有用信息能够进行提取和计算。

基于上述功能需求,设计的CAN总线通信平台由四部分组成:

⑴硬件层:选用S3C6410,S3C6410是三星公司推出的一款高性能、低功耗的“准64位”RISC微处理器,它基于ARM11内核,有很好的外部存储器接口,同时,片内还集成了丰富的硬件资源[4]。MCP2515控制器自带SPI接口,SPI接口的使用可以简化CAN总线的应用设计。

⑵硬件抽象层:主要是启动代码和固件程序;

⑶操作系统层:即嵌入式Linux操作系统;

⑷应用程序层:实现CAN总线的收发、解析功能。

应用程序的设计分为两部分,一部分为发送CAN报文程序,另一部分为接收CAN报文程序。

接收端程序设计过程如下:

①添加头文件,创建套接字:首先先创建一个SocketCAN通信的套接字,方法如下:

②绑定套接字:将创建好的套接字绑定在CAN的一个接口上,套接字的绑定使用的是bind()函数。

③CAN报文的过滤:在接收报文之前,首先要过滤掉一些干扰信息。SocketCAN中过滤报文是通过设置过滤规则来实现的,过滤规则由结构体can_filter实现,其定义如下:

④接收CAN总线报文:报文的接收使用函数read()来实现。

⑤报文解析:按照SAE J1939协议要求将CAN总线报文中所包含的信息进行解析。

接收端程序设计的和发送端程序的前两步相同,此处不再赘述,第三步为CAN报文的发送,由send()函数来实现。

经测试表明,所设计的CAN总线通信实验平台性能稳定,能有效发送和接收CAN报文。

3、结语

Linux系统下SocketCAN通信方式的使用有效屏蔽了对底层硬件的操作,使用更加方便灵活。CAN报文格式可以根据SAE J1939协议进行设计,学生可以深入理解与掌握CAN总线通信机制。提出的一种基于嵌入式Linux的CAN总线通信实验平台性能稳定,能很好地应用于汽车电子实验。

[1] 吴晓娜.基于Linux和CAN总线的重型卡车监测系统设计[D].成都:西南交通大学,2007.

[2] 何柏涛.CAN总线技术在嵌入式收费车道机中的应用[J].北方交通,2009(7):99-101.

[3] 谭海鹏.LinuxSocketCAN在机车走形部监测装置中的应用[J].单片机与嵌入式系统应用,2013,13(7):68-71.

[4] 吴柳.基于S3C6410的嵌入式图像采集及压缩系统的研究[D].安徽:安徽理工大学,2012.

[5] 章健,袁义江.U-Boot在ARM平台上的移植及应用[J].微计算机信息,2007(03Z):137-138 [6]LeeCT,LinJM,HongZW, etal.Anapplica tion-orientedLinuxkernelcustomizationforembeddedsystems[J].J.Inf. Sci.Eng.,2004,20(6):1093-1107.

[6] KimH,WonY,KangS.EmbeddedNANDflashfilesystemformobilemult imediadevices[J].ConsumerElectronics,IEEETransactionson,2009,5 5(2):545-552.

The research on the experimental platform of CAN bus communication based on Linux

Tian Meilan1, Li Xianggong2
(1.College of Mechanical and Electrical Engineering, China University of Petroleum, Shandong Qingdao 266580; 2.FAW-Jiefang automobile corporation of Qingdao, Shandong Qingdao 266043)

At present,The CAN bus experimental equipment mostly belongs to generative-presentation, students are difficult to participate in the design of CAN bus communication. In order to solve this problem, the SocketCAN communication mode of Linux is introduced into the CAN bus experiments. The SocketCAN communication mode blocks access to the operation of the underlying hardware, students can design the CAN message based on SAE J1939 protocol. This method is of great help to further grasp the CAN bus communication mechanism. The paper put forward a CAN bus communication experimental platform based on Embedded Linux,the tests showed that the experimental platform running stability,and it can be effectively used in automobile electronic experiment.

Automobile electronics; Embedded Linux; CAN bus communication; SocketCAN

∶U467

∶A

∶1671-7988 (2016)09-166-03

田梅兰(1989-),女,助理实验师,就职于中国石油大学(华东)机电工程学院,研究方向,嵌入式控制与汽车电子技术。

猜你喜欢

报文嵌入式总线
基于J1939 协议多包报文的时序研究及应用
以太网QoS技术研究及实践
基于IMX6ULL的嵌入式根文件系统构建
时间触发通信总线监控技术研究
Focal&Naim同框发布1000系列嵌入式扬声器及全新Uniti Atmos流媒体一体机
关于CAN总线的地铁屏蔽门控制思路论述
浅析反驳类报文要点
基于ARM嵌入式的关于图像处理的交通信号灯识别
TS系列红外传感器在嵌入式控制系统中的应用
1588v2中的PTP报文格式及应用