《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 業(yè)界動(dòng)態(tài) > 使用SDK加速PCI接口產(chǎn)品的開發(fā)

使用SDK加速PCI接口產(chǎn)品的開發(fā)

2009-04-28
作者:林振華

??? 摘? 要:? 一種基于PLX公司的PCI接口芯片的輔助開發(fā)工具,可極大地方便PCI產(chǎn)品的硬件調(diào)試,以及驅(qū)動(dòng)程序和應(yīng)用軟件的開發(fā)。給出了一個(gè)以PCI9052為接口芯片的圖形控制器的開發(fā)實(shí)例,以及在Windows操作系統(tǒng)下如何調(diào)用SDK中的API函數(shù)。?

??? 關(guān)鍵詞:? PCI橋? PCI9052芯片?? SDK?? VC++6.0

?

1 PCI總線和PCI橋接芯片?

??? PCI總線是一種目前較為流行的、先進(jìn)的高速同步總線。它的歷史較短,正式的2.2版本于1999年2月發(fā)布。其優(yōu)點(diǎn)在于能夠滿足設(shè)備之間實(shí)現(xiàn)快速訪問,因?yàn)镻CI總線的全部讀寫傳送都可以用突發(fā)方式進(jìn)行,且總線速度可達(dá)33/66MHz,數(shù)據(jù)寬度為32/64bit。此外,低功耗以及與處理器無(wú)關(guān)也是其優(yōu)點(diǎn)。PCI有三個(gè)相互獨(dú)立的物理空間:存儲(chǔ)器地址空間、I/O地址空間和配置地址空間。配置空間用于訪問PCI設(shè)備的配置寄存器,以完成啟動(dòng)時(shí)的初始化,并由配置軟件給PCI設(shè)備分配存儲(chǔ)器和I/O地址空間。?

??? 由于PCI總線協(xié)議較為復(fù)雜,在設(shè)計(jì)具有PCI接口的產(chǎn)品時(shí),如果CPU或MCU沒有PCI接口,一般采用專用的橋接芯片,或者是可嵌入PLD中的IP核來(lái)實(shí)現(xiàn)PCI協(xié)議。Altera、Xilinx等PLD生產(chǎn)廠商大都提供可以嵌入自己產(chǎn)品中的支持PCI協(xié)議的IP Core,使用起來(lái)較為靈活,但是對(duì)應(yīng)用者的要求也較高。采用專用PCI橋芯片,可以讓工程師不必精通PCI規(guī)范的各種細(xì)節(jié),甚至不需完全了解PCI總線的時(shí)序,只要理解了橋電路的局部總線的性能,就可以順利地進(jìn)行PCI產(chǎn)品的設(shè)計(jì)開發(fā),不失為一種低成本、高效率的解決方案。主流的PCI橋芯片主要有AMCC公司的S593X和PLX公司的PCI9050、9054、9060等。其中PLX公司為其產(chǎn)品還提供一套軟件開發(fā)工具包SDK,它可以很好地幫助工程師進(jìn)行硬件調(diào)試,并大大簡(jiǎn)化PCI設(shè)備驅(qū)動(dòng)程序及應(yīng)用軟件的編制。?

2 用PCI9052構(gòu)成的PCI接口電路?

??? 按照是否具有控制總線的功能,可以將PCI的設(shè)備功能劃分為主設(shè)備(Master)功能和目標(biāo)設(shè)備(Target)功能,總線上可以有多個(gè)具有Master功能的設(shè)備,因此PCI是一個(gè)獨(dú)立于CPU的總線。PCI9050、9052、9030是PLX公司生產(chǎn)的具有完全Target接口功能的PCI橋接芯片,支持32位、33MHz即132MB/s傳送速度的PCI總線規(guī)范。其中PCI9030是最新推出的,支持高達(dá)60MHz的局部總線時(shí)鐘,并具備熱插拔功能。PCI9052集成了一個(gè)與標(biāo)準(zhǔn)ISA兼容的總線接口,簡(jiǎn)化了接口電路的設(shè)計(jì),應(yīng)用較為方便。圖1是以PCI9052作為PCI橋的圖形控制板的接口邏輯電路框圖。與PCI9052接口的是一個(gè)具有二維圖形顯示功能的圖形控制器TMS34010。它擁有一個(gè)16位的I/O映射功能的主機(jī)接口(HPI),通用ISA總線的時(shí)序就可以滿足其要求,因此利用PCI9052的ISA端口可以非常簡(jiǎn)便地實(shí)現(xiàn)圖形控制器與PCI總線的接口,并且由于只需要I/O接口操作功能,不需要ISA標(biāo)準(zhǔn)的存儲(chǔ)器讀寫功能,所以許多不需要的相關(guān)信號(hào)可以被省略。圖1中CPLD中的邏輯電路是將ISA地址線進(jìn)行HPI端口的譯碼,并與讀寫選通選中TMS34010。?

?

?

??? 由于PCI9052的ISA接口不是芯片上電后的缺省狀態(tài),所以還要對(duì)硬件進(jìn)行預(yù)先設(shè)置。首先,將PCI9052的MODE引腳接地,設(shè)置成非復(fù)用總線方式;然后對(duì)串行EEPROM進(jìn)行預(yù)編程,也就是對(duì)芯片內(nèi)部的寄存器進(jìn)行設(shè)置。由于PCI9052的ISA模式已指定將局部總線的CS0分配給了ISA的存儲(chǔ)器地址空間,CS1分配給了ISA的I/O地址空間,所以要對(duì)CS0、CS1對(duì)應(yīng)的兩組相關(guān)寄存器進(jìn)行設(shè)置。其中LAS0RR、LAS0BA、CS0BASE用于設(shè)置PCI到ISA的存儲(chǔ)器地址空間的映射;LAS1RR、LAS1BA、CS1BASE用于設(shè)置PCI到ISA的I/O地址空間的映射;LAS0BRD、LAS1BRD用于將時(shí)序設(shè)置成能滿足ISA總線的要求。此外,須將INTCSR寄存器的第12位置成ISA模式,還要設(shè)置CNTRL寄存器,將第138、139腳置為ISA總線輸出信號(hào)?

3 使用SDK實(shí)現(xiàn)PCI設(shè)備的驅(qū)動(dòng)和應(yīng)用軟件的開發(fā)?

??? 要完成對(duì)PCI設(shè)備產(chǎn)品的開發(fā)和調(diào)試,相關(guān)的軟件調(diào)試工具是必不可少的。PLX公司的Software Development Kits(SDK)就是這樣一個(gè)功能較為完善的工具包。?

3.1 SDK軟件包的內(nèi)容和特點(diǎn)?

??? SDK軟件包主要包括以下內(nèi)容:?

??? (1)Windows 98/NT/2000兼容的設(shè)備驅(qū)動(dòng)程序和以此為基礎(chǔ)的HOST API庫(kù)函數(shù);?

??? (2)一個(gè)Windows下的調(diào)試應(yīng)用軟件 PLXMon,它可以對(duì)PLX公司的所有PCI接口芯片進(jìn)行配置和操作,使用非常方便;?

??? (3)可以支持多種嵌入式CPU的Local API庫(kù)函數(shù);?

??? (4)可以支持VxWorks、Linux、pSOS等多種RTOS的BSP。?

??? 其中(3)、(4)項(xiàng)是專業(yè)版SDK-PRO的內(nèi)容,對(duì)于在嵌入式實(shí)時(shí)操作系統(tǒng)(RTOS)上開發(fā)具有嵌入式CPU的PCI MASTER設(shè)備是很有幫助的。而在Windows操作系統(tǒng)上開發(fā)PCI的TARGET設(shè)備,(1)、(2)項(xiàng)即可滿足要求,而且利用SDK的HOST API就可方便地進(jìn)行設(shè)備驅(qū)動(dòng)程序的開發(fā)。?

3.2 使用SDK開發(fā)步驟?

??? 將PCI SDK安裝后,Windows的驅(qū)動(dòng)程序就已被放置在SDK的目錄下,插入PCI設(shè)備后上電,操作系統(tǒng)自動(dòng)搜索到新的PCI硬件,并且識(shí)別出PLX接口芯片的型號(hào),要求安裝驅(qū)動(dòng)程序,將SDK的相應(yīng)目錄給出,便自動(dòng)完成安裝。?

??? 如要進(jìn)行硬件調(diào)試,PLXMon是一個(gè)使用簡(jiǎn)便的基于Windows 98/NT/2000操作系統(tǒng)的調(diào)試工具。它可以查看和修改PLX公司的PCI橋芯片內(nèi)的所有寄存器的值,并支持FLASH和EEPROM編程,可極大地方便硬件的調(diào)試。而要開發(fā)用戶自己的設(shè)備驅(qū)動(dòng)或應(yīng)用程序,還需要Microsoft的Windows DDK和Visual C/C++ 6.0,步驟如下:1、將PLX公司的SDK包含在工程目錄下;2、程序中要設(shè)置PCI_CODE和LITTLE_ENDIAN宏定義;3、包含頭文件PlxApi.h;4、將PlxApi.lib插入到工程中去;5、調(diào)用PLX公司的API函數(shù)完成相應(yīng)的功能操作。?

3.3 實(shí)例說明?

??? 下面是一段在Visual C++6.0環(huán)境下編寫的代碼,僅為了說明如何在計(jì)算機(jī)局部總線上調(diào)用SDK的API函數(shù)對(duì)上設(shè)備進(jìn)行I/O讀寫等基本操作,這也是編寫一個(gè)設(shè)備驅(qū)動(dòng)程序的基礎(chǔ)。為了節(jié)省篇幅,省略了程序中變量和函數(shù)的詳細(xì)說明部分,具體可參考文獻(xiàn)[4]。?

PlxPciDeviceFind(&Device, &DeviceNum);//首先在PCI總線上尋找PLX公司的PCI接口芯片,獲得一個(gè)指向DEVICE_LOCATION類型的指針變量Device;?

rc = PlxPciDeviceOpen(&Device, &hDevice);//打開這個(gè)設(shè)備,獲得一個(gè)句柄hDevice;?

PlxChipTypeGet(hDevice, &ChipType, &Rivision);//通過句柄讀出芯片的型號(hào);?

port = PlxPciConfigRegisterRead(Device.BusNumber, Device.SlotNumber, 0x1c, &rc);?

??? //利用獲得的設(shè)備總線和插座的序號(hào)信息定位該設(shè)備,并調(diào)用函數(shù)讀取PCI9052內(nèi)部寄存器關(guān)于該設(shè)備被分配在PCI總線上I/O空間的端口地址(0x1c是要讀的PCIBAR3寄存器的地址偏移量);?

port = port & ~(1 << 0);? //清第零位,得到真正的端口基地址;?

rc=PlxIoPortRead(hDevice,port + 0x2b0,BitSize16,&RegValue);//將基地址加上偏移地址,讀取局部總線擴(kuò)展端口的數(shù)據(jù),寫操作與此類似;?

……?

PlxPciDeviceClose(hDevice);?//程序結(jié)束時(shí),與PlxPciDeviceOpen()相對(duì)應(yīng),釋放該設(shè)備;?

??? 本文介紹的只是最簡(jiǎn)單的應(yīng)用SDK API庫(kù)的步驟和方法。目前3.2版SDK提供的API庫(kù)函數(shù)功能已非常完善,可完成PCI總線上的包括存儲(chǔ)器、I/O和配置寄存器的讀寫、中斷響應(yīng)以及DMA通道等要求的各種功能,完全可以滿足應(yīng)用軟件開發(fā)的需要。?

??? SDK最大的優(yōu)點(diǎn)是使用方便簡(jiǎn)單,不過它只是面向PLX公司的PCI接口芯片的開發(fā)工具,不能做到與芯片無(wú)關(guān);另外,它提供的API庫(kù)只是基于Windows操作系統(tǒng)的,并且要預(yù)先安裝它提供的各類芯片的驅(qū)動(dòng)程序,然后通過DLL的調(diào)用來(lái)實(shí)現(xiàn)驅(qū)動(dòng),因此無(wú)法開發(fā)運(yùn)行在核心態(tài)的真正的VxD。這些是它的局限性。?

參考文獻(xiàn)?

1 Tom Shanley.? Don Anderson.PCI系統(tǒng)結(jié)構(gòu).北京:電子工業(yè)出版社,2000?

2 PLX Corporation.PCI 9052 Data Book,February 2000?

3 PLX Corporation.PLX SDK User's Manual,March 2001?

4 PLX Corporation.PLX SDK Programmer's Reference Manual,?March 2001?

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請(qǐng)及時(shí)通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。