采用PLX9052的接口卡在逻辑上可分成三个功能模块:PCI接口部分、EEPROM部分和局部总线部分,如图2所示。
PLX9052提供完备的PCI从设备支持,PCI接口部分的47根信号线可以直接与PCI连接器(俗称金手指)连接。PCI连接器上有两根特殊的引线PRSNT1
#和PRSNT2#,它们不参与PCI协议操作,只用来告知主板该卡消耗的电功率。
PLX9052将PCI总线上的操作转换为对局部总线的操作,即通过LAD0~LAD7、RD、WR、CS等对SJA1000的寄存器进行访问。举例来说,如果系统上电后分配给本卡的存储器地址空间为F680 0000~F680 001F,那么当系统通过PCI总线访问这个区域时,PLX9052会应答,并将其转换为局部地址0x0000~0x001F,对应于SJA1000的32个内部寄存器。另外,PLX9052自身也有一些内部寄存器,它们被自动映射到另一片内存区域,可通过PCI总线直接访问。
PLX9052提供三种类型的局部总线信号:标准ISA模式、复用模式和非复用模式,其中复用模式和SJA1000的接口最吻合。此模式的信号和8051CPU输出的信号基本相同,可以直接与SJA1000及其它类似接口的芯片相连,只是片选信号不再需要外部地址译码电路,而是由PLX9052内部逻辑完成。
局部总线的时钟可以与PCI时钟异步,由有源晶振提供。控制信号LHOLD接地表示局部总线无需申请等待周期。LINTi1是中断申请线,接有上拉电阻,确保无中断时停靠在空闲状态。USER0~USER4是可编程I/O引脚,USER0、1设备为输入,USER2、3设置为输出,由PLX9052的内部寄存器控制,实现数字I/O功能。SJA1000和82C250构成CAN总线接口电路,最高可支持1MHz的通信速率。
EEPROM部分用于初始化PLX9052的寄存器,在系统上电后读取。PLX9052的EECS、EEDO、EEDI、EESK引脚分别与串行EEPROM 93LC46的对应引脚相连,其中EEDO引脚加有上拉电阻,使得在未安装EEPROM时,EEDO始终保持高电平状态,PLX9052仍然能够以缺省设置运行。以下对内个主要寄存器的设备进行说明。
VendorID和DeviceID:生产厂商代号和芯片代号。VendorID由生产商向PCISIG申请,DeviceID由生产商自行制定。PLX公司的VendorID为10B5,PLX9052的DeviceID为9050,故设为10B5 9050。
ClassCode:表示PCI卡属于哪种类型,如多媒体卡、显卡等。本设计中将其定为0000 0680,表示PCI桥(PCI Bridge)设备。
Local Address Space 0 Range:设为FFFF FFE0,表示申请32字节的存储器空间。
Local Address Space 0 Local Base Address(remap)设为0000 0001,表示将PCI总线上的地址转换为局部总线地址0x0000~0x001F。
Chip Select 0 Base Address:设为0000 0011,表示在局部总线地址为0x0000~0x001F时,局部总线的片选信号有效,用于SJA1000的片选。
Interrupt Control/Status:设为0000 0041,表示中断使能,响应LINTi上的中断申请。
CNTRL:设为0060 0C80,表示USER0、USER1引脚用于输入,USER2、USER3引脚用于输出,初始值分别为0、1,PCI数据传输等待超时长度为12个时钟周期。
根据PCI标准和PLX9052的说明文档,PCI连接器上所有的VCC、Vi/o 5V电源连接到一起,所有的GND端连接到一起,在尽可能靠近PLX9052电源引脚的地方放置高频去耦电容。PCI总线的时钟频率为33MHz,不恰当的布线会导致信号线之间的延时关系混乱,因此PCI协议对布线做了严格的规定,要求主时钟PCI_CLK线的长度为2.5英寸,误差应小于0.1英寸,其它引线短于1.5英寸,推荐使用四层板。设计中可以参考市面上的声卡和网卡布线实例,如考虑成本等因素,也可只使用两层板,双面覆铜接地。经实验验证该卡能够稳定工作。
在退出应用程序前,先清除所有未处理的中断,释放分配的内存,再用CAN01_Close()删除CAN01,最后使用WD_Close()关闭驱动程序。
对SJA1000和PLX9052的寄存器的操作通过两个函数完成,可以实现CAN总线通信和数字量I/O等功能:
读操作CAN01_ReadByte(),
写操作CAN01_WriteByte()。
本文根据笔者的实验经验,介绍了开发PCI总线扩展卡的软硬件流程,给出了一套快速可行的解决方案。该方案电路简单、调试方便、编程高效、可以使技术人员迅速掌握PCI总线的开发技术,从而设计符合个性要求的多功能扩展卡。