王琪,鄧佳偉,張梅娟
(中國電子科技集團公司第五十八研究所,江蘇無錫 214062)
隨著PCIE 總線技術的廣泛應用,采用高速差分串行的方式進行數(shù)據(jù)傳輸,具有高帶寬、高可靠性、高拓展性等優(yōu)點[1],其很好地彌補了PCI、PCI-X總線的不足。但許多應用場景依然需要適配原有的PCI 設備,尤其在航天航空系統(tǒng)中設備更新速度慢,兼容性要求高,該現(xiàn)象更為突出[2]。為了兼容PCIE 總線與PCI 設備,推動了一系列PCIE 轉PCI 橋芯片的發(fā)展[3-5]。
PowerPC 架構處理器在嵌入式系統(tǒng)上表現(xiàn)非常優(yōu)秀,其具備良好的處理性能和豐富的通信接口,在航天航空系統(tǒng)中廣泛應用。
該方案采用FreeScale 公司的P2020 雙核嵌入式處理器,該處理器內(nèi)置兩個最高頻率可達1.2 GHz 的e500v2 內(nèi)核,支持64 KB 的L1Cache,支持512 KB 的L2Cache,支 持32/64-bit DDR2/DDR3,具 有 三 路1 000/100/10 Mb/s 以太網(wǎng)控制器,三路高速PCIE 控制器,兩路串行RapidIO 控制器。PCIE-PCI 轉換橋芯片采用PLX 公司的PEX8112 芯片。
PEX8112 芯片是PLX 公司推出的一款PCIETO-PCI 轉換橋芯片,通過PCI 總線與PCIE×1 總線的轉換實現(xiàn)了兩者之間的透明傳輸[6-9]。該芯片支持8 KB 共享內(nèi)存,支持MSI 中斷,支持INTx 虛擬中斷,支持前向橋模式或后向橋模式,通過配置模塊可以分別實現(xiàn)PCIE-PCI 轉換或PCI-PCIE 轉換。
該方案設計中采用PEX8112 橋片前向橋模式,將PCIE 信號轉換成PCI 信號,進行數(shù)據(jù)傳輸[10]。
PEX8112 橋片內(nèi)部結構如圖1 所示。
圖1 PEX8112橋片內(nèi)部結構圖
P2020 處理器使用一路高速PCIE 接口連接至PEX8112 轉換芯片,并將PEX8112 芯片設置成前向橋模式,完成PCIE-PCI 轉換。通過PEX8112 轉換芯片的PCI 接口連接Intel 82546 網(wǎng)卡,驗證PCIE 轉PCI接口的數(shù)據(jù)通路。硬件系統(tǒng)框架中P2020 處理器為主控端,外部從設備Intel 82546 網(wǎng)卡為從設備。
具體的硬件系統(tǒng)框架如圖2 所示。
圖2 硬件系統(tǒng)框架圖
VxWorks 操作系統(tǒng)具有卓越的實時性、良好的持續(xù)發(fā)展能力以及友好的用戶開發(fā)環(huán)境,在嵌入式實時操作系統(tǒng)領域占據(jù)重要地位[11],廣泛應用在通信、軍事、航空、航天等高精尖技術及實時性要求極高的領域[12]。
該方案采用VxWorks6.9 操作系統(tǒng),支持VxBus設備驅動程序框架。在VxBus 驅動程序框架的支持下,驅動能在總線上發(fā)現(xiàn)設備,并執(zhí)行初始化操作,使驅動與硬件設備之間正常通訊[13-15]。設備的驅動程序的安裝、配置和刪除都可以通過可視化界面操作。
VxBus 驅動開發(fā)由設備、驅動和實例3 個概念組成。設備表示硬件設備,驅動指編程代碼,實例則是設備和驅動的一種關聯(lián),一個驅動可以匹配一個或多個設備。設備驅動實例關系如圖3 所示。
圖3 設備驅動實例關系
在VxBus 框架下,系統(tǒng)中各個功能模塊通過總線進行信息傳遞,每個設備都可以選擇合適的總線和主機相連,總線驅動通過不同的方法實現(xiàn)設備與驅動的匹配。具體配置方式如圖4 所示。
圖4 VxBus設備配置方式
基于VxBus 框架下PCIE 設備驅動開發(fā)主要包含設備初始化、設備驅動適配以及設備驅動組件添加。VxBus 驅動架構的初始化流程主要在sysLib.c文件中實現(xiàn),首先通過sysHwinit() 函數(shù)調(diào)用hardWareInterFaceInit()函數(shù)完成VxBus 設備硬件內(nèi)存分配,接著調(diào)用hardWareInterFaceBusInit()函數(shù)完成VxBus 設備實例建立和驅動總線注冊,然后通過sysHwinit2() 函數(shù)調(diào)用vxbDevInit() 函數(shù)和vxDev Connect()函數(shù),調(diào)用注冊驅動driverNameInstConnect()函數(shù),完成VxBus 設備驅動的初始化。
PCIE 設備的初始化過程中會調(diào)用m85xxPci.c 文件的vxbPciAutoConfig()函數(shù),完成對PCIE 鏈路的掃描和配置[16]。
具體的PCIE 鏈路掃描和配置流程如圖3 所示。
圖5 PCIE鏈路的掃描和配置過程
首先根據(jù)PCIE 設備的配置信息,完成PCIE 控制器的基地址和地址空間的初始化。然后掃描PCIE 鏈路上的PCIE 設備,并判斷該設備類型。如果是bridge 設備,分配當前bridge 設備的總線編號,使用Type 1 報文完成bridge 設備的配置,并重新進行PCIE 鏈路掃描;如果是EP 設備,分配當前EP 設備的總線編號,并獲取EP 設備的地址空間,使用Type 0報文完成EP 設備的配置,并更新PCIe 鏈路上最大的總線編號數(shù)值和bridge 設備的地址空間分配,最終完成PCIE 鏈路的掃描和配置過程。
通過上述PCIE 鏈路的掃描和配置過程,完成PCIE控制器、PEX8112轉換橋片及Intel 82546的配置,通過標準的PCIE 接口函數(shù)就可以訪問到Intel 82546 網(wǎng)卡的相關信息。
基于VxBus 框架下PCIE 驅動開發(fā)需要添加“INCLUDE_PCI_BUS”、“DRV_PCIBUS_M85XX”、“IN CLUDE_PCI_BUS_AUTOCONF”和“INCLUDE_PCI_BUS_SHOW”組件[17]。在PCIE 設備的注冊過程中,注冊函數(shù)會通過hwConfig.c 文件中hcfResource[]和hcfDevice[]數(shù)組獲取PCIE 設備的配置信息,最終完成PCIE 設備的注冊。
基于VxWorks6.9 操作系統(tǒng)中hcfResource[]數(shù)組的PCIE 控制器關鍵配置信息如下:
m85xxPci0Resources 描述了PCIE 控制器在VxBus 中注冊的基本信息,其中包括設備號(VXB_DEVID_DEVICE)、總線類型(VXB_BUSID_PCI)、VxBus 版本、設備ID 和廠商ID 信息等。
在hcfResource[]數(shù)組中主要完成了PCIE 控制器的基地址、PCIE 的內(nèi)存地址空間、PCIE 的I/O 地址空間、PCIE 的InBound 基地址和OutBound 窗口屬性,以及PCIE 控制器MSI 中斷使能的配置,從而實現(xiàn)對PCIE 控制器的驅動。
針對Intel 82546 網(wǎng)卡驅動,需要在Workbench 3.3 軟件中添加”INCLUDE_GEI825XX_VXB_END”的配置選項[18-20],完成Intel 82546 網(wǎng)卡的驅動注冊,最終實現(xiàn)Intel 82546 網(wǎng)卡的數(shù)據(jù)收發(fā)。
基于VxWorks 操作系統(tǒng)對PCIE 轉PCI 接口進行功能和性能測試,將專業(yè)網(wǎng)絡分析儀連接Intel 82546 網(wǎng)卡的網(wǎng)口進行傳輸速率測試,測試的以太網(wǎng)幀長可選用不同長度(如:64 B、512 B、1 518 B 等),經(jīng)過長時測試,Intel 82546 以太網(wǎng)卡最大傳輸速率可達到1 Gb/s 理論數(shù)值,驗證了基于P2020 的PCIE 轉PCI 接口傳輸滿足設計要求。
具體測試結果如表1 所示。
表1 不同以太網(wǎng)幀長度速率測試結果
該方案主要介紹了基于VxWorks6.9 系統(tǒng)下P2020 處理器PCIE 轉PCI 接口的傳輸設計與實現(xiàn),介紹了系統(tǒng)硬件設計方案,簡要概述了VxWorks 嵌入式操作系統(tǒng)的特點,詳細介紹了基于VxBus 框架中設備驅動注冊方法和PCIE 鏈路的掃描和配置流程。最終通過Intel 82546 網(wǎng)卡對PCI 接口進行功能和性能的測試,驗證了基于P2020 與VxWorks 系統(tǒng)的PCIE-PCI 接口的數(shù)據(jù)通信的能力。