摘 要:本文簡要介紹了PCI協(xié)議從模式接口芯片PCI9052特點,并說明了EEPROM配置注意事項。最后結(jié)合51單片機將其應(yīng)用于通用網(wǎng)絡(luò)控制卡設(shè)計課題,介紹了控制卡工作原理,并給出了軟硬件結(jié)構(gòu)設(shè)計。
關(guān)鍵詞:PCI總線,PCI接口芯片9052,WDM
1、前言
PCI(Peripheral Compornent Interconnect,即外圍部件互連)總線是一種能為主CPU及外設(shè)提供高性能數(shù)據(jù)總線的局部總線。目前已經(jīng)成為最流行的、也是最有發(fā)展前途的計算機系統(tǒng)局部總線[1]。相應(yīng)的,計算機應(yīng)用領(lǐng)域的各種功能擴展卡也必將逐步發(fā)展為PCI標準的擴展插卡。以INTEL為首的多家集團開始設(shè)計的PCI總線,其V2.0規(guī)范于1993年4月正式發(fā)布。PCI總線具有嚴格的規(guī)范,這就保證了它具有良好的兼容性,符合PCI規(guī)范的擴展卡可插入任何PCI系統(tǒng)可靠地工作。一個PCI接口包括一系列的寄存器,這些寄存器中的信息允許計算機自動配置PCI卡。
目前,實現(xiàn)PCI接口大體有兩種方式:使用可編程器件或?qū)S眯酒?。由于PCI總線協(xié)議非常復雜。開發(fā)PCI擴展板若使用可編程邏輯陣列芯片來完成PCI協(xié)議的執(zhí)行,其工作量和難度都是巨大的,一般都會選用PCI專用接口芯片。下面介紹PCI9052接口芯片及其在通用網(wǎng)絡(luò)控制器中的應(yīng)用。
2、PCI9052芯片簡介
PCI9052是PLX技術(shù)公司為擴展適配板卡推出的能提供一種混合的高性能PCI總線目標(從)模式的接口芯片。其主要特點如下:
?。?)遵照PCI2.1規(guī)范的從接口芯片,支持低成本從屬適配器;(2)雙向FIFO,可實現(xiàn)高性能的零等待突發(fā)式數(shù)據(jù)傳輸;(3)最多可達5個局部地址空間和4個芯片組。(4) 支持Big/Little Endian編碼字節(jié)的轉(zhuǎn)換; (5)支持復用或非復用模式的8、16或32位的局部總線;(6)局部總線與PCI時鐘異步。(7)串行EEPROM提供PCI總線和局部總線部分重要配置信息; (8)PCI鎖定機制,PCI主控設(shè)備可以通過鎖定信號獨占對PCI9052的訪問。(9)PCI總線傳輸速率達132Mb/s。(10)低功耗CMOS,160腳PQFP封裝。
PCI9052為適配板提供了簡明、高性能的PCI總線從接口,能快速、廉價的將ISA器轉(zhuǎn)換為PCI總線。同時,PCI9052能加快適配板上的數(shù)據(jù)傳輸率,由ISA的8MHz、5Mb/s提高到33MHz、132Mb/s??膳c多種局部總線相連,并且支持相對較慢的局部總線。
3、PCI9052芯片在通用網(wǎng)絡(luò)控制卡中的應(yīng)用
PCI9052接口芯片作為通用PCI接口,其應(yīng)用場合和范圍是廣泛的。隨著PC機中ISA擴展槽數(shù)量的逐漸減少直至取消,PCI擴展槽已成為PC機主板配置的主流。本文設(shè)計的通用網(wǎng)絡(luò)控制卡,主要由一片自制雙口RAM(由6264和ISPL1032E組成)、PCI9052、51單片機以及一些外圍器件構(gòu)成。該控制卡的核心功能是:由RS-485進來的數(shù)據(jù)通過PCI卡,送微機進行數(shù)據(jù)處理,需顯示部分通過RS-232由51單片機控制液晶實現(xiàn)顯示功能。
3.1工作原理
在本設(shè)計中,采用控制能力較強的單片機來執(zhí)行數(shù)據(jù)流的控制,高速的PC機進行數(shù)據(jù)處理。由于PCI9052對PCI總線沒有直接的主控能力,對內(nèi)部寄存器的操作是通過PCI總線上的主機或串行EEPROM來實現(xiàn)的。9052通過EEPROM(93CS46)讀取配置信息,初始化內(nèi)部寄存器。在9052和89C51通信過程中,自制雙口RAM將89C51接收到的數(shù)據(jù)交給PC機處理,同時,PC機需要顯示或通信的數(shù)據(jù)也通過雙口RAM送給89C51??紤]到成本以及本卡的體積,本設(shè)計采用Lattice芯片ispLSI1032E自制雙口RAM及控制接口。當9052和89C51訪問共用RAM6264時,用ispLSI1032E實現(xiàn)總線隔離,將數(shù)據(jù)、地址總線和讀寫及片選信號隔離,同時設(shè)計仲裁電路以保證對存儲器的分時訪問,避免由于雙方同時訪問造成總線競爭。本設(shè)計電路中采用利用中斷口(9052 LINT1、89C51 INT0)來完成競爭仲裁電路。LATTICE實現(xiàn)總線隔離、地址鎖存及分時復用89C51的單個串口,從而控制RS232或RS485與外界通信。
3.2 EEPROM配置
配置空間的可靠、穩(wěn)定實現(xiàn)是PCI擴展卡設(shè)計的核心問題。一次設(shè)計的成功與否,配置空間起著關(guān)鍵性的作用。它決定了用戶擴展卡能否被操作系統(tǒng)識別、能否“即插即用”,決定著軟件驅(qū)動程序開發(fā)的方便程度。
可以使用三種方法配置PCI9052的EEPROM, 方法一:燒寫串行EEPROM方法。使用燒寫器,將數(shù)據(jù)寫入串行EEPROM,適當修改9052數(shù)據(jù)手冊EEPROM默認值以滿足實際需要。方法二:熱配置方法。從PCI總線通過PCI9052芯片使用方法一的相同數(shù)據(jù)來燒寫串行EEPROM。方法三:使用由PLX公司提供的軟件PLXMON來直接配置。
在硬件調(diào)試過程中,某方面的考慮不全,都能引起硬件調(diào)試失敗,本設(shè)計配置注意事項:
1.由于和51單片機協(xié)同工作,PCI9052設(shè)置為不支持突發(fā)方式,其局部總線被設(shè)置成非總線復用(MODE引腳接地)和8位寬度(在LASXBRD控制寄存器中設(shè)置)。
2.PCI9052必須設(shè)置為Little Endian模式,而且LRDY#輸入必須被使能,而BTERM和BURST必須被禁止(通過LASXBRD控制寄存器實現(xiàn))。
3. 空間0分配給LOCAL端的內(nèi)存存取,空間1分配給LOCAL端的I/O存取。其基地址和空間范圍根據(jù)實際配置(通過CSXBASE控制寄存器實現(xiàn))。
4.提供的地址和I/O空間可根據(jù)實際需要通過CS相應(yīng)選擇。
5.串行EEPROM一定要選用支持連續(xù)讀寫的芯片型號,9052才能實現(xiàn)正確讀寫。
3.3硬件設(shè)計
控制器硬件電路結(jié)構(gòu)圖如圖1所示。
[align=center]

