PCI接口擴展卡的快速開發(fā)方案
隨著計算機和控制技術(shù)的不斷發(fā)展,很多工程人員都選用PC機作為控制系統(tǒng)的操作平臺。為了能夠和外部設(shè)備通信,PC機上提供了外置的USB、串口、并口及內(nèi)置的ISA、PCI等接口。PCI總線接口速度快,系統(tǒng)占用率低,有完備的即插即用(PnP)管理體制,是目前計算機插卡式外設(shè)總線的事實標準。
筆者設(shè)計了一塊PCI總線多功能CAN通信I/O卡,可以完成數(shù)字量I/O、CAN總線通信的功能。本文將根據(jù)筆者的實際經(jīng)驗,介紹PCI接口擴展卡的軟硬件設(shè)計流程和一種快速開發(fā)方案。
1 PCI總線簡介
PCI總線標準[1]由PCISIG(PCI Special Interest Group)制定,該組織的成員有Intel、IBM、DEC等公司。目前PC機中使用的PCI總線標準主要以PCI2.0為主,其頻率為33MHz,字寬為32bit,電源電壓為5V。新版的PCI標準向下兼容,并支持66MHz時鐘,字寬為64bit,電壓為3.3V。
PCI總線是一種時分復用的雙向應(yīng)答總線,傳輸發(fā)起方稱為主設(shè)備,接收方稱為從設(shè)備。主設(shè)備用FRAME信號指示,從設(shè)備拉低它的DEVSEL線表示響應(yīng)傳輸請求。PCI總線的數(shù)據(jù)傳輸以幀為單位,每次傳輸由一個地址周期(Address Phase)和多個數(shù)據(jù)周期(Data Phase)組成,如圖1所示。AD0~AD31首先給出本次傳輸?shù)氖椎刂?,后面緊跟一個或多個32位(4字節(jié))寬的數(shù)據(jù),多個數(shù)據(jù)的地址自動遞增。在地址周期,C/BE0~C/BE3這四根線的不同組合指示出在AD0~AD31上將要進行何種類型的操作,如C/BE0~C/BE3=0110表示存儲器讀,C/BE0~C/BE3=0011表示I/O寫。在數(shù)據(jù)周期,C/BE0~C/BE3對應(yīng)AD0~AD31上四個字節(jié)的使能。IRDY和TRDY分別表示主設(shè)備準備好和從設(shè)備準備好。在傳輸過程中,只有IRDY和TRDY同時有效,傳輸才能繼續(xù);否則插入等待周期,用于在不同速度的設(shè)備之間協(xié)調(diào)工作。
計算機的接口卡一般會用到I/O端口、存儲器空間、中斷及DMA等計算機資源。傳統(tǒng)ISA接口卡通過更改跳線來避免多塊卡之間的資源沖突,PCI接口卡則摒棄了硬件跳線,由軟件統(tǒng)籌分配資源,這被稱為即插即用。為實現(xiàn)此功能,PCI協(xié)議除了可以對I/O空間、存儲器空間讀寫外,還定義了對配置空間的讀寫(C/BE0~C/BE3=1010、1011)。所謂配置空間,是指映射到每塊接口卡上的256字節(jié)的特殊功能寄存器。設(shè)計者事先在配置空間的指定位置寫入需要申請使用的資源量,主板上電后,由PnP-Bios讀取各卡的配置空間,對它們所需的資源進行統(tǒng)籌分配,再將分配結(jié)果寫回對應(yīng)的配置空間地址,完成自動配置。
2 PCI接口卡的硬件設(shè)計及調(diào)試
以筆者設(shè)計的PCI卡為例,使用SJA1000實現(xiàn)CAN總線通信功能,需要映射32字節(jié)的存儲器空間和一個中斷資源,在功能上屬于PCI從設(shè)備(Target-only Device)。SJA1000的對外接口電路可以直接與Intel8051、8096及ISA總線連接,但是不能與PCI總線直接連接,因此需要設(shè)計用于邏輯轉(zhuǎn)換的接口電路。
PCI接口電路的設(shè)計一般有兩類方法:一類是使用FPGA/CPLD等可編程器件開發(fā)邏輯轉(zhuǎn)換電路。根據(jù)實現(xiàn)功能的多少,所需的等效門密度約為5000~15000門,可自行編程或者購買已有“軟核”(IP CORE)的產(chǎn)品實現(xiàn);另一類是使用標準接口芯片對PCI總線邏輯信號解碼。第一種方法開發(fā)成本高、難度大、周期長、測試設(shè)備昂貴,但是批量生產(chǎn)成本很低,適合大規(guī)模全定制或半定制ASIC的生產(chǎn)。第二種方法相對簡單、開發(fā)周期短、性價比合理,適合本方案采用。市場上的接口芯片供應(yīng)商有PLX、AMCC、TI等公司。其中,PLX公司的接口芯片PLX9052[2]價格便宜、供貨渠道暢通、功能適用,因此這里選用PLX9052。
采用PLX9052的接口卡在邏輯上可分成三個功能模塊:PCI接口部分、EEPROM部分和局部總線部分,如圖2所示。
PLX9052提供完備的PCI從設(shè)備支持,PCI接口部分的47根信號線可以直接與PCI連接器(俗稱金手指)連接。PCI連接器上有兩根特殊的引線PRSNT1#和PRSNT2#,它們不參與PCI協(xié)議操作,只用來告知主板該卡消耗的電功率。
PLX9052 將PCI總線上的操作轉(zhuǎn)換為對局部總線的操作,即通過LAD0~LAD7、RD、WR、CS等對SJA1000的寄存器進行訪問。舉例來說,如果系統(tǒng)上電后分配給本卡的存儲器地址空間為F680 0000~F680 001F,那么當系統(tǒng)通過PCI總線訪問這個區(qū)域時,PLX9052會應(yīng)答,并將其轉(zhuǎn)換為局部地址0x0000~0x001F,對應(yīng)于SJA1000的32個內(nèi)部寄存器。另外,PLX9052自身也有一些內(nèi)部寄存器,它們被自動映射到另一片內(nèi)存區(qū)域,可通過PCI總線直接訪問。
PLX9052提供三種類型的局部總線信號:標準ISA模式、復用模式和非復用模式,其中復用模式和SJA1000的接口最吻合。此模式的信號和8051CPU輸出的信號基本相同,可以直接與SJA1000及其它類似接口的芯片相連,只是片選信號不再需要外部地址譯碼電路,而是由PLX9052內(nèi)部邏輯完成。
局部總線的時鐘可以與PCI時鐘異步,由有源晶振提供??刂菩盘朙HOLD接地表示局部總線無需申請等待周期。LINTi1是中斷申請線,接有上拉電阻,確保無中斷時停靠在空閑狀態(tài)。USER0~USER4是可編程I/O引腳,USER0、1設(shè)置為輸入,USER2、3設(shè)置為輸出,由PLX9052的內(nèi)部寄存器控制,實現(xiàn)數(shù)字I/O功能。SJA1000和82C250構(gòu)成CAN總線接口電路,最高可支持1MHz的通信速率。
EEPROM部分用于初始化PLX9052的寄存器,在系統(tǒng)上電后讀取。PLX9052的EECS、EEDO、EEDI、EESK引腳分別與串行EEPROM 93LC46的對應(yīng)引腳相連,其中EEDO引腳加有上拉電阻,使得在未安裝EEPROM時,EEDO始終保持高電平狀態(tài),PLX9052仍然能夠以缺省設(shè)置運行。以下對幾個主要寄存器的設(shè)置進行說明。
VendorID和DeviceID:生產(chǎn)廠商代號和芯片代號。VendorID由生產(chǎn)商向PCISIG申請,DeviceID由生產(chǎn)商自行制定。PLX公司的VendorID為10B5,PLX9052的DeviceID為9050,故設(shè)為10B5 9050。
ClassCode:表示PCI卡屬于哪種類型,如多媒體卡、顯卡等。本設(shè)計中將其定為0000 0680,表示PCI橋(PCI Bridge)設(shè)備。
Local Address Space 0 Range:設(shè)為FFFF FFE0,表示申請32字節(jié)的存儲器空間。
存儲器相關(guān)文章:存儲器原理
晶振相關(guān)文章:晶振原理 上拉電阻相關(guān)文章:上拉電阻原理
評論