基于PCI CAN的数据转换系统设计
扫描二维码
随时随地手机看文章
CAN总线是当前最流行的工业现场总线之一,PCI则是一种应用普遍的高速同步总线,具有32 bit带宽,时钟频率为0~33 MHz,最大传输速率可达132 Mbit·s-1,广泛应用于数字图像、语音及数据实时采集与处理等领域。本文利用PCI9054接口芯片、FPGA、微处理器与CAN收发器实现CAN总线与PCI总线问的快速数据交换。
1 总体设计
PCI_CAN数据转换系统用于实现上位机的控制信息与CAN总线上各节点间的状态、数据信息交换功能。系统通过PCI接口芯片与FPGA将上位机发出的控制信息发送给微处理器,由微处理器控制CAN收发器对CAN总线各节点进行查询;同时CAN总线节点的状态、数据信息上传给CAN收发器,由微处理器控制将其送入FPGA中缓存,再由PCI接口芯片上传至上位机做进一步数据处理、存储操作。
PCI_CAN数据转换系统主要由PCI接口模块、FPGA逻辑模块、微处理器与CAN收发器模块及时钟电路4部分组成,其原理框图如图1所示。
PCI接口模块完成PCI总线与本地总线间的数据交换。FPGA完成对PCI接口芯片和微处理器的逻辑控制、总线仲裁等任务,且与微处理器之间通过SPI方式进行数据交换。由于CAN节点以“帧”为单位上传数据,系统使用FPGA内嵌的内存块生成FIFO,进行数据缓存;同时上位机的控制信号只有一个长字,无需FIFO缓存。微处理器与CAN收发器模块接收来自上位机的控制信号,实现对各CAN节点的查询、监视功能;同时控制CAN收发器,将CAN节点上传的数据打包、发送至FPGA。时钟电路由40 MHz和25 MHz军品级晶振组成,提供PCI接口电路局部总线工作时钟、FPGA主时钟、微处理器工作时钟。
2 模块设计
2.1 PCI接口模块设计
PCI9054是美国PIX公司生产的PCI桥接芯片,符合PCI总线规范,支持主模式、从模式及DMA传输方式,广泛应用于嵌入式系统中。
PCI9054在本模块中的连接框图如图2所示,其中PCI总线信号与PCI连接器相连,包括地址/数据复用信号AD[31:0],总线命令信号C/BE[3:0],PCI协议控制信号PAR、FRA ME#、IRDY#、TRDY#、STOP#、PERR#、SERR#、IDSEL;EEPR()M接口信号直接与配置芯片连接,包括EESK、EEDO/EEDI、EECS;本地总线信号与FPGA相连,包括地址总线LA[13:2],数据总线LD[31:0],LBE[3:0]#字节使能信号及控制信号LW/R#、BLAST#、READY#、ADS#。
设置PCI9054芯片的MODE[1:0]管脚,选择工作模式为C模式;配置PCI9054相关寄存器,设置数据传输方式为DMA和PCI从设备方式协同操作。DMA传输是在PCI9054控制下,完成PCI端存储器和LOCAL端存储器间的大数据量传输。
本文选用串行EEPROM芯片93CS56L。在系统复位后,完成对PCI内部寄存器的初始化配置,包括设备标识、状态寄存器、控制寄存器、中断寄存器、本地总线上设备的地址、空间等信息。由于需要对串行EEPROM进行写操作,芯片须处于可编程且非保护状态,如图3所示。
2.2 FPGA逻辑模块设计
FPGA芯片选用Altera公司的Cyclone IV系列工业级芯片。EP4CE10E22I7,该芯片用户可用管脚为92个,逻辑单元大小为10 320 bit,分布式RAM总容量144 kbit,嵌入式块状存储器SRAM容量270kbit,可满足设计需求;采用Verilog HDL语言进行逻辑设计,FPGA逻辑功能框图如图4所示。
上位机需查询CAN节点状态、数据信息时,PCI9054数据传输方式为PCI从设备。PCI总线主设备,即上位机,访问PCI9054的本地空间,向内存空间写一个长字的控制数据。本地总线将该数据读出并发送至FPGA,通过微处理器对CAN总线某节点进行查询。
CAN总线节点的数据上传功能通过PCI9054的DMA模式实现。PCI9054集成了两个相互独立的DMA通道,每个通道都支持块DMA和分散/集中DMA传输。块DMA传输由上位机提供PCI总线和本地总线的起始地址、传输方向及传输字节数。在块DMA传输中,作为PCI总线和本地总线的主控设备,PCI9054使能本地总线的中断等待状态;FIFO半满信号HALF#有效时,FPGA拉低本地总线的LINT#信号,产生中断;PC响应中断,在中断处理子程序中调用DMA程序,发起DMA传输;传输完成时,PCI9054设定DMA“传输结束位”结束DMA操作。
SPI接口逻辑接收、处理来自微处理器的帧数据,产生FIFO写使能信号,并将去掉帧头后的有效数据存入FIFO;锁相环PLL用于产生FIFO写时钟与SPI接口逻辑主时钟。
系统设计一次DMA传输数据为100 Byte,因此使用FPGA的内嵌内存块生成FIFO。该FIFO深度为128 Byte,宽度为8 bit;且只缓存CAN节点的上传数据,而不存储上位机的查询控制数据。本地总线接口逻辑单元根据控制信号、地址信号及半满信号HALF#,产生FIFO读使能,将有效数据传输至PCI9054;其中本地总线端时钟信号LCLK作为FIFO读时钟。
2.3 微处理器与CAN收发器模块设计
该部分电路由ARM公司的微处理器STM32F105、隔离型CAN收发器ADM3053组成,如图5所示。
微处理器STM32F105集成CAN协议接口与SPI协议接口,可直接与CAN收发器连接,并将接收到的CAN数据、状态信息加入帧头,通过SPI口打包、发送到FPGA。
ADM3053集成了双通道隔离器、CAN收发器和ADI公司的isoPower DC/DC转换器;芯片内部振荡器输出一对方波,驱动内部变压器提供隔离电源。该器件采用5 V供电,最高工作频率为1 Mbit·s-1,其电路设计如图6所示,图中CAN_P、CAN_L作为差分信号线,以双绞线作为物理层传输。
3 应用软件设计
系统设计完成后,在Windows XP操作系统下,用C语言编写应用软件,并对系统功能与性能进行测试,软件界面如图7所示。
该应用软件发送开始接收信号,查询CAN节点数据和状态,控制CAN节点向上位机发送采集到的数据与当前节点的状态信息。上位机保存接收到的数据、状态信息并对其进行检查,显示出错位置。图7所示为进行了105次DMA传输、且保存9 kB数据、对数据进行检查后的显示界面。该测试过程中,CAN发送的每帧数据为0~99连续变化的数据,通过测试可以验证接收到的数据完全正确。
4 结束语
设计开发的PCI_CAN数据转换系统,数据最高传输速率为1 Mbit·s-1,最远通信距离>10 km,满足CAN总线的性能要求。采用FPGA+PCI9054的设计使系统便于升级和移植;在多种不同型号计算机中运行,均未出现因与计算机不相容而产生找不到PCI卡或蓝屏的现象,达到了设计和使用目的。