APP下载

基于PXA168与MCP2515的CAN总线接口设计

2012-07-12广东工程职业技术学院机电工程系梁芳芳李南安

电子世界 2012年13期
关键词:网络设备寄存器中断

广东工程职业技术学院机电工程系 梁芳芳 王 力 李南安

基于PXA168与MCP2515的CAN总线接口设计

广东工程职业技术学院机电工程系 梁芳芳 王 力 李南安

利用SPI接口为PXA168微处理器扩展CAN总线接口,以CAN在环境设备控制网络中的应用为背景,从CAN总线作为网络设备的实现、驱动程序的二个方面,详尽阐述了MCP2515 CAN控制器在linux下的网络设备接口函数的实现。采用该方案扩展的CAN总线接口已经应用到自主开发的环境仪器的控制系统当中,经实验表明,取得了良好的数据传输效果。

PXA168;MCP2515;CAN总线;SPI;linux

1.引言

CAN现场总线已经成为在仪表装置通信的新标准,其在短距离条件下具有高达1Mbps的数据传输能力,由于其成本低,实时性好,抗干扰能力强,因此广泛应用于车载数据采集系统及汽车电子控制网络。在自动化电子领域的汽车发动机控制部件、传感器、抗滑系统等应用中,CAN的位速率可高达1Mbps。CAN总线允许多站点同时发送,既保证了信息处理的实时性,又使得CAN总线网络可以构成多主结构的系统,保证了系统的可靠性。另外,CAN采用短帧结构,且每帧信息都有校验及其他检错措施,保证了数据的实时性、低传输出错率。

2.CAN总线接口硬件设计

由于PXA168微处理器本身不带CAN控制器,所以要为处理器平台扩展CAN总线接口。扩展的方式可以分为串行扩展和并行扩展两种,但考虑到采用并行总线扩展而产生的硬件开销和成本问题,本设计最终根据实际需求,选用串行SPI总线扩展方式。

MCP2515独立的CAN控制器结构如图1所示。微芯公司的MCP2515完全支持CAN V2.0B技术规范。能发送和接收标准和扩展数据帧以及远程帧。MCP2515自带的两个验收屏蔽寄存器和六个验收滤波寄存器可以过滤掉不想要的报文,因此减少了MCU的开销。由于MCP2515采用串行SPI方式与微处理器连接,因此大大节省了系统的硬件开销,通讯速率为1Mbps。控制器内部带有两个接收缓冲器,高速SPI接口支持0,0和1,1方式的SPI模式,频率可以达到10MHz。

3.Linux下的网络套接口函数的实现

套接字接口(socket interface)是一组函数,和其他系统函数结合起来用于创建网络应用,图2给出了典型的客户端-服务器事务的上下文中的套接字接口描述:

大多数现代操作系统上都实现了同一套套接字接口,适用于任何底层的协议。

3.1 套接字地址结构

因特网的套接字地址存放在如下的sockaddr_in的16字节结构中,其中的IP地址和端口号总是以网络字节顺序(大端法)存放的。

其中_in后缀是互联网络(internet)的缩写connect函数、bind和accept函数要求一个指向与协议相关的套接字地址结构的指针,如何定义这些函数,使之能够接受各种类型的套接字地址结构,解决办法就是这个stuct sockaddr结构,我们将所有的与协议特定的结构的指针转换成这个通用结构就可以,因此定义了一个类型typedef struct sockaddr SA,使用的时候,将所有的sockaddr_in转换成SA类型。

图1 MCP2515独立的CAN控制器系统结构

图2 套接字接口概述

3.2 socket函数

客户端和服务器使用socket函数来创建一个套接字描述符(socket descriptor)

int socket(int domain,int type,int protocol);

因此在我们的代码中,经常这样调用socket函数:

clientfd=Socket(PF_CAN,SOCK_RAW,CAN_RAW);

PF_CAN表示使用CAN网络、SOCK_RAW表示该套接字用于原始SOCK,CAN_RAW表示CAN的原始包结构。clientfd描述符仅是部分打开,还不能进行读写,要完成打开套接字的工作,取决于是客户端还是服务器。基本CAN帧结构如下:

3.3 bind函数

通过该函数绑定CAN接口。

3.4 read/write函数

3.5 通过这两个函数进行数据的读和写完成。

4.底层驱动的开发

