基于PCI总线的CAN卡的设计与实现

2009-11-06 20:59:56来源: 电子技术应用

  现场总线CAN(Controller Area Network控制器局域网络)以其高性能、高可靠性及独特的设计,越来越受到人们的重视和青睐,不但在汽车行业中应用广泛,而且在工业控制、机器人、医疗器械、传感器等领域发展迅速。为了扩展CAN总线的功能,与计算机相连,可设计具有CAN接口和PC接口的CAN适配卡,用来收集CAN总线上各个节点的信息,转发给PC机,并可将PC机的命令和数据转发给各个节点以及完成对CAN总线上的用户系统的部分监控和管理工作。

  PCI总线是Intel公司推出的一种先进的高性能32/64位局部总线,可同时支持多组外围设备,不受制于处理器,数据吞吐量大 (33MHz总线频率、32位传输时峰值可高达132MB/s)。目前PCI是处于主流的计算机总线。以往的CAN卡一般都是基于ISA总线的,由于 ISA总线传输速率低,CAN卡必须增加中继控制功能,才能够适应CAN的高速传输,导致造价高、体积大、传输速率低,不利于CAN总线的推广应用。由于 PCI总线传输速度快,而且支持热插拔、电源管理等功能,不但能满足CAN总线的高速数据传输,性能高、功能强,而且体积小、价格低、使用方便、应用范围广。

  CAN卡的设计包括硬件设计和软件设计。

  1 硬件设计

  PCI总线是一种独立于CPU的局部总线,不同于传统的ISA总线。由于PCI总线规范定义了严格的电气特性和时序要求,开发难度比ISA总线的开发难度大。实现PCI接口的方案一般有两种:采用可编程逻辑器件和专用总线接口器件。采用可编程逻辑器件实现PCI接口的最大好处是比较灵活,可把PCI时序模块和功能模块结合在一起,可以利用的器件也比较多(如Altera公司的CPLD器件、Xilinx公司的FPGA器件等),还可以购买由厂家提供的用 VHDL、AHDL等硬件描述语言编制的PCI核心设计模块,但其设计难度还是很高,因为PCI总线对负载要求、传输数据的建立时间的要求都比较苛刻,同时还需要器件内部实现用于配置的各类寄存器,以及完成逻辑校验、地址译码等工作的寄存器(大致需要15000个门电路)。此外,还需加入FIFO、用户寄存器组和后端设备接口等部分。设计这种PCI总线接口会导致将大量的人力、物力投入到复杂的逻辑验证和时序分析的工作上,开发周期较长。采用专用接口器件虽然没有采用可编程逻辑器件那么灵活,但能够有效地降低接口设计的难度,缩短开发时间。专用接口器件具有较低的成本和很高的通用性,能够优化数据传输,提供配置空间,具备用于突发传输功能的片内FIFO,提供扩展局部总线等优点,并且许多公司还提供配套的开发工具(例如评估板或驱动程序开发软件),使用很方便,开发周期短。目前市场上常见的有PLX、AMCC、Cypress等公司的PCI桥芯片,各个型号的PCI接口芯片的大致特点如表1所示。

PCI接口芯片

  PCI设备可分为主模式和从模式。主模式桥芯片可以进行DMA操作,而从模式只能接受读写操作。根据PCI提供的传输数据带宽(最大132MB/s)和 CAN总线(最大1Mbps)的要求,加上经济和开发难度与周期上的考虑(主模式桥芯片较昂贵,开发难度较大),又因不需要DMA功能,采用从模式桥芯片足以满足传输数据的需要。此外,选择芯片不仅考虑性能和经济上的要求,而且还需要考虑硬件开发和驱动程序开发的难易。如果不提供足够的芯片说明和应用样例及开发工具,将大大增加开发难度和延长开发周期。因此,采用PLX公司的PCI总线目标接口芯片PCI9052作为CAN卡中的PCI接口芯片,负责与计算机之间的数据通信。

  PCI9052是PLX公司开发的低价格PCI总线从模式接口芯片,低功耗,符合PCI2.1规范,提供的局部总线(Local Bus)可通过编程设置为8/16/32位的(非)复用总线。其主要特点有:

  (1)直接数据转换模式 PCI9052支持PCI到Local Bus的内存映射和I/O映射的突发读写。

  (2)ISA接口逻辑 PCI9052支持通过8/16位内存映射或I/O映射从PCI到ISA总线的单周期读、写访问。方便从ISA卡向PCI卡的转换。

  (3)中断产生器 由Local Bus的两个中断信号可以产生一个PCI中断信号:INTA#。

  (4)局部总线 PCI9052提供的局部总线不但可编程,而且与PCI总线的时钟相互独立运行,可实现异步操作,总线操作自动实现时序同步。两总线的异步运行方便了高、低速设备的兼容。局部的运行时钟频率范围0~40MHz、TTL电平,可由PCI提供或由用户自行提供;PCI的运行时钟频率范围0~33MHz。

  (5)串行EEPROM 用于存放PCI BUS和Local Bus的部分配置信息。

   (6)4个局部设备片选 基址和地址范围可以由串行EEPROM或主控设备进行设置。

  (7)5个局部地址空间 基址和地址范围及其映射可以由串行EEPROM或主控设备进行设置。

  (8)Big/Little Endian模式的字节交换 适合不同计算机体系。

  (9)局部总线等待状态 除了等待信号LRDYi#用于握手之外,PCI9052还有一个内部等待产生器(包括地址到数据周期、数据到数据周期和数据到地址周期的等待)。

  (10)延迟读模式 PCI9052支持PCI2.1规范的延迟读模式。

  (11)FIFO PCI9052包括一个64Byte的写FIFO和一个32Byte的读FIFO,从而支持预取模式、即突发操作。

  (12)PCI锁定机制 主控设备可以通过锁定信号占有对PCI9052的唯一访问权。

  由于CAN总线的迅猛发展,许多芯片厂商开发了很多系列的CAN通信控制器芯片。如表2所示。

CAN通信控制器芯片

  由于PCI9052可以启动局部总线的读写,CAN卡不再需要微控制器,采用CAN通信控制器即可,本CAN卡采用SJA1000。SJA1000支持 BasicCAN和PeliCAN模式,具有FIFO、支持热插拔等功能,不但可以实现CAN总线接口功能,而且芯片可以根据晶振的频率,输出可编程的 CLKOUT信号,该信号正好可作为PCI9052的局部总线的总线频率,节省了器件,方便了设计。CAN总线的总线频率可为12MHz、16MHz或 24MHz,PCI9052自动实现局部总线与PCI总线的访问同步。CAN总线收发器采用82C250。该芯片是CAN总线控制器和物理总线的接口,可以提供对CAN总线的差动发送和接受能力,具有抗瞬间干扰、保护总线的能力,可以通过调整CAN总线上通讯脉冲的边沿斜率来降低射频干扰。

  由于PCI设备在计算机中的硬件资源是系统动态分配的,因此在设计出基本的硬件框架后,要进行PCI配置设计。CAN卡的硬件资源为映射SJA1000内部寄存器的内存映射空间和一个中断源。PCI9052提供5个局部地址空间,可以选用其中的一个作为SJA1000的地址空间,分配32个8位地址。同时设置相应的初始化,PCI配置寄存器中的寄存器PCIBAR2设置为0XFFFFFFE0,向系统请求分配内存的数量为32,类型为不可预读,其它寄存器的值可设置为0。设置局部地址空间的范围为0X00000000~0X00000020。PCI9052提供2个局部中断源,利用LINTi1即可,注意的是:LINTi1信号线没有驱动能力,SJA1000的INT引脚也没有驱动能力,因此该信号线必须加上拉电阻,否则该信号线的电平不确定,工作肯定不正常。SJA1000提供电平触发中断信号,因此PCI9052的中断触发模式设置为电平触发。利用PCI9052的局部设备片选CS0#作为 SJA1000的片选信号。CS0#片选信号的起始地址和地址范围由CS0 Base Address寄存器设置,值为0X00000002。另外,PCI9052的LRDYi#信号为局部总线数据准备信号,SJA1000的寄存器地址映射成地址,数据传输不存在延迟等待,因此LRDYi#引脚可接地,表示SJA1000的寄存器总是立即可读写。PCI9052寄存器的初始值由串行 EEPROM提供,在PCI9052加电后读取。EEPROM必须采用支持连读功能的芯片,本设计采用Microchip的93LC46B。用PLX公司提供的开发工具PlxMon可对93LC46B进行读写。

  PCI9052的硬件调试可采用PlxMon。利用它可以对PCI设备的配置资源进行检验。利用PLX提供的SDK,可以对PCI9052的局部寄存器、局部总线及EEPROM进行读写,这样可以调试硬件。借助开发工具,不必开发PCI设备的调试软件,可节省很多时间。同时,SDK也为驱动程序的开发提供了程序框架,加快了开发进度。

  2 软件设计

  软件设计包括驱动程序的设计和COM组件程序设计。

  由于PCI设备的中断、I/O端口、映射内存等资源都是动态分配的,必须编写驱动程序管理硬件,才能供用户编程使用。为了通用性和兼容性,CAN卡驱动程序的开发采用支持Windows XP、Windows2000和Windows98的WDM驱动程序。开发工具采用Visual C++6.0和Win2000 DDK。由于CAN卡上没有微控制器,因此对CAN总线端口的所有操作都是由驱动程序来完成的。这不仅可以由计算机来实现复杂的功能,例如,错误检测、断点续传等,同时节省了硬件,而且有利于CAN卡的升级——只要更换驱动程序即可。驱动程序的功能主要是配置SJA1000的CAN接口、收发CAN总线上的数据、对CAN总线进行实时监测、接收用户程序的收发命令。收发数据和CAN总线错误均采用中断处理,驱动程序可以快速响应,通过事件(Event)内核对象直接通知给用户程序。由于WDM驱动程序运行在系统的内核态,编写非常复杂,限于篇幅,仅给出软件的框图(见图2)。

   CAN卡的电路框图如图1所示。

CAN卡的电路框图

  为了方便用户的使用,还应编写相应的API函数或ActiveX控件等其它应用层的程序提供给用户。由于ActiveX控件基于先进的COM技术,具有良好的封装性、使用灵活性等特点,可使用户编程简单、方便,因此在CAN卡的设计中编写了ActiveX控件。ActiveX控件负责与驱动程序的通信,通过控件的事件把CAN卡接收的数据通知给用户程序,利用控件的属性设置CAN通信控制器,按照设置的方法发送用户程序的数据。

应用层的程序

  根据以上的设计,开发了名为Can1000的CAN卡。经使用证明,该卡设计简单明了、性能较高、成本低廉、驱动程序和ActiveX控件使用方便,达到了设计和用户的要求。

关键字:PCI总线  PCI9052  CAN总线  SJA1000

编辑:金海 引用地址:http://www.eeworld.com.cn/gykz/2009/1106/article_2285.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
PCI总线
PCI9052
CAN总线
SJA1000

小广播

独家专题更多

TTI携TE传感器样片与你相见,一起传感未来
TTI携TE传感器样片与你相见,一起传感未来
TTI携TE传感器样片与你相见,一起传感未来
富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
走,跟Molex一起去看《中国电子消费品趋势》!
走,跟Molex一起去看《中国电子消费品趋势》!
 
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved