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

时间:2022-08-06 03:22:59

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

摘要:介绍了pci桥接口芯片pci9052和can接口芯片sja1000,给出了基于pci总线的can总线适配卡软硬件的设计思路、过程及实现方法。

关键词:pci总线 pci9052 can总线 sja1000

现场总线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所示。

表1 各公司pci接口芯片

公 司芯片型号(模式)芯片功能及特点价 格开发技术支持

plxpci9052(从)

pci9054(主)型号众多,使用方便,性能好较便宜提供快速开发板rdk出售

cypresscy7c09449pv-ac(主)内置dpram,有效降低系统成本便宜技术文档

tipci2031(从)

pci1251(主)与ti的DSP可无缝连接很便宜提供评估模块

amccamcc5920(从)

amcc5933(主)fifo接口适合于设计数据采集卡,性能好较昂贵提供评估板

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所示。

表2 主要can总线芯片

制造商芯片型号芯片功能及特点

intel82527

8xc196ca/cbcan通信控制器,符合can2.0b

扩展的8xc196+can通信控制器,符合can2.0b

philipssja1000

82c250

p51xa-c3can通信控制器,符合can2.0b

高性能can总线收发器

16位微控制器+can通

信控制器,符合can2.0b

motorola68hc05x4系列68hc05微处理器+can通信控制器

nec72005can通信控制器,符合can2.0a/b

由于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。用pcx公司提供的开发工具plxmon可对93lc47b进行读写。

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

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

2 软件设计

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

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

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

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

上一篇:焊缝检测系统中PCI总线高速数据采集卡的设计 下一篇:基于PCI总线的雷达视频的采集方案