CAN总线属于现场总线的一种,属于控制器局部网,因此把其归并到网络设备更合理,MCP2515驱动程序是网络设备程序与MCP2515硬件的接口,需要屏蔽设备的工作细节提供给用户程序一系列的标准调用,其主要就是调用操作MCP2515的底层函数实现open,read,write,ioctl,release等系统调用函数,来完成与内核的通信,为了方便网络设备程序与驱动的交互,可以根据CAN控制器的工作特点定义MCP2515的设备结构体。

4.1 open函数的实现

open函数实现对S3C2440的SPI口的初始化,以及通过SPI口对MCP2515的寄存器进行相应的初始化。包括CAN总线波特率的设置,设置报文滤波以及屏蔽寄存器,开启中断使能等。

4.2 stop函数的实现

关闭设备,以及释放申请的中断号和分配的内存空间。

4.3 中断函数的实现

Linux内核将所有的中断统一编号,使用一个irq_desc结构数组来描述这些中断;每个数组项对应一个中断号,里面记录了中断处理函数入口,底层的硬件访问接口,中断状态等,嵌入式linux内核会维护一个中断信号线注册表,所以在使用中断前必须先申请中断号,使用完之后要释放该中断号,这里使用的就是函数request_threaded_irq(spi->irq,NULL,mcp251x_can_ist,IRQF_TRIGGER_FALLING,DEVICE_NAME,priv)来注册一个中断处理程序,spi->irq为IRQ_EINT3是所要申请的中断号,can_interrupt是中断处理函数的指针,IRQT_FALLING是中断触发的方式,这里选择的是下降沿触发,DEVICE_NAME是产生中断的设备名称,dev_id主要用于共享中断线,当一个中断处理程序需要释放时,内核可以根据该参数找到中断处理函数链表中的需要删除的中断处理程序,由于MCP2515的中断比较多,所以在中断处理程序需要处理各缓冲器的接收和发送中断以及唤醒和错误处理。中断函数代码片段如下:

上述代码中intf保存的是从MCP2515的CANINTF寄存器中读取的中断信息,根据将intf分别进行读,写和其他操作,在读时调用netif_rx进行网络数据读操作,在写时调用netif_wake_queue唤醒发送内部线程进行发送,其他的中断都可以按这种方法实现。

5.基于CAN模拟器的调试与应用

为节省调试时间和调试成本,在进行PXA1689与MCP2515的CAN总线接口设计时,编译调试采用的是 武汉吉阳光电科技有限公司的GY8508 USB-CAN总线适配器。这样,PC可以直接通过USB总线连接至CAN-bus网络,不用每次调试都在控制器的CAN数据就能构成现场总线等CAN-bus网络领域中的CAN-bus网络控制节点,加快调试进度。

6.结论

采用带SPI接口的MCP2515独立CAN控制器给PXA168微处理器扩展CAN接口,既降低了硬件电路的复杂性,也保证了CAN总线通讯的稳定性和效率。采用该方案扩展的CAN总线接口已经应用到自行开发的车载终端无线传输系统中,经实验表明,取得了良好的数据传输效果。

[1]基于S3C2410与MCP2515的CAN总线接口设计.黑龙江:佳木斯大学学报(自然科学版)(第29卷第2期)2011年03月.

[2]Microchip公司.Stand-A lon e CAN C ont rollerW ith SPI Interface,2003.

[3]邬宽明.CAN总线原理和应用系统设计[M].北京:北京航空航天人学出版社,1996.

[4]广州周立功单片机发展有限公司.CAN-bus规范V2.0版,http://www.zlgm cu.com.

[5]陶志东,周纯杰,宋明权,龚云生.基于PXA168的CAN总线通信设计与开发[J].可编程控制器与工厂自动化,2006,01.

[6]王继国,吉吟东,孙新亚.CAN总线控制器MCP2515的原理及应用[J].电测与仪表,2004,41(1).

梁芳芳(1976—),女,广东梅州人,毕业于中山大学,硕士,电子工程师,讲师,现供职于广东工程职业技术学院,主要研究方向:通信技术。

王力(1984—),男,广东梅州人,毕业于电子科技大学,硕士,现供职于广东工程职业技术学院,研究方向:电子技术。

猜你喜欢

网络设备寄存器中断
网络设备的安装与调试课程思政整体设计
STM32和51单片机寄存器映射原理异同分析
Lite寄存器模型的设计与实现
一种基于C# 的网络设备自动化登录工具的研制
跟踪导练(二)(5)
千里移防,卫勤保障不中断
基于列车监测网络设备的射频功放模块设计
基于三层交换技术架构数字化校园网络设备的配置与管理
FPGA内嵌PowerPC的中断响应分析
高速数模转换器AD9779/AD9788的应用