基于VxWorks 系统下P2020 的PCIE 转PCI 接口设计
2021-04-30王琪邓佳伟张梅娟
王琪,邓佳伟,张梅娟
(中国电子科技集团公司第五十八研究所,江苏无锡 214062)
随着PCIE 总线技术的广泛应用,采用高速差分串行的方式进行数据传输,具有高带宽、高可靠性、高拓展性等优点[1],其很好地弥补了PCI、PCI-X总线的不足。但许多应用场景依然需要适配原有的PCI 设备,尤其在航天航空系统中设备更新速度慢,兼容性要求高,该现象更为突出[2]。为了兼容PCIE 总线与PCI 设备,推动了一系列PCIE 转PCI 桥芯片的发展[3-5]。
PowerPC 架构处理器在嵌入式系统上表现非常优秀,其具备良好的处理性能和丰富的通信接口,在航天航空系统中广泛应用。
该方案采用FreeScale 公司的P2020 双核嵌入式处理器,该处理器内置两个最高频率可达1.2 GHz 的e500v2 内核,支持64 KB 的L1Cache,支持512 KB 的L2Cache,支 持32/64-bit DDR2/DDR3,具 有 三 路1 000/100/10 Mb/s 以太网控制器,三路高速PCIE 控制器,两路串行RapidIO 控制器。PCIE-PCI 转换桥芯片采用PLX 公司的PEX8112 芯片。
1 硬件设计方案
1.1 PEX8112芯片介绍
PEX8112 芯片是PLX 公司推出的一款PCIETO-PCI 转换桥芯片,通过PCI 总线与PCIE×1 总线的转换实现了两者之间的透明传输[6-9]。该芯片支持8 KB 共享内存,支持MSI 中断,支持INTx 虚拟中断,支持前向桥模式或后向桥模式,通过配置模块可以分别实现PCIE-PCI 转换或PCI-PCIE 转换。
该方案设计中采用PEX8112 桥片前向桥模式,将PCIE 信号转换成PCI 信号,进行数据传输[10]。
PEX8112 桥片内部结构如图1 所示。
图1 PEX8112桥片内部结构图
1.2 硬件系统框架介绍
P2020 处理器使用一路高速PCIE 接口连接至PEX8112 转换芯片,并将PEX8112 芯片设置成前向桥模式,完成PCIE-PCI 转换。通过PEX8112 转换芯片的PCI 接口连接Intel 82546 网卡,验证PCIE 转PCI接口的数据通路。硬件系统框架中P2020 处理器为主控端,外部从设备Intel 82546 网卡为从设备。
具体的硬件系统框架如图2 所示。
图2 硬件系统框架图
2 软件驱动开发
2.1 操作系统概述
VxWorks 操作系统具有卓越的实时性、良好的持续发展能力以及友好的用户开发环境,在嵌入式实时操作系统领域占据重要地位[11],广泛应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域[12]。
该方案采用VxWorks6.9 操作系统,支持VxBus设备驱动程序框架。在VxBus 驱动程序框架的支持下,驱动能在总线上发现设备,并执行初始化操作,使驱动与硬件设备之间正常通讯[13-15]。设备的驱动程序的安装、配置和删除都可以通过可视化界面操作。
2.2 设备驱动设计
VxBus 驱动开发由设备、驱动和实例3 个概念组成。设备表示硬件设备,驱动指编程代码,实例则是设备和驱动的一种关联,一个驱动可以匹配一个或多个设备。设备驱动实例关系如图3 所示。
图3 设备驱动实例关系
在VxBus 框架下,系统中各个功能模块通过总线进行信息传递,每个设备都可以选择合适的总线和主机相连,总线驱动通过不同的方法实现设备与驱动的匹配。具体配置方式如图4 所示。
图4 VxBus设备配置方式
基于VxBus 框架下PCIE 设备驱动开发主要包含设备初始化、设备驱动适配以及设备驱动组件添加。VxBus 驱动架构的初始化流程主要在sysLib.c文件中实现,首先通过sysHwinit() 函数调用hardWareInterFaceInit()函数完成VxBus 设备硬件内存分配,接着调用hardWareInterFaceBusInit()函数完成VxBus 设备实例建立和驱动总线注册,然后通过sysHwinit2() 函数调用vxbDevInit() 函数和vxDev Connect()函数,调用注册驱动driverNameInstConnect()函数,完成VxBus 设备驱动的初始化。
PCIE 设备的初始化过程中会调用m85xxPci.c 文件的vxbPciAutoConfig()函数,完成对PCIE 链路的扫描和配置[16]。
具体的PCIE 链路扫描和配置流程如图3 所示。
图5 PCIE链路的扫描和配置过程
首先根据PCIE 设备的配置信息,完成PCIE 控制器的基地址和地址空间的初始化。然后扫描PCIE 链路上的PCIE 设备,并判断该设备类型。如果是bridge 设备,分配当前bridge 设备的总线编号,使用Type 1 报文完成bridge 设备的配置,并重新进行PCIE 链路扫描;如果是EP 设备,分配当前EP 设备的总线编号,并获取EP 设备的地址空间,使用Type 0报文完成EP 设备的配置,并更新PCIe 链路上最大的总线编号数值和bridge 设备的地址空间分配,最终完成PCIE 链路的扫描和配置过程。
通过上述PCIE 链路的扫描和配置过程,完成PCIE控制器、PEX8112转换桥片及Intel 82546的配置,通过标准的PCIE 接口函数就可以访问到Intel 82546 网卡的相关信息。
2.3 设备驱动实现
基于VxBus 框架下PCIE 驱动开发需要添加“INCLUDE_PCI_BUS”、“DRV_PCIBUS_M85XX”、“IN CLUDE_PCI_BUS_AUTOCONF”和“INCLUDE_PCI_BUS_SHOW”组件[17]。在PCIE 设备的注册过程中,注册函数会通过hwConfig.c 文件中hcfResource[]和hcfDevice[]数组获取PCIE 设备的配置信息,最终完成PCIE 设备的注册。
基于VxWorks6.9 操作系统中hcfResource[]数组的PCIE 控制器关键配置信息如下:
m85xxPci0Resources 描述了PCIE 控制器在VxBus 中注册的基本信息,其中包括设备号(VXB_DEVID_DEVICE)、总线类型(VXB_BUSID_PCI)、VxBus 版本、设备ID 和厂商ID 信息等。
在hcfResource[]数组中主要完成了PCIE 控制器的基地址、PCIE 的内存地址空间、PCIE 的I/O 地址空间、PCIE 的InBound 基地址和OutBound 窗口属性,以及PCIE 控制器MSI 中断使能的配置,从而实现对PCIE 控制器的驱动。
针对Intel 82546 网卡驱动,需要在Workbench 3.3 软件中添加”INCLUDE_GEI825XX_VXB_END”的配置选项[18-20],完成Intel 82546 网卡的驱动注册,最终实现Intel 82546 网卡的数据收发。
3 测试与验证
基于VxWorks 操作系统对PCIE 转PCI 接口进行功能和性能测试,将专业网络分析仪连接Intel 82546 网卡的网口进行传输速率测试,测试的以太网帧长可选用不同长度(如:64 B、512 B、1 518 B 等),经过长时测试,Intel 82546 以太网卡最大传输速率可达到1 Gb/s 理论数值,验证了基于P2020 的PCIE 转PCI 接口传输满足设计要求。
具体测试结果如表1 所示。
表1 不同以太网帧长度速率测试结果
4 结束语
该方案主要介绍了基于VxWorks6.9 系统下P2020 处理器PCIE 转PCI 接口的传输设计与实现,介绍了系统硬件设计方案,简要概述了VxWorks 嵌入式操作系统的特点,详细介绍了基于VxBus 框架中设备驱动注册方法和PCIE 链路的扫描和配置流程。最终通过Intel 82546 网卡对PCI 接口进行功能和性能的测试,验证了基于P2020 与VxWorks 系统的PCIE-PCI 接口的数据通信的能力。