摘 要:簡要介紹了PCI總線的特點,詳細描述了AMCC公司推出的一種PCI總線接口芯片S5920的結(jié)構(gòu)及特點,重點介紹S5920的PASS-THRU工作方式的機制,并通過實踐給出基于S5920及IMP16C550A的接口技術(shù)的軟、硬件實現(xiàn)。<!--摘要CH(結(jié)束)←--> 2 內(nèi)部結(jié)構(gòu) 3 S5920與IMP16C550A接口設(shè)計 3.2 軟件設(shè)計 4 結(jié) 語
<!--→關(guān)鍵CH(開始)--> 關(guān)鍵詞:S5920;PCI;PASS-THRU:VXD
<!--關(guān)鍵CH(結(jié)束)←--><!--→標題EN(開始)-->
PCI局部總線由于其速度快、可靠性高、成本低、兼容性好等性能,在各種計算機總線標準中占主導地位,采用基于PCI標準的接口設(shè)計已成為各種項目開發(fā)中的優(yōu)先選擇。但是,由于PCI總線規(guī)范和接口定義較為復雜,從而使得傳統(tǒng)的、以中小型規(guī)模器件開發(fā)接口電路的方法難以實現(xiàn)。鑒于此,許多廠家推出了專用的PCI總線接口芯片,其中AMCC公司生產(chǎn)的S59XX系列芯片因其功能強大、開發(fā)方便而應用廣泛。S5920是AMCC公司新近推出的一種PCI總線接口芯片,他與S5933相比,減少了總線主控的功能,但其他性能與之相仿或有所增強,而價格降低了很多。因此,在無需進行總線主控的場合,使用S5920具有更高的性價比。由于本設(shè)計是作為云臺控制端的接口,命令是單向發(fā)送,云臺只是接收命令執(zhí)行,故S5920完全能夠勝任且降低成本。S5920的主要特點如下:
。1)符合PCI2.2標準的總線目標。
。2)帶有4個集成32 b讀寫FIFO的直通通道。
(3)外加總線可工作于主動或被動狀態(tài)。
。4)支持串行nvRAM(非易失性RAM)和可選 的外部BIOS。
與S5933一樣,S5920為設(shè)計者提供了與PCI總線相連的靈活易用的方式。通過S5920,復雜的PCI總線可被轉(zhuǎn)換成易于使用的8/16/32 b用戶總線即外加總線(ADD-ON-BUS)。S5920有信箱(MAIL-BOX)和直通通道(PASS-THRU)2種傳輸方式,并為這2種方式提供了完備的操作寄存器和外加總線信號。設(shè)計者可根據(jù)需要選擇合適的傳輸方式,并通過S5920內(nèi)部寄存器完成各種定義和設(shè)置。這樣的特性使得設(shè)計者在進行應用設(shè)計時無需深入掌握PCI總線規(guī)范,而只需將注意力集中在外加總線邏輯和擴展卡功能的實現(xiàn)上即可,從而大大減少了為嚴格遵循PCI接口定義和總線時序所帶來的工作量。
S5920提供3個物理接口:PCI總線接口、外加直線接口和NVRAM接口(可選),內(nèi)部有2組寄存器,一組由PCI總線訪問,另一組由外加電路訪問。通過設(shè)置相關(guān)寄存器的值可以初始化S5920,PCI總線與外部設(shè)備的數(shù)據(jù)傳輸可以通過S5920內(nèi)部的信箱寄存器、FIFO寄存器或者直通寄存器。S5920的通信、控制和配置主要通過PCI配置寄存器的內(nèi)部操作寄存器備都必須提供的一組寄存器,他們之中保存了特殊的設(shè)備和產(chǎn)品信息,如廠商ID、設(shè)備ID、存儲空間需求等,其內(nèi)容在系統(tǒng)引導時被主BIOS讀入內(nèi)存。這些寄存器在S5920芯片中既可用自定義的缺省值進行初始化,也可由設(shè)計者用存儲在外部nvRAM中的內(nèi)容重新定義。
2.1 信箱通道
與S5933提供4個雙向的信箱通道不同的是,S5920只有1個雙向的信箱通道,但在多數(shù)設(shè)計中,這已經(jīng)足夠。由于S5920為信箱通道提供了非常靈活的操作方式,因而使得信箱的應用更加簡便容易。
2.2 PASS-THRU通道
PASS-THRU通道的實質(zhì)就是通過對PASS- THRU區(qū)域定義將ADD-ON上的資源S5920提供4個用戶可設(shè)置的PASS-THRU區(qū)域,在系統(tǒng)配置周期,PCIBIOS根據(jù)配置空間的設(shè)置給每個區(qū)域分配地址。每個PASS-THRU通道的地址范圍代表一個地址塊,其大小由用戶定義,最大范圍為512 MB。每一個地址塊的數(shù)據(jù)寬度可在8/16/32 b中選擇。PASSTHRU傳輸通道為PCI總線提供一種寄存的訪問端口,通過握手協(xié)議訪問ADD-ON上的資源。
為此,S5933提供PASS-THRU地址寄存器(APTA)和PASS-THRU數(shù)據(jù)寄存器(APTD)。這2個寄存器分別用來存放PCI主控設(shè)備所要訪問的PASS-THRU區(qū)域的地址和所訪問的數(shù)據(jù)。當PCI主控設(shè)備對PASS-THRU區(qū)域進行訪問時,S5920將要訪問的地址鎖存到PASS-THRU地址寄存器。如果是讀操作,則通過ADD-ON接口的狀態(tài)信號告知ADD-ON控制邏輯讀取數(shù)據(jù),ADD-ON控制邏輯可根據(jù)PASS-THRU地址寄存器的地址訪問ADD-ON上的相應設(shè)備并將所讀取的數(shù)據(jù)傳送到PASS-THRU數(shù)據(jù)寄存器,然后S5920再將該數(shù)據(jù)送到PCI總線上,完成一次讀操作;如果是寫操作,S5920將數(shù)據(jù)鎖存到PASS-THRU數(shù)據(jù)寄存器,然后通過ADD-ON接口的狀態(tài)信號告知ADD-ON控制邏輯讀取數(shù)據(jù),ADD-ON控制邏輯將數(shù)據(jù)從PASS-THRU數(shù)據(jù)寄存器中讀出,并根據(jù)PASS-THRU地址寄存器的地址傳送到相應的ADD-ON設(shè)備上,完成寫操作。
3.1 設(shè)計原理
IMP16C550A可以在不同的微機系統(tǒng)間提供數(shù)據(jù)通訊服務,他主要功能是完成并行CPU總線與串行外設(shè)間的數(shù)據(jù)字符轉(zhuǎn)換。他較之常用的INS8250除了繼承其基本功能外有了極大改進,使軟件工作量有所降低。由于單向發(fā)送控制命令,因此使用只具有目標設(shè)備功能的S5920(而不用具有主控功能的S5933)作為PCI總線和IMP10C550A之間的接口芯片。但IMP10C550A處理數(shù)據(jù)的速率相對較低,從S5920出來的數(shù)據(jù)傳輸速率和PCI總線的數(shù)據(jù)傳輸速率相同,IMP10C550A難以承受這么高的數(shù)據(jù)傳輸速率,以往經(jīng)典設(shè)計是采用在S5920和IMP10C550A之間必須加一級大容量緩沖器,以避免因IMP10C550A來不及數(shù)據(jù)接收而導致的數(shù)據(jù)丟失。
本設(shè)計地考慮如下:由于ADD-ON端的輸出頻率為33MHz(BPCLK),但ADD-ON端所有信號與ADCLK同步,故我們采用將BPCLK輸入EPM7128SLC進行4分頻,將分頻后的時鐘引至ADCLK端,而IMP10C550A的電路中我們采用11.059 2 MHz的晶振。通過這樣的方式,則S5920發(fā)送并行數(shù)據(jù)頻率低于并/串轉(zhuǎn)換的頻率,不會導致IMP10C550A來不及數(shù)據(jù)接收而導致的數(shù)據(jù)丟失;驹韴D如圖1所示。
本PCI板卡采用VXD驅(qū)動(本驅(qū)動適用于Windows 98),用NuMega VtoolsD為工具開發(fā)而成。命令數(shù)據(jù)傳輸采用S5920的PASS-THRU方式,基址1與2均采用I/O空間,基址3與4未用。幾個關(guān)鍵問題及解決如下:
(1)如何獲得系統(tǒng)分配給PCI卡的首地址
利用VxD來獲得,這也是編寫過程中所采用的方法。因為一旦即插即用的設(shè)備有什么增加或刪減,VxD就獲得一個消息即PNP_NEW_DEVNODE,在處理函數(shù)中判斷發(fā)生了什么情況,如果是他所對應設(shè)備的注冊和裝載,VxD就會返回CM_Register_Device_Driver函數(shù),而他又會調(diào)用另一個配置管理函數(shù)CM_Get_ALLoc_Log_Conf來獲得系統(tǒng)分配給他的資源。通過返回一個CM_CONFI的結(jié)構(gòu)。該結(jié)構(gòu)可以分為4組:內(nèi)存資源描述、I/O資源描述、IRQ資源描述和DMA資源。每組的第一段表明該類做了多少分配,后面的域為相關(guān)的參數(shù)項。值得注意的是各項資源(如控制空間基址、通用總線基址和IRQ)不固定,在不同的計算機上一般不相同,即使在同一臺計算機上當硬件環(huán)境變了后一般也會變。
(2)應用層程序如何與底層驅(qū)動程序進行通信
在Windows中,Win32應用程序主動對VxD的通信方法只有一種,就是利用設(shè)備輸入輸出控制函數(shù)DeviceIoControl(),他的定義如下:

其中:dwIoControlCode為應用程序調(diào)用VxD的命令代碼,他是應用程序和VxD通信的“語言”,通過他VxD知道應用程序要他做什么事情。
在VxD中收到W32_DeviceIOControl控制消息,由OnW32DeviceIoControl(PIOCTLPA RAMpDIOCParams)函數(shù)來響應。他的結(jié)構(gòu)定義如下:
參數(shù)pDIOCParams:為指向IOCTLParams結(jié)構(gòu)的指針。


其中:dioc_IOCtlCode為應用程序調(diào)用VxD的命令代碼。后面的6個參數(shù)分別與前面的參數(shù)相對應。
3.3 信號流程
流程圖如圖2所示。
該板卡應用于云臺控制系統(tǒng)及高溫油閥調(diào)控系統(tǒng),已取得很好效果,但傳輸距離有限。以后若需改進,可考慮在IMP16C550A的輸出端接一片MAXIM公司的MAX490這種TTL和RS485的電平轉(zhuǎn)換芯片,這樣可以延長數(shù)據(jù)傳輸距離。PCI總線接口芯片的出現(xiàn)使得開發(fā)人員擺脫了紛繁復雜的協(xié)議本身,從而能用更多精力與時間投入設(shè)計與開發(fā)本身,進而開發(fā)出高質(zhì)量的產(chǎn)品,同時可以縮短開發(fā)周期緊跟市場需求。
<!--→參考文獻CH(開始)-->





