基于MCP2515的Linux CAN总线驱动程序设计(一)
时间:2016-12-12作者:华清远见
1.前言 CAN(Controller Area Network)总线,即控制器局域网总线,是一种有效支持分布式控制或实时控制的串行通信网络。由于其高性能、高可靠性、及独特的设计和适宜的价格而广泛应用于工业现场控制、智能楼宇、医疗器械、交通工具以及传感器等领域,并已被公认为几种有前途的现场总线之一。CAN总线规范已经被标准化组织制订为标准ISO11898,并得到了众多半导体器件厂商的支持。 本文使用华清远见FS2416平台。FS2416使用Socket网络设备驱动和字符设备驱动两种方式向Linux内核提供MCP2515的驱动,本文详细介绍了使用Socket方式设计的基于MCP2515的Linux CAN总线驱动程序。 2.FS2416简介
FS2416采用的是三星公司的ARM926EJ内核CPU S3C2416,无论从性能上,还是成本上, S3C2416都强于2440,是2440的完美替代者。 作为32/16 bit RISC指令集、低成本、低功耗、高性能的微处理器。S3C2416使用了65nm的制作工艺从而降低成本、功耗及提高性能,其使用的ARM926EJ的核心,集成了2D图形加速,添加了低功耗模式,支持内部ROM/RAM引导,支持moviNand启动和低功耗音频编解码。此外相对于其他ARM9芯片,它的外设也得到了升级,有更多的资源。
3.MCP2515简介 MCP2515是一种独立的CAN总线通信控制器,是Microchip公司首批独立CAN解决方案的升级器件,其传输能力较Microchip公司原有CAN控制器(MCP2510)高两倍,高通信速率可达到1Mbps。MCP2515能够接收和发送标准数据帧和扩展数据帧以及远程帧,通过两个接收屏蔽寄存器和六个接收过滤寄存器滤除无关报文,从而减轻CPU负担。 MCP2515主要功能参数及电气特性如下: 4.硬件设计 MCP2515与S3C2416的硬件连接图如图3所示。如硬件原理图可知MCP2515芯片连接在S3C2416芯片的SPI0上,中断接在GPF1上;MCP2515输出连接SN65HVD230 CAN总线收发器,SN65HVD230是德州仪器公司生产的3.3V CAN收发器。为了节省功耗,缩小电路体积,MCP2515 CAN总线控制器的逻辑电平采用LVTTL,SN65HVD230就是与其配套的收发器。
5.MCP2515 Socket CAN驱动实现 FS2416平台使用Linux2.6.39的内核,内核中为MCP2515提供了Socket CAN驱动程序,我们只需为MCP2515芯片配置内核选项就可以使用Socket编程的方式使用MCP2515 CAN总线。 5.1 Socket CAN介绍 Socket CAN是在Linux下CAN协议实现的一种实现方法。Linux下早使用CAN的方法是基于字符设备来实现的,与之不同的是Socket CAN使用伯克利的Socket接口和Linux网络协议栈,这种方法使得CAN设备驱动可以通过网络接口来调用。Socket CAN的接口被设计的尽量接近TCP/IP的协议,让那些熟悉网络编程的程序员能够比较容易的学习和使用。 5.2 向Linux内核注册MCP2515驱动 向Linux内核添加SPI驱动在之前的文章已经有详细的介绍,根据硬件原理图图3所示,MCP2515挂在SPI0上,使用中断GPF1,所以要向Linux内核注册MCP2515设备,注册代码如图4所示。
注册完成,执行make menuconfig配置内核选项。 1 [*]Networking support-> 编译内核,内核启动如图5显示即说明MCP2515驱动加载成功。
6.Socket CAN测试 因为新版BusyBox对Socket CAN的不支持,所以为了测试和使用Socket CAN,我们需要自己编译Socket CAN的工具。这里介绍两个工具,分别是iproute2 和 canutils。 6.1 iproute2 (1)下载iproute2的新源码//www.kernel.org/pub/linux/utils/net/iproute2/ 。笔者下载的是iproute2 3.6.0。 (2)解压iproute2-3.6.0.tar.xz,修改Makefile第33行。 (3)因为我们只需要iprout2的ip命令,所以修改Makefile的第42行。 (4)修改完成执行make命令,生成ip命令,拷贝到开发板文件系统目录。 (5)使用ip命令。
6.2 canutils Canutils是基于GNU GPLv2许可的开源代码,包括canconfig、canecho、cansend、candump、cansequence五个工具,用于检测和监控Socket CAN接口。 (1)下载canutils的新源码//www.pengutronix.de/software/socket-can/download/canutils 。笔者下载的是canutils 4.0.6。 ① 配置CAN的总线通讯波特率:
② 开启 / 重启 / 关闭CAN总线
③ 查看CAN总线状态
④ 发送信息
⑤ 接收数据
⑥ 使用滤波器接收ID匹配的数据
7.总结 至此,使用Socket方式的MCP2515 CAN总线驱动设计的就介绍完了,用户可以使用Socket套接字的方式,参照canutils的源码设计自己的应用程序。 下一篇文章将会详细介绍使用SPI子系统的方式,设计MCP2515 CAN总线的字符设备驱动的方法。 相关资讯
发表评论
|