摘 要:本文簡(jiǎn)要介紹了PCI協(xié)議從模式接口芯片PCI9052特點(diǎn),并說(shuō)明了EEPROM配置注意事項(xiàng)。最后結(jié)合51單片機(jī)將其應(yīng)用于通用網(wǎng)絡(luò)控制卡設(shè)計(jì)課題,介紹了控制卡工作原理,并給出了軟硬件結(jié)構(gòu)設(shè)計(jì)。
關(guān)鍵詞:PCI總線,PCI接口芯片9052,WDM
1、前言
PCI(Peripheral Compornent Interconnect,即外圍部件互連)總線是一種能為主CPU及外設(shè)提供高性能數(shù)據(jù)總線的局部總線。目前已經(jīng)成為最流行的、也是最有發(fā)展前途的計(jì)算機(jī)系統(tǒng)局部總線[1]。相應(yīng)的,計(jì)算機(jī)應(yīng)用領(lǐng)域的各種功能擴(kuò)展卡也必將逐步發(fā)展為PCI標(biāo)準(zhǔn)的擴(kuò)展插卡。以INTEL為首的多家集團(tuán)開(kāi)始設(shè)計(jì)的PCI總線,其V2.0規(guī)范于1993年4月正式發(fā)布。PCI總線具有嚴(yán)格的規(guī)范,這就保證了它具有良好的兼容性,符合PCI規(guī)范的擴(kuò)展卡可插入任何PCI系統(tǒng)可靠地工作。一個(gè)PCI接口包括一系列的寄存器,這些寄存器中的信息允許計(jì)算機(jī)自動(dòng)配置PCI卡。
目前,實(shí)現(xiàn)PCI接口大體有兩種方式:使用可編程器件或?qū)S眯酒S捎赑CI總線協(xié)議非常復(fù)雜。開(kāi)發(fā)PCI擴(kuò)展板若使用可編程邏輯陣列芯片來(lái)完成PCI協(xié)議的執(zhí)行,其工作量和難度都是巨大的,一般都會(huì)選用PCI專(zhuān)用接口芯片。下面介紹PCI9052接口芯片及其在通用網(wǎng)絡(luò)控制器中的應(yīng)用。
2、PCI9052芯片簡(jiǎn)介
PCI9052是PLX技術(shù)公司為擴(kuò)展適配板卡推出的能提供一種混合的高性能PCI總線目標(biāo)(從)模式的接口芯片。其主要特點(diǎn)如下:
(1)遵照PCI2.1規(guī)范的從接口芯片,支持低成本從屬適配器;(2)雙向FIFO,可實(shí)現(xiàn)高性能的零等待突發(fā)式數(shù)據(jù)傳輸;(3)最多可達(dá)5個(gè)局部地址空間和4個(gè)芯片組。(4) 支持Big/Little Endian編碼字節(jié)的轉(zhuǎn)換; (5)支持復(fù)用或非復(fù)用模式的8、16或32位的局部總線;(6)局部總線與PCI時(shí)鐘異步。(7)串行EEPROM提供PCI總線和局部總線部分重要配置信息; (8)PCI鎖定機(jī)制,PCI主控設(shè)備可以通過(guò)鎖定信號(hào)獨(dú)占對(duì)PCI9052的訪問(wèn)。(9)PCI總線傳輸速率達(dá)132Mb/s。(10)低功耗CMOS,160腳PQFP封裝。
PCI9052為適配板提供了簡(jiǎn)明、高性能的PCI總線從接口,能快速、廉價(jià)的將ISA器轉(zhuǎn)換為PCI總線。同時(shí),PCI9052能加快適配板上的數(shù)據(jù)傳輸率,由ISA的8MHz、5Mb/s提高到33MHz、132Mb/s??膳c多種局部總線相連,并且支持相對(duì)較慢的局部總線。
3、PCI9052芯片在通用網(wǎng)絡(luò)控制卡中的應(yīng)用
PCI9052接口芯片作為通用PCI接口,其應(yīng)用場(chǎng)合和范圍是廣泛的。隨著PC機(jī)中ISA擴(kuò)展槽數(shù)量的逐漸減少直至取消,PCI擴(kuò)展槽已成為PC機(jī)主板配置的主流。本文設(shè)計(jì)的通用網(wǎng)絡(luò)控制卡,主要由一片自制雙口RAM(由6264和ISPL1032E組成)、PCI9052、51單片機(jī)以及一些外圍器件構(gòu)成。該控制卡的核心功能是:由RS-485進(jìn)來(lái)的數(shù)據(jù)通過(guò)PCI卡,送微機(jī)進(jìn)行數(shù)據(jù)處理,需顯示部分通過(guò)RS-232由51單片機(jī)控制液晶實(shí)現(xiàn)顯示功能。
3.1工作原理
在本設(shè)計(jì)中,采用控制能力較強(qiáng)的單片機(jī)來(lái)執(zhí)行數(shù)據(jù)流的控制,高速的PC機(jī)進(jìn)行數(shù)據(jù)處理。由于PCI9052對(duì)PCI總線沒(méi)有直接的主控能力,對(duì)內(nèi)部寄存器的操作是通過(guò)PCI總線上的主機(jī)或串行EEPROM來(lái)實(shí)現(xiàn)的。9052通過(guò)EEPROM(93CS46)讀取配置信息,初始化內(nèi)部寄存器。在9052和89C51通信過(guò)程中,自制雙口RAM將89C51接收到的數(shù)據(jù)交給PC機(jī)處理,同時(shí),PC機(jī)需要顯示或通信的數(shù)據(jù)也通過(guò)雙口RAM送給89C51??紤]到成本以及本卡的體積,本設(shè)計(jì)采用Lattice芯片ispLSI1032E自制雙口RAM及控制接口。當(dāng)9052和89C51訪問(wèn)共用RAM6264時(shí),用ispLSI1032E實(shí)現(xiàn)總線隔離,將數(shù)據(jù)、地址總線和讀寫(xiě)及片選信號(hào)隔離,同時(shí)設(shè)計(jì)仲裁電路以保證對(duì)存儲(chǔ)器的分時(shí)訪問(wèn),避免由于雙方同時(shí)訪問(wèn)造成總線競(jìng)爭(zhēng)。本設(shè)計(jì)電路中采用利用中斷口(9052 LINT1、89C51 INT0)來(lái)完成競(jìng)爭(zhēng)仲裁電路。LATTICE實(shí)現(xiàn)總線隔離、地址鎖存及分時(shí)復(fù)用89C51的單個(gè)串口,從而控制RS232或RS485與外界通信。
3.2 EEPROM配置
配置空間的可靠、穩(wěn)定實(shí)現(xiàn)是PCI擴(kuò)展卡設(shè)計(jì)的核心問(wèn)題。一次設(shè)計(jì)的成功與否,配置空間起著關(guān)鍵性的作用。它決定了用戶擴(kuò)展卡能否被操作系統(tǒng)識(shí)別、能否“即插即用”,決定著軟件驅(qū)動(dòng)程序開(kāi)發(fā)的方便程度。
可以使用三種方法配置PCI9052的EEPROM, 方法一:燒寫(xiě)串行EEPROM方法。使用燒寫(xiě)器,將數(shù)據(jù)寫(xiě)入串行EEPROM,適當(dāng)修改9052數(shù)據(jù)手冊(cè)EEPROM默認(rèn)值以滿足實(shí)際需要。方法二:熱配置方法。從PCI總線通過(guò)PCI9052芯片使用方法一的相同數(shù)據(jù)來(lái)燒寫(xiě)串行EEPROM。方法三:使用由PLX公司提供的軟件PLXMON來(lái)直接配置。
在硬件調(diào)試過(guò)程中,某方面的考慮不全,都能引起硬件調(diào)試失敗,本設(shè)計(jì)配置注意事項(xiàng):
1.由于和51單片機(jī)協(xié)同工作,PCI9052設(shè)置為不支持突發(fā)方式,其局部總線被設(shè)置成非總線復(fù)用(MODE引腳接地)和8位寬度(在LASXBRD控制寄存器中設(shè)置)。
2.PCI9052必須設(shè)置為L(zhǎng)ittle Endian模式,而且LRDY#輸入必須被使能,而B(niǎo)TERM和BURST必須被禁止(通過(guò)LASXBRD控制寄存器實(shí)現(xiàn))。
3. 空間0分配給LOCAL端的內(nèi)存存取,空間1分配給LOCAL端的I/O存取。其基地址和空間范圍根據(jù)實(shí)際配置(通過(guò)CSXBASE控制寄存器實(shí)現(xiàn))。
4.提供的地址和I/O空間可根據(jù)實(shí)際需要通過(guò)CS相應(yīng)選擇。
5.串行EEPROM一定要選用支持連續(xù)讀寫(xiě)的芯片型號(hào),9052才能實(shí)現(xiàn)正確讀寫(xiě)。
3.3硬件設(shè)計(jì)
控制器硬件電路結(jié)構(gòu)圖如圖1所示。
[align=center]
圖1 電路結(jié)構(gòu)示意圖[/align]
電路分為四部分。第一部分是9052與PCI插槽間的連接信號(hào)線。這些信號(hào)包括地址數(shù)據(jù)復(fù)用信號(hào)AD[31:0],總線命令信號(hào)C/BE[3:0]#和PCI協(xié)議控制信號(hào)PAR、FRAME#、STOP#、TRDY#、IDSEL、DEVSEL#、PERR#、SERR#、INTA。尤需注意的是PSNT1、PSNT2必須至少有一根接地,這樣系統(tǒng)才能找到PCI卡,在本設(shè)計(jì)中本地芯片沒(méi)有提供TRDY#信號(hào),9052的對(duì)應(yīng)腳IRDY#必須接地,否則系統(tǒng)就會(huì)死機(jī),永遠(yuǎn)等待那個(gè)IRDY#信號(hào)有效才讀取數(shù)據(jù)。第二部分是與串行EEPROM的連線。這里有四根信號(hào)線:EESK、EEDO、EEDI和EECS。第三部分是9052與應(yīng)用電路的連接。在本設(shè)計(jì)中主要用到的是本地端局部總線信號(hào),有數(shù)據(jù)線LAD[7:0],地址線LBE[1:0]、LA[12:2],讀寫(xiě)信號(hào)線WR#、RD#,本地端準(zhǔn)備好輸入信號(hào)線LRDYI#,由于本設(shè)計(jì)中本地芯片無(wú)需申請(qǐng)總線控制,9052的LHOLD信號(hào)接地。第四部分是雙口RAM與C51電路的連接。本設(shè)計(jì)ispLSI1032E不僅提供隔離總線的I/0口,還實(shí)現(xiàn)了地址鎖存、控制功能,極大地提高了設(shè)計(jì)的靈活性。89C51的P1.1控制6264的總線,當(dāng)P1.1為1時(shí),89C51占用總線,這時(shí)PC機(jī)可以通過(guò)讀偏移量為3FFFH單元上的內(nèi)容來(lái)產(chǎn)生一個(gè)中斷信號(hào)來(lái)向89C51申請(qǐng)6264的總線控制權(quán);而P1.1為0時(shí),PC機(jī)占用6264的總線,89C51可以通過(guò)P1.2申請(qǐng)PC機(jī)中斷,以使9052釋放6264總線控制權(quán)或直接置P1.1為1占用6264總線。P1.0通過(guò)設(shè)計(jì)ispLSI1032來(lái)實(shí)現(xiàn)控制89C51的串口的分時(shí)復(fù)用問(wèn)題的,P1.3控制RS584的收發(fā)轉(zhuǎn)換。
3.4軟件設(shè)計(jì)
完成通用網(wǎng)絡(luò)控制卡硬件方面的設(shè)計(jì),為了實(shí)現(xiàn)該卡與計(jì)算機(jī)的通信,還需要開(kāi)發(fā)PCI設(shè)備驅(qū)動(dòng)程序。WDM (Windows Driver Model)是 NT3 . 51和NT4. 0內(nèi)核模式設(shè)備驅(qū)動(dòng)程序模型的擴(kuò)展形式 ,是為基于 Win98和 Win2000的設(shè)備驅(qū)動(dòng)程序提供的一種新的開(kāi)發(fā)模型。本設(shè)計(jì)使用開(kāi)發(fā)工具WINDRIVER大大簡(jiǎn)化了驅(qū)動(dòng)程序的開(kāi)發(fā)。通過(guò)DiverWizard開(kāi)發(fā)者很容易生成驅(qū)動(dòng)程序框架,同時(shí),WINDRIVER和VC++有很好的接口。生成驅(qū)動(dòng)框架后在Microsoft Visual C++ 6.0中就可以通過(guò)在工程項(xiàng)目中加入9052_lib.c, 在應(yīng)用程序開(kāi)頭#include"9052_lib.h",并添加特定的驅(qū)動(dòng)代碼完成驅(qū)動(dòng)編寫(xiě)。下面是驅(qū)動(dòng)程序主函數(shù)的部分代碼:
…
if (!PCI_Get_WD_handle(&hWD)) return 0;
WD_Close (hWD); //確定驅(qū)動(dòng)是否裝上
hMy9052 = PMy9052_LocateAndOpenBoard(0x10b5, 0x9050, fUseInt); //打開(kāi)9052設(shè)備
PMy9052_ADDR ad_sp = P9052_ADDR_SPACE0;
ad_sp =*PMy9052_GetAddrRangeName(PMy9052_ADDR addrSpace);//得到有效的映射空間
data = MYDIVER_ReadByte(hMYDIVER, ad_sp, Offset); //讀特定存儲(chǔ)位置的值
MYDIVER_WriteByte(hMYDIVER, ad_sp, Offset,data); //data值寫(xiě)入存儲(chǔ)空間
…//數(shù)據(jù)處理
WD_Close (hWD); //結(jié)束
為了使用WDM驅(qū)動(dòng)程序 ,需要在開(kāi)始→設(shè)置→控制面板→添加 /刪除硬件向?qū)е羞x擇“下一步”,然后選擇“添加新設(shè)備” ,在查找新硬件頁(yè)中選擇“否 ,我想從列表中選擇硬件” ,在硬件類(lèi)型頁(yè)中選擇“其它設(shè)備” ,在選擇一個(gè)設(shè)備驅(qū)動(dòng)程序頁(yè)中選擇“從磁盤(pán)安裝”按鈕 ,接著選擇設(shè)計(jì)好的INF文件即可。INF文件負(fù)責(zé)復(fù)制WDM驅(qū)動(dòng)程(MY9052.SYS)到Windows 98路徑下的SYSTEM\DRIVERS文件夾 ,并根據(jù)INF文件中的設(shè)定分配硬件資源。本地端89C51采用匯編語(yǔ)言控制液晶顯示,卡外數(shù)據(jù)采集及其與PC機(jī)的通信??傮w主程序流程圖如圖2所示。
[align=center]
圖2 主程序流程圖[/align]
4、結(jié)論
實(shí)踐證明,本課題開(kāi)發(fā)的網(wǎng)絡(luò)控制卡,實(shí)用性強(qiáng),可靠性好,并具有良好的可擴(kuò)展性。在設(shè)計(jì)電路中,采用LATTICE自制雙口RAM及控制仲裁電路,減少了許多相應(yīng)的外圍器件,使成本有了大幅度的降低。本文使用驅(qū)動(dòng)開(kāi)發(fā)工具Windriver 5.05 ,并借用了VC++6.0集成環(huán)境,設(shè)計(jì)的驅(qū)動(dòng)程序與Windows 98操作系統(tǒng)完全兼容 ,工作正常且穩(wěn)定。利用此WDM驅(qū)動(dòng)程序,可以實(shí)現(xiàn)Windows 98環(huán)境下網(wǎng)絡(luò)控制卡采集數(shù)據(jù)的正確處理。
參考文獻(xiàn)
[1] Tom Shanley Don Anderson 著 劉暉等 譯 PCI系統(tǒng)結(jié)構(gòu)(第四版). [M]. 北京:電子工業(yè)出版社,2000:C1-C4.
[2] PLXTechnology.9052 Data Book[M].Version 2.0. 09,2001.
[3] 李貴山.PCI局部總線開(kāi)發(fā)者指南 [M ]. 西安:西安電子科技大學(xué)出版社,1997:1-200 .
[4] [美 ]Chris Cant Windows WDM設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)指南[M] 孫義,馬波,國(guó)雪飛等 北京:機(jī)械工業(yè)出版社,2000