pci卡設(shè)計(jì)心得 (轉(zhuǎn)載,作者不詳) 其實(shí)從開(kāi)始我對(duì)pci卡是一竅不通的,硬件還好說(shuō),軟件驅(qū)動(dòng)程序更是一頭霧水,由于我的pci卡是要在windows98操作系統(tǒng)下應(yīng)用的,所以必須編寫(xiě)pci卡的驅(qū)動(dòng)程序,支持windows98下pnp硬件的驅(qū)動(dòng)程序一般可以編程vxd。如果想為了以后的2k平臺(tái)兼容就最好編wdm,因?yàn)閣indows2k不支持vxd,而且以后的發(fā)展wdm肯定要代替vxd了。不過(guò)由于我找到的資料基本上都是介紹vxd的,感覺(jué)vxd的技術(shù)好像更成熟一點(diǎn),編的人更多一點(diǎn),所以偷了一下懶(慚愧),就沒(méi)有去研究wdm,就選擇了vxd。
我的pci卡其實(shí)很簡(jiǎn)單,僅僅在本地端接了一個(gè)遙測(cè)信號(hào)的處理系統(tǒng)。
先說(shuō)說(shuō)硬件吧,其實(shí)按照正常的pci卡開(kāi)發(fā)過(guò)程,仔細(xì)閱讀pci規(guī)范是很重要的,但是由于時(shí)間比較短,我也沒(méi)有很大的耐性看那些破規(guī)范,也就稍稍了解了一下,F(xiàn)在市場(chǎng)上有許多的專(zhuān)用的pci規(guī)范接口芯片,這些芯片提供的pci接口完全符合規(guī)范,具體符合的規(guī)范版本可以參看具體的芯片所以即使開(kāi)發(fā)者不是很了解規(guī)范的具體細(xì)則,也可成功的設(shè)計(jì)pci卡。也就是可以達(dá)到傻瓜及設(shè)計(jì)。在連線(xiàn)上只要將對(duì)應(yīng)的引腳連在總線(xiàn)上就可以了,在連線(xiàn)時(shí)要注意pci規(guī)范中提到了信號(hào)用的反射波信號(hào),所以驅(qū)動(dòng)的信號(hào)只用了要求電壓的一半,另一半靠反射來(lái)提升。所以對(duì)信號(hào)線(xiàn)的長(zhǎng)度有要求:64位卡的32位信號(hào)具備的最大連線(xiàn)長(zhǎng)度是1500mil,64位擴(kuò)展信號(hào)的附加信號(hào)的連線(xiàn)長(zhǎng)度最大為2000mil,pci clk的長(zhǎng)度為2500mil+/-100mil,如果不夠長(zhǎng)度可以多繞幾圈。 還有一個(gè)要注意的是pci信號(hào)中prsnt1和prsnt2,開(kāi)始我對(duì)這兩個(gè)信號(hào)一直不是很清楚,清華bbs上的精華區(qū)說(shuō)得也是含糊,后來(lái)師兄devilface告訴我的prsnt1和prsnt2兩者必須有一個(gè)接gnd,否則系統(tǒng)肯定找不到卡,主板就是靠這兩個(gè)信號(hào)來(lái)判斷這個(gè)插槽上是否有卡,而其接法同pci卡使用的功率有關(guān)具體的含義如下(0 表示懸空,1表示接地): prsnt1 prsnt2 含義 0 0 no card 0 1 15w 1 0 25w 1 1 7.5w 另外pci卡上最好在從槽上引的電源上多加幾個(gè)電容,所有電源都必須退藕一般規(guī)范推薦pci卡做4層板,但是我只做了2層,其實(shí)無(wú)所謂,只要2層布得開(kāi),沒(méi)必要布4層,不過(guò)我布線(xiàn)的時(shí)候還是費(fèi)了一點(diǎn)功夫,用specctra布了5,6次,為研究室節(jié)省開(kāi)支嘛。ㄒ菍(dǎo)師看見(jiàn)了該多感動(dòng)呀。 pci規(guī)范規(guī)定了5v和3.3v兩種電氣規(guī)范,我們一般的機(jī)器上都是5v規(guī)范的插槽當(dāng)然也不乏3.3v的。所以我做的是5v的卡,不要以為5v的插槽上就得不到3.3v,一樣可以提供3.3v的。 前面提到了pci接口芯片,現(xiàn)在pci接口芯片技術(shù)已經(jīng)比較成熟了,介紹一點(diǎn)我知道的: AMCC:早期有5920,后來(lái)5933風(fēng)靡國(guó)內(nèi),早期的PCI接口都是用這做的amcc最近又推出了5935,估計(jì)改了一些5933的bug,我看它的文檔幾乎與 5933一致. plx :pci接口芯片的老大了. 9030,9052,9050:slave芯片 9050,9052面向isa卡轉(zhuǎn)pci的市場(chǎng). 9030為嵌入式專(zhuān)門(mén)設(shè)計(jì).他們的文檔不過(guò)100頁(yè)左右.不難 價(jià)錢(qián)便宜.不過(guò)170~190. 9054,9080,9060 9060是最早的32位master的pci控制芯片. 9080取代9060;9054可能更成熟一些.(?) iop480. 好東西呀!帶sdram接口和嵌入cpu,只是開(kāi)發(fā)起來(lái)困難比較大. 自己直接去plx的網(wǎng)站看看.www.plxtech.com,我就知道這么點(diǎn),大家可以補(bǔ)充。
我用的是9052,還是那句話(huà),用的人多,技術(shù)成熟,遇到問(wèn)題了可以到bbs發(fā)問(wèn)。我就喜歡撿現(xiàn)成的,不服你就說(shuō)嘛。。!
9052的機(jī)理比較簡(jiǎn)單,它內(nèi)部提供了兩種配置寄存器。一種叫做pci configuration registers ,這就是我們常說(shuō)的pci配置空間另外一個(gè)叫 local configuration registers,它提供了配置本地端的一些信息。這里提到了本地端,說(shuō)一說(shuō)。其實(shí)9052就相當(dāng)于一個(gè)橋,連接pci卡的本地端的芯片到pci總線(xiàn)上,將pci指令例如讀寫(xiě)某個(gè)寄存器、內(nèi)存、io翻譯到本地端。9052本地端提供了地址線(xiàn)26根(27:2)和數(shù)據(jù)線(xiàn)32根,還有LBE4根,可以翻譯成不同的地址線(xiàn),太麻煩了我就不詳細(xì)說(shuō)了,反正我用的LOCAL端是8位數(shù)據(jù),在這種模式下LBE1和LBE0提供地址線(xiàn)[1:0]。PCI配置寄存器提供了6個(gè)基地址寄存器,這些基地址都是在系統(tǒng)中的物理地址其中BASE1 和BASE2 都是用來(lái)訪(fǎng)問(wèn)LOCAL 配置寄存器的基地址,BASE1是映射到內(nèi)存的基地址,BASE2是映射到IO的基地址。所以可以通過(guò)內(nèi)存和IO來(lái)訪(fǎng)問(wèn)LOCAL 配置寄存器。 BASE2~5四個(gè)空間提供了訪(fǎng)問(wèn)本地端所接的4個(gè)芯片(當(dāng)然可以少于4個(gè)),它們將本地端的芯片通過(guò)本地端地址(在LOCAL配置寄存器中設(shè))翻譯成PCI的地址,也就是將本地的芯片映射到系統(tǒng)的內(nèi)存或io口。是不是很簡(jiǎn)單呀?這樣使用你的程序操作這一段內(nèi)存(或io)實(shí)際上就是對(duì)本地的芯片操作了。我使用的是內(nèi)存映射,本地端的芯片地址例如是0x0cc000,將此地址放入local配置寄存器的相應(yīng)位置(由于有四個(gè)空間,可以選擇任意一個(gè)空間來(lái)對(duì)應(yīng)此芯片),我用的是space0,還要配置此空間的大小,這樣在pci總線(xiàn)端系統(tǒng)會(huì)根據(jù)這個(gè)大小分配相應(yīng)的內(nèi)存空間(或io)供9052使用來(lái)映射local 上接的芯片。而系統(tǒng)分配的內(nèi)存空間的信息會(huì)寫(xiě)入pci配置寄存器中,只要讀出來(lái)就可以了。9052工作時(shí)還需要一個(gè)配置芯片eeprom,plx公司推薦了93cs46,這個(gè)eeprom比較好買(mǎi),在中發(fā)一層就有。eeprom會(huì)在pci卡上電的時(shí)候配置9052,主要配置了pci卡的vendorID和deviceID,這是系統(tǒng)用來(lái)標(biāo)識(shí)pci卡的,很重要,你的程序就靠這個(gè)標(biāo)識(shí)來(lái)找到pci卡。還配置了local端的4個(gè)space的local基地址和大小,以及每個(gè)space的其它一些參數(shù)(這里不說(shuō)了)。eeprom的內(nèi)容很重要的,如果沒(méi)寫(xiě)對(duì)很容易就出問(wèn)題我開(kāi)始老調(diào)不出來(lái)就是因?yàn)閑eprom中的配置寫(xiě)錯(cuò)了,郁悶了好長(zhǎng)一段時(shí)間喲!其實(shí)硬件本身很容易連,只要對(duì)應(yīng)的腳相連就可以了,注意本地芯片如果不申請(qǐng)總線(xiàn)控制的話(huà),9052的lhold信號(hào)一定要接gnd,還有如果本地芯片沒(méi)有提供irdy#信號(hào),9052的對(duì)應(yīng)腳也必須接地否則你一讀此芯片,系統(tǒng)就會(huì)死機(jī),永遠(yuǎn)等待那個(gè)irdy#信號(hào)有效才讀取數(shù)據(jù)。 |