《电子技术应用》
您所在的位置:首页 > 其他 > 业界动态 > 一种高性价比CAN总线适配卡的设计与实现

一种高性价比CAN总线适配卡的设计与实现

2008-12-17
作者:张素文, 龚 曦, 池宏军

  摘 要: 针对传统CAN总线设备存在的系统规模大、功耗高、成本高等问题,提出并实现了一种高性价比CAN适配" title="适配">适配卡系统。介绍了系统总体结构,阐述了软硬件组成及其功能,并给出硬件具体设计方案及驱动程序的实现方法。经实践证明,该适配卡系统完全可满足实际需要且结构简单、能耗低、稳定性能好。
  关键词: CAN总线; 适配卡; 驱动程序; 动态链接库

 

  CAN总线是众多现场总线中的一种,因其廉价高效的特点在工业生产的各个领域得到极广泛的应用。目前市场上有很多型号的CAN总线设备,大多数使用并行总线器件和可编程逻辑器件,从而增加了规模和复杂程度,提高了系统功耗和成本。针对以上问题,本文提出一种高性价比CAN适配卡设计方案。该方案采用廉价高性能的16位ARM芯片LPC2212为核心控制器,以低能耗的SPI接口器件MCP2515代替传统的并行接口器件作为CAN总线控制器,以带PCI总线控制器的128KB双口RAM 芯片CY7C09449PV-AC作为上位机" title="上位机">上位机与局部总线" title="局部总线">局部总线的连接中介,免去复杂的时序设计,有效地降低了系统的功耗,缩小了系统的规模,实现了高性价比。
1 系统总体结构
  图1为适配卡系统结构图。系统由上位机总线接口和CAN总线接口两大模块组成,选择PCI为与上位机接口的总线。如图1所示,PCI总线接口由PCI接口控制器和EEPROM组成, PCI接口控制器完成将PCI信号转换成局部总线信号的功能,EEPROM则存储PCI总线和局部总线的配置信息,系统上电时,PCI接口控制器会自动读取完成配置过程[1]。CAN总线接口由微处理器、CAN控制器、CAN收发器和光电隔离器四部分组成[2]。CAN控制器是CAN总线的核心单元,完成CAN通信协议的全部要求。CAN收发器提供对总线的差动发送能力和对控制器的差动接收能力。光电隔离器则实现收发器与控制器之间的电气隔离,保护控制系统电路。系统采用16位微处理器LPC2212为控制器,主要功能是对CAN控制器的初始化和上行传输数据(CAN总线向上位机传送数据)、下行传输数据(CAN总线向下位机传送数据)的预处理。

 

 


2 系统硬件设计
2.1 PCI总线接口芯片的选择
  PCI总线功能强大,具有良好的兼容性。但同时它的协议十分复杂,设计上有一定的难度。其接口芯片的选择最简单有效的方法就是使用芯片厂商制造的专用PCI总线接口芯片。选择带PCI总线控制器的128KB双口SRAM存储器CY7C09449PV-AC作为PCI总线和局部总线的桥接芯片。
  CY7C09449PV-AC包含有128KB的共享存储空间,能提供满足PCI 2.2规范的主、从模式接口,且具有与局部总线微处理器兼容的接口,是一款优质廉价的PCI总线控制器[3]
  除了完成将两种总线连接的基本功能外,CY7C09449PV-AC的使用还能够避免冗余复杂的时序设计。因其含有一个可供PCI总线和局部总线共享的双口RAM,在需要进行通信时,将通信发起方待发送信息存储到共享RAM中,再由通信的接收方读取存储在RAM中的内容,从而实现通信,避免了CPLD、FPGA等可编程逻辑器件的使用,大大简化了系统的复杂程度。
2.2 CAN总线接口的实现
  采用16位ARM微处理器芯片LPC2212、独立CAN控制器MCP2515、高速CAN收发器TJA1050以及光电隔离器6N137共同完成CAN总线接口电路的实现。MCP2515是一款独立CAN协议控制器,它因带有两个验收屏蔽寄存器和六个验收滤波寄存器而可以过滤掉不满足条件的报文,减少微处理器的开销。此外,它不同于一般的并行总线控制器,MCP2515与微控制器的数据传输是通过SPI接口来实现的,大大节省了I/O" title="I/O">I/O口和降低系统功耗[4]。高速CAN收发器TJA1050是传统CAN总线收发器PCA82C250的后继产品,能够实现CAN控制器和通信线路的物理连接,提高CAN总线的驱动能力和稳定性。为了进一步提高系统的抗干扰能力,将MCP2515的TXCAN、RXCAN引脚通过高速光电隔离器6N137后与TJA1050相连,这样可以使适配卡不受地面环流的影响,有效地实现电气隔离,确保系统稳定性。
  图2为CAN接口硬件连接图。需要特别指出的是:(1)MCP2515的片选信号直接连接到LPC2212任一标准I/O口引脚,在进行数据传输时须通过编程将该I/O口引脚的电平拉低,以确保MCP2515时刻被选中,否则传输将被终止; (2)同一时刻系统只允许一个主机操作总线,系统配置LPC2212为 SPI主机,根据其使用规则,SSEL引脚必须保持高电平,才能真正执行主机功能[3];(3)图2(a)是MCP2515的复位电路。MCP2515有两种复位方式:硬件复位和SPI复位,系统采用在RESET引脚上连一个RC电路实现MCP2515的硬件复位。电路中二极管的作用是在VDD5掉电时帮助电容快速放电。R2的作用是限制从电容流入RESET引脚的电流,以避免RESET引脚因静电放电或过度电性应力而击穿,其阻值选取在1kΩ~10kΩ之间。

 


2.3 PCI_CAN总线互连设计
  因CY7C09449PV-AC提供了与局部微处理器兼容的接口,故可直接与LPC2212连接。CY7C09449PV-AC与LPC2212的连接电路图如图3所示。READ和WRITE分别是存储器的读、写信号线,LPC2212没有专门的引脚提供读写信号,采用两个I/O口连接到外部存储器的读写引脚,通过编程产生读写信号时序。RDY_IN和RDY_IN是局部总线引脚,表明局部微处理器已准备好进行数据操作,将两引脚分别上拉和下拉,表示总是有效。IRQ_IN和IRQ_OUT分别是数据存储器的中断输入和中断输出引脚,IRQ_IN可以接收来自LPC2212的中断信息,并通过PCI控制器传递到INTA引脚,进而到达上位机;IRQ_OUT可将中断信息传送到局部微处理器以便进行数据操作。如图3所示,将IRQ_OUT连接到LPC2212的P0.3外部中断1输入引脚,而配置P1.16为标准I/O口连接到CY7C09449PV-AC的IRQ_IN,并编程实现中断信号的输出。RDY_OUT为CY7C09449PV-AC的准备好应答信号,当此引脚电平有效时,说明存储器已准备进行数据操作,将其与LPC2212的已配置为标准I/O口的P1.17相连,编程查询存储器的状态。MCP2515的片选信号是由LPC2212的部分地址线通过DPLD(地址解码PLD)逻辑处理后产生。其优点是地址解码PLD电路不仅提供CY7C09449PV-AC的片选信号还可以提供其他器件的片选信号,给系统留下充分的扩展空间。

 

3 系统软件设计
3.1 适配卡程序设计

  适配卡程序调度微处理器完成MCP2515的初始化、上行数据传输和下行数据传输三大功能。MCP2515的初始化主要包括:设置模式、总线时序、中断使能、标识符表格等,这些设置均通过向其对应的寄存器赋值来完成。进行下行数据传输时,由CY7C09449PV-AC接收来自上位机的数据并向LPC2212发出中断信号,LPC2212读取共享存储器中的数据并将其通过CAN控制器MCP2515发送到CAN总线上。进行上行数据传输时,MCP2515接收到来自CAN总线的数据并向LPC2212发出中断信号,LPC2212将存储在MCP2515接收缓冲器中的数据传送到共享存储器,并通过CY7C09449PV-AC向PCI总线发出中断,上位机程序读取数据。
  CY7C09449PV-AC作为两种总线的中介部分,该双口RAM有16KB的共享空间。以上位机为参照把它分成单个容量为8KB的两个区间,如图4所示。0x4000H~0x5fff为发送帧空间,0x6000H~0x7fffH为接收帧空间,0x4E8H是上位机对局部处理器的邮箱HLDATA的地址,0x4F8H是局部处理器对上位机的邮箱LHDATA的地址。把发送空间和接收空间设计成两个循环分别用两个指针来控制,在HLDATA中存放上位发送帧地址指针和上位接收帧地址指针,在LHDATA中存放局部发送帧地址指针和局部接收帧地址指针。上位机每接收一个帧,上位接收帧地址加1;每发送一个帧,上位发送帧地址加1。LPC2212每接收一个帧,局部接收帧地址加 1;每发送一个帧,局部发送帧地址加1。这样能有效直观地控制共享区间,简单实用。

 

3.2 上位机软件设计
  系统上位机软件包括CAN适配卡驱动程序和应用程序动态链接库" title="动态链接库">动态链接库两大部分。
3.2.1 CAN适配卡驱动程序设计
  驱动程序主要完成的功能包括:列举设备、找到所需设备、列举设备所有资源、锁定设备资源、访问设备资源、解锁设备资源和释放设备。具体完成如下工作:(1)帮助上位机获取CAN适配卡上的资源;(2)CAN适配卡的I/O口控制,包括上位机对适配卡的读写;(3)CAN适配器的中断控制,系统只对接收中断开放,当MCP2515收到来自CAN网络的数据时通过LPC2212产生中断信号,驱动程序立即进行中断处理,将收到的数据放入接收缓冲区。
  采用Windriver开发系统驱动程序,该软件主要开发ISA、USB、PCI接口的硬件设备驱动,并包含有Windriver Wizard、Windriver发行包、多个公用程序等资源,完全能够达到设计要求[5]。开发过程如下:(1)使用自带的Driver Wizard工具查找需要编写驱动程序的适配卡,并用CREATE INF FILE产生INF文件,然后添加新硬件;(2)设置适配卡上的配置寄存器;(3)对适配卡上的I/O空间、内存空间、中断资源进行配置,以便驱动程序能获得这些资源;(4)自动生成源代码,并人为进行功能代码的添加,如中断服务程序等。
3.2.2 动态链接库的设计
  动态链接库是上层应用程序与底层驱动程序的接口,被应用程序调用并借助驱动程序对物理硬件进行数据操作[6]。由于Windows具有与设备无关的特性,如果直接用Windows的API函数或I/O读写指令进行访问和操作,程序运行时往往会产生保护模式错误甚至死机,更严重的情况会导致系统崩溃。用动态链接库技术可以方便地解决上述问题。将Windows的API函数或I/O读写指令的访问和操作封装成一个DLL,用CreateFile( )函数打开设备,用I/O管理器构造一个IRP传送给总线驱动程序,由驱动程序完成该请求或者请求进一步传送给端口驱动程序,然后返回执行状态。本系统的动态链接库主要包含以下四个功能函数:(1)PCICAN_Actv:获取一个用于对适配卡进行读写操作的指针;(2)PCICAN_TrnsDat:用于向CAN总线上的节点发送信息;(3)PCICAN_RecvDat:用于接收来自CAN总线上的信息;(4)PCICAN_Deactv:用以关闭CAN通信卡,释放设备资源。
  本文在充分研究了市场上的CAN总线适配卡的基础上,成功地设计了一款基于PCI的CAN总线适配卡。将适配卡插在PC机上与一自制CAN总线节点进行通信,该卡在长时间的测试中能保持正常运转、性能稳定、通信速度快、发热量低、占用CPU时间少,有较好的可靠性和实时性。且结构简单、规模小、性价比高,符合当今电子设备的发展趋势。


参考文献
[1]  李贵山,戚得虎. PCI局部总线开发者指南[M]. 西安:西安电子科技大学出版社,2000.
[2]  邬宽明.CAN总线原理和应用系统设计[M].北京:北京航空航天大学出版社,1996.
[3]  Cypress Semiconductor Corporation, CY7C09449PV-AC data book[S]. 2002.
[4]  Microchip Technology Inc. MCP2515 data book[S].2005.
[5]  张熙,王悠. PCI总线高速数据传输系统设计[J].微计算机信息,2007,(1):34,142-143.
[6]  CANT C著.Windows WDM设备驱动程序开发指南[M].孙义,马莉波,国雪飞,等译.北京:机械工业出版社,1999.

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。