圖1 電路結(jié)構(gòu)示意圖[/align]
電路分為四部分。第一部分是9052與PCI插槽間的連接信號線。這些信號包括地址數(shù)據(jù)復用信號AD[31:0],總線命令信號C/BE[3:0]#和PCI協(xié)議控制信號PAR、FRAME#、STOP#、TRDY#、IDSEL、DEVSEL#、PERR#、SERR#、INTA。尤需注意的是PSNT1、PSNT2必須至少有一根接地,這樣系統(tǒng)才能找到PCI卡,在本設(shè)計中本地芯片沒有提供TRDY#信號,9052的對應(yīng)腳IRDY#必須接地,否則系統(tǒng)就會死機,永遠等待那個IRDY#信號有效才讀取數(shù)據(jù)。第二部分是與串行EEPROM的連線。這里有四根信號線:EESK、EEDO、EEDI和EECS。第三部分是9052與應(yīng)用電路的連接。在本設(shè)計中主要用到的是本地端局部總線信號,有數(shù)據(jù)線LAD[7:0],地址線LBE[1:0]、LA[12:2],讀寫信號線WR#、RD#,本地端準備好輸入信號線LRDYI#,由于本設(shè)計中本地芯片無需申請總線控制,9052的LHOLD信號接地。第四部分是雙口RAM與C51電路的連接。本設(shè)計ispLSI1032E不僅提供隔離總線的I/0口,還實現(xiàn)了地址鎖存、控制功能,極大地提高了設(shè)計的靈活性。89C51的P1.1控制6264的總線,當P1.1為1時,89C51占用總線,這時PC機可以通過讀偏移量為3FFFH單元上的內(nèi)容來產(chǎn)生一個中斷信號來向89C51申請6264的總線控制權(quán);而P1.1為0時,PC機占用6264的總線,89C51可以通過P1.2申請PC機中斷,以使9052釋放6264總線控制權(quán)或直接置P1.1為1占用6264總線。P1.0通過設(shè)計ispLSI1032來實現(xiàn)控制89C51的串口的分時復用問題的,P1.3控制RS584的收發(fā)轉(zhuǎn)換。
3.4軟件設(shè)計
完成通用網(wǎng)絡(luò)控制卡硬件方面的設(shè)計,為了實現(xiàn)該卡與計算機的通信,還需要開發(fā)PCI設(shè)備驅(qū)動程序。WDM (Windows Driver Model)是 NT3 . 51和NT4. 0內(nèi)核模式設(shè)備驅(qū)動程序模型的擴展形式 ,是為基于 Win98和 Win2000的設(shè)備驅(qū)動程序提供的一種新的開發(fā)模型。本設(shè)計使用開發(fā)工具WINDRIVER大大簡化了驅(qū)動程序的開發(fā)。通過DiverWizard開發(fā)者很容易生成驅(qū)動程序框架,同時,WINDRIVER和VC++有很好的接口。生成驅(qū)動框架后在Microsoft Visual C++ 6.0中就可以通過在工程項目中加入9052_lib.c, 在應(yīng)用程序開頭#include"9052_lib.h",并添加特定的驅(qū)動代碼完成驅(qū)動編寫。下面是驅(qū)動程序主函數(shù)的部分代碼:
…
if (!PCI_Get_WD_handle(&hWD)) return 0;
WD_Close (hWD); //確定驅(qū)動是否裝上
hMy9052 = PMy9052_LocateAndOpenBoard(0x10b5, 0x9050, fUseInt); //打開9052設(shè)備
PMy9052_ADDR ad_sp = P9052_ADDR_SPACE0;
ad_sp =*PMy9052_GetAddrRangeName(PMy9052_ADDR addrSpace);//得到有效的映射空間
data = MYDIVER_ReadByte(hMYDIVER, ad_sp, Offset); //讀特定存儲位置的值
MYDIVER_WriteByte(hMYDIVER, ad_sp, Offset,data); //data值寫入存儲空間
…//數(shù)據(jù)處理
WD_Close (hWD); //結(jié)束
為了使用WDM驅(qū)動程序 ,需要在開始→設(shè)置→控制面板→添加 /刪除硬件向?qū)е羞x擇“下一步”,然后選擇“添加新設(shè)備” ,在查找新硬件頁中選擇“否 ,我想從列表中選擇硬件” ,在硬件類型頁中選擇“其它設(shè)備” ,在選擇一個設(shè)備驅(qū)動程序頁中選擇“從磁盤安裝”按鈕 ,接著選擇設(shè)計好的INF文件即可。INF文件負責復制WDM驅(qū)動程(MY9052.SYS)到Windows 98路徑下的SYSTEM\DRIVERS文件夾 ,并根據(jù)INF文件中的設(shè)定分配硬件資源。本地端89C51采用匯編語言控制液晶顯示,卡外數(shù)據(jù)采集及其與PC機的通信??傮w主程序流程圖如圖2所示。
[align=center]

圖2 主程序流程圖[/align]
4、結(jié)論
實踐證明,本課題開發(fā)的網(wǎng)絡(luò)控制卡,實用性強,可靠性好,并具有良好的可擴展性。在設(shè)計電路中,采用LATTICE自制雙口RAM及控制仲裁電路,減少了許多相應(yīng)的外圍器件,使成本有了大幅度的降低。本文使用驅(qū)動開發(fā)工具Windriver 5.05 ,并借用了VC++6.0集成環(huán)境,設(shè)計的驅(qū)動程序與Windows 98操作系統(tǒng)完全兼容 ,工作正常且穩(wěn)定。利用此WDM驅(qū)動程序,可以實現(xiàn)Windows 98環(huán)境下網(wǎng)絡(luò)控制卡采集數(shù)據(jù)的正確處理。
參考文獻
[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局部總線開發(fā)者指南 [M ]. 西安:西安電子科技大學出版社,1997:1-200 .
[4] [美 ]Chris Cant Windows WDM設(shè)備驅(qū)動程序開發(fā)指南[M] 孫義,馬波,國雪飛等 北京:機械工業(yè)出版社,2000