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