0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于PCI總線芯片PCI9056實(shí)現(xiàn)機(jī)載嵌入式計(jì)算機(jī)系統(tǒng)的設(shè)計(jì)

電子設(shè)計(jì) ? 來(lái)源:?jiǎn)纹瑱C(jī)與嵌入式系統(tǒng)應(yīng)用 ? 作者:姜運(yùn)生 ? 2021-03-26 10:31 ? 次閱讀

PCI總線起源于微型計(jì)算機(jī),已經(jīng)成為微型計(jì)算機(jī)事實(shí)上的總線標(biāo)準(zhǔn)。因其眾多的功能、強(qiáng)大的兼容性而獨(dú)領(lǐng)風(fēng)騷。為PCI局部總線設(shè)計(jì)的器件是針對(duì)PCI而不是針對(duì)特定的CPU處理器,獨(dú)立于處理器的升級(jí)。其目標(biāo)是實(shí)現(xiàn)電流盡可能小的系統(tǒng),功耗低。軟件透明,在和PCI設(shè)備之間通信時(shí),軟件驅(qū)動(dòng)之間使用相同的命令集和狀態(tài)定義。隨著嵌入式計(jì)算機(jī)的發(fā)展,PCI總線也越來(lái)越多地被引入到嵌入式系統(tǒng)中。本文介紹在“十五”預(yù)研項(xiàng)目中實(shí)現(xiàn)嵌入式PCI總線的一些經(jīng)驗(yàn)體會(huì),與大家切磋。

1 PCI總線概述

PCI(Peripheral Component Interconnect)總線,即外設(shè)部件互聯(lián)總線。在PCI應(yīng)用系統(tǒng)中,如果某設(shè)備取得了總線控制權(quán),就稱其為“主設(shè)備”(master),而被主設(shè)備選中以進(jìn)行通信的設(shè)備稱為“從設(shè)備”(slave)。

系統(tǒng)信號(hào)包括復(fù)位信號(hào)RST和時(shí)鐘信號(hào)CLK。仲裁信號(hào)有總線申請(qǐng)REQ和總線授權(quán)信號(hào)GNT。接口控制信號(hào)包括主設(shè)備啟動(dòng)PCI交易的FRAME信號(hào)、主設(shè)備的交易數(shù)據(jù)有效信號(hào)IRDY和目標(biāo)完成本次數(shù)據(jù)交易的信號(hào)TRDY等。PCI沒(méi)有一般數(shù)據(jù)周期的讀寫信號(hào),而是采用命令編碼形式定義本次PCI周期的讀寫屬性。每個(gè)PCI周期由主設(shè)備啟動(dòng),在第一個(gè)時(shí)鐘周期,AD[31..0]信號(hào)承載地址信息,C/BE[3..0]的組合代表命令,定義PCI周期。第二個(gè)時(shí)鐘手,AD[31..0]由提供數(shù)據(jù)一方驅(qū)動(dòng),C/BE[3..0]的組合代表有效的字節(jié)。詳細(xì)情況可參閱參考文獻(xiàn),亦即PCI規(guī)范。

基于PCI總線芯片PCI9056實(shí)現(xiàn)機(jī)載嵌入式計(jì)算機(jī)系統(tǒng)的設(shè)計(jì)

2 PCI總線設(shè)計(jì)

目前有眾多的能支持PCI總線的廠家和芯片。其中以美國(guó)PLX公司的PCI9056功能最完備,使用簡(jiǎn)易。下面的設(shè)計(jì)以PCI9056為主要模型。

2.1 PCI系統(tǒng)時(shí)鐘

PIC總線的信號(hào)驅(qū)動(dòng)采用反射波方式而不是傳統(tǒng)的入射波。這樣,對(duì)各設(shè)備采樣時(shí)刻的偏差要求很高,亦即時(shí)鐘的偏斜(skew)應(yīng)盡可能小,最大的時(shí)鐘偏斜≤2ns。最好整個(gè)PCI系統(tǒng)各設(shè)備采用同一時(shí)刻;但同一時(shí)鐘的驅(qū)動(dòng)能力有限,不可能同步驅(qū)動(dòng)所有PCI設(shè)備。IDT74CT3807時(shí)鐘驅(qū)動(dòng)器可以解決這個(gè)問(wèn)題。它將一個(gè)時(shí)鐘源泉轉(zhuǎn)換為10個(gè)等同的時(shí)鐘,各時(shí)鐘之間的偏斜≤350ps。圖2是PCI時(shí)鐘解決方案。

o4YBAGBdSB6Ace7_AAAz0z6oQyU521.png

顯然,除去中央資源,這個(gè)PCI系統(tǒng)最多可以帶9個(gè)設(shè)備,對(duì)于嵌入式系統(tǒng)來(lái)說(shuō)已經(jīng)足夠了。在PCI底板上,為保證時(shí)鐘的偏斜率,各PCI時(shí)鐘必須走等長(zhǎng)線。

2.2 中央資源和PCI適配器

在PCI系統(tǒng)總線中,必須存在一個(gè)PCI主橋(Host)管理整個(gè)總線。主橋提供系統(tǒng)信號(hào)和進(jìn)行PCI部遲疑不決仲裁。PCI9056可以工作在Host方式下,也可以作為普通PCI適配器。圖3是兩種工作模式原理。

o4YBAGBdSECAD7flAAENsIXQzys756.png

當(dāng)HOSTEN引腳連接地時(shí),PCI9056工作在Host模式,亦即成為系統(tǒng)的中央資源,在Host模式時(shí),PCI9056的局部復(fù)位LRESET是輸入,接收來(lái)自局部CPU等的復(fù)位,然后在RST產(chǎn)生PCI總線復(fù)位,去復(fù)位整個(gè)PCI總線上的其它設(shè)備。而工作在適配器模式下的PCI9056剛好相反,RST接收來(lái)自PCI總線的復(fù)位,然后通過(guò)LRESET去復(fù)位PCI設(shè)備內(nèi)的其它器件。一般地,把主橋的PCI8056設(shè)置為總線仲裁器。注意二者仲裁信號(hào)REQ和GNT互換連接。

PCI9056作適配器時(shí),仲裁信號(hào)使用REQ和GNT。當(dāng)它作為總線仲裁器時(shí),還有其它的請(qǐng)求應(yīng)答信號(hào)對(duì)可以使用。圖3中沒(méi)有表示出來(lái)。

2.3 加電初始化

眾所周知,PCI總線的地址是可以根據(jù)系統(tǒng)動(dòng)態(tài)調(diào)整的。各個(gè)模塊在PCI空間所占的地址和長(zhǎng)度取決于內(nèi)部配置寄存器。系統(tǒng)程序一般在加電時(shí)就檢測(cè)整個(gè)系統(tǒng)所需的空間,分配各PCI設(shè)備的基址和所需存儲(chǔ)器空間、I/O空間。這個(gè)初始化過(guò)程可以用三個(gè)辦法完成。

如果PCI9056設(shè)計(jì)為系統(tǒng)的主橋(北橋),亦即中央資源(Host),則在它的局部總線一側(cè)都存在CPU。寄存器的初始化可以由CPU進(jìn)行,也可以由存入EEPROM的內(nèi)部參數(shù)自動(dòng)裝入。如果PCI9056作為一般PCI設(shè)備的適配器,一般沒(méi)有CPU,可以由初始化過(guò)的主橋通過(guò)PCI配置周期來(lái)設(shè)置內(nèi)部寄存器,也可以由EEPROM在加電時(shí)自動(dòng)載入。圖4中的EEPROM采用仙童公司的FM93C56或FM93CS56皆可。由局部CPU可設(shè)置內(nèi)部所有寄存器,控制邏輯應(yīng)產(chǎn)生CCS片選。若不采用EEPROM加電自動(dòng)載入初始化參數(shù)時(shí),應(yīng)該在DI/DO引腳下拉1kΩ的電阻。除由局部CPU初始化和EEPROM加電自動(dòng)初始化外,更多的PCI設(shè)備由主橋通過(guò)PCI總線來(lái)動(dòng)態(tài)初始化。系統(tǒng)軟件要保證各個(gè)設(shè)備的PCI空間不重疊。

pIYBAGBdSCaAfN4lAABGQKWxNq0783.png

3 軟件設(shè)計(jì)

PCI總線不易調(diào)試,不但在于硬件設(shè)計(jì)復(fù)雜,還在于驅(qū)動(dòng)軟件有相當(dāng)?shù)碾y度。但只要把幾個(gè)基本概念和功能巧妙地體現(xiàn)在軟件中,整個(gè)驅(qū)動(dòng)軟件就很清晰了。以下代碼是在TMS320C6701環(huán)境下的一些成熟的驅(qū)動(dòng)函數(shù)。

3.1 配置主橋作為PCI總線的主設(shè)備

在初始化PCI總線其它設(shè)備時(shí),中央資源作為PCI總線的主設(shè)備。此時(shí)由局部CPU設(shè)置所有寄存器,并不產(chǎn)生任務(wù)PCI周期,亦即局部邏輯必須譯碼產(chǎn)生CCS信號(hào)。

//功能:配置中央資源的PCI9056作為主設(shè)備時(shí)的參數(shù)

//入口參數(shù)

//Range: 映像范圍長(zhǎng)度

//PCIBAddr: PCI基址

//LocBAM:局部存儲(chǔ)器基址

//LocBAMI: 局部I/O配置基址

void ConfigHostMaster(UINT Range,UINT PCIBAddr,UINT LocBAM,UINT LocBAMI)

{UINT Aword;

//PCI命令碼寄存器CNTRL

//D3..0=PCI Read Command Code for DMA

// 缺省1110b:Memory Line Read,存儲(chǔ)器行讀

//D7..4=PCI Write Command Code for DMA

// 缺省0111b:MemoryWrite, 存儲(chǔ)器寫

//D11..8=PCI MemoryRead Command Code for Direct Master,

// 缺省0110b:MemoryRead 存儲(chǔ)器讀

//D15..12=PCI MemoryWrite Command Code for Direct Master.

// 缺省1110b:MemoryWrite, 存儲(chǔ)器寫

//D30=1:復(fù)位PCI方

//就用這個(gè)缺省值,即000F.767EH

*(int *)LOC_CNTRL=*(int *)LOC_CNTRL|0x400000000;

Aword=0x000FFFFF;

While(Aword--); //復(fù)位持續(xù)

*(int *)LOC_CNTRL=*(int*)LOC_CNTRL & 0xBFFFFFFF;

//清掉軟件復(fù)位

//PCI仲裁控制器PCIARB

*(int *)LOC_PCIARB=0x00000001;//中央資源要當(dāng)PCI總線仲裁器

//---Direct Master-to-PCI地址映射--

//局部基址+Range-->PCI地址映射。--

//局部基址+Range-->PCI基址+Range

//1.范圍寄存器DMRR

//長(zhǎng)度范圍值DMRR

//長(zhǎng)度范圍值應(yīng)該是64KB的倍數(shù),亦即D15..0=0000H

//而填入值應(yīng)該是長(zhǎng)度值的被碼,即變反+1,如

//64KB=0001.0000H-->FFFE.FFFFH+1=FFFF.0000H

//1MB=0010.0000H-->FFEF.FFFFH+1=FFF0.0000H

*(int *)LOC_DMRR=(~Range)+1;//映像范圍

//2.局部存儲(chǔ)器基址DMLBAM(P11-29)

//D15..0:Reserved.

//D31..16:基址高16位,必須是范圍值的倍數(shù)

*(int *)LOC_DMLBAM=LocBAM;

//3.局部I/O Configuration基址DMLBAI

//當(dāng)配置訪問(wèn)使能時(shí),對(duì)這個(gè)寄存器所指的基址進(jìn)行訪問(wèn),將在產(chǎn)生PCI配置周期

*(int *)LOC_DMLBAI=LocBAMI;

//4.PCI基址寄存器DMPBAM(P11-30)*(int *)LOC_DMPBAM=PCIBAddr|0xE3;

*(int *)LOC_DMCFGA=0x00000000;//暫時(shí)不產(chǎn)生配置周期

*(int *)LOC_DMDAC=0x0; //高32位地址始終為0,需要雙地址

//5.命令寄存器PCICR(P11-8)

//D0=IO Space=“1:要響應(yīng)I/O周期”。

//D2=Master Enable=“1:允許做Master”。

*(int *)PCI9056_PCICR|=0x00000007;

return;

}

當(dāng)PCI總線上的其它設(shè)備需要訪問(wèn)中央資源時(shí),主橋就成為從設(shè)備,所以應(yīng)該配置其PCI空間到局部空間映射的參數(shù)。這個(gè)過(guò)程是一個(gè)逆變換,代碼在此省略。

3.2 配置PCI總線從設(shè)備

當(dāng)中央資源作為主設(shè)備訪問(wèn)其它PCI設(shè)備時(shí),必須對(duì)從設(shè)備進(jìn)行適當(dāng)?shù)某跏蓟?。一般選用PCI配置周期設(shè)置PCI橋的關(guān)鍵配置寄存器,然后用普通PCI存儲(chǔ)器周期設(shè)置其它寄存器。

Void ConfigPCISlave(UINT And,UINT Range,UINT PCIBAddr,UINT LRegPBA,UINT LocBAddr)

//功能:通過(guò)主橋產(chǎn)生PCI配置周期,去配置PCI總線上作為從方的PCI9056

//入口參數(shù):

//ADn:設(shè)備號(hào),亦即和被配置設(shè)備的IDSEL#相連的PCI地址

//Range:范圍長(zhǎng)度

//PCIBAddr:PCI基址

//LRegPBA:內(nèi)部寄存器的PCI存儲(chǔ)器基址(范圍512B),

//亦即PCIBAR0值

//LocBAddr:局部基址

{UINT Abit32W,LROffset;

//------用配置周期-----------------------

//設(shè)置命令寄存器PCICR

//D0=IO Space=“1:要響應(yīng)I/O周期”

//D1=Memory Space=“1:要響應(yīng)Memory周期”

//D2=Master Enable=“1:允許做Master”

ABit32W=GetConfigReg(ADn,PCI9056_PCICR)|0x07;

//讀原值并置位

SetConfigReg(and,PCI9056_PCICR,ABit32W);

//PCIBAR0:其它寄存器的PCI基址。

SetConfigReg(ADn,PCI9056_PCIBAR0,LRegPBA);

//設(shè)置PCI基址,以便能訪問(wèn)其它寄存器

SetConfigReg(ADn,PCI9056_PCIBAR2,PCIBAddr);

//-----以下用PCI存儲(chǔ)器周期-----------

//1.Space0的局部地址范圍LAS0RR

LROffset=LRegPBA&0x001FFFFF;//取局部寄存器PCI基址的位移

ABit32W=~Range+1; //計(jì)算范圍值的補(bǔ)碼

SetPCIReg(LROffset,PCI_LAS0RR,Abit32W);

//2.Space0的局部基址LAS0BA

SetPCIReg(LROffset,PCI_LAS0BA,LocBAddr|1);

SetPCIReg(LROffset,PCI_EROMBA,0x38);

//4.Space 0/ROM的局部總線描述符LBRD0(P11-27)

//D1D0=11:Space 0-32Bit數(shù)據(jù)寬度。(復(fù)位缺?。?/p>

//D5..2=內(nèi)部等待狀態(tài)計(jì)數(shù)器。

//D6=1:需要READY#信號(hào)。(復(fù)位缺省)

//D7=1:允許連續(xù)Burst

//D7=0:Burst-4 Mode (復(fù)位缺?。?/p>

//D8=0:Space 0允許預(yù)取

//D9=0:擴(kuò)展ROM允許預(yù)取

//用缺省值40430043H

SetPCIReg(LROffset,PCI_LBRD0,0x40430043);

ABit32W=GetPCIReg(LROffset,PCI_LBRD0);

if(ABit32W!=0x40430043)

printf(“局部總線描述符LBRD0缺省值出錯(cuò)=%8x”,ABit32W);

return;

}

PCI總線上的其它設(shè)備身份是動(dòng)態(tài)變化的,所以對(duì)有能力做PCI主設(shè)備的,應(yīng)該配置其局部空間到PCI空間映射的參數(shù)。

結(jié)語(yǔ)

PCI局部總線規(guī)范也在更新,向更快更強(qiáng)更省電的方向邁進(jìn)。時(shí)鐘速率由最初的33MHz提高到66MHz,數(shù)據(jù)寬度也由32位擴(kuò)展到可支持64位,工作電壓從5V轉(zhuǎn)變?yōu)?.3V,使功耗更小??梢灶A(yù)計(jì),嵌入式PCI總線將極大提高機(jī)載嵌入式計(jì)算機(jī)系統(tǒng)的總體性能。

責(zé)任編輯:gt

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 芯片
    +關(guān)注

    關(guān)注

    450

    文章

    49631

    瀏覽量

    417106
  • 計(jì)算機(jī)
    +關(guān)注

    關(guān)注

    19

    文章

    7168

    瀏覽量

    87142
  • 總線
    +關(guān)注

    關(guān)注

    10

    文章

    2817

    瀏覽量

    87697
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    FPGA和PCI9056接口問(wèn)題求助!

    小弟最近在做FPGA和PCI9056的接口,PCI9056工作在C模式(從模式和DMA模式)下;數(shù)據(jù)手冊(cè)上說(shuō)PCI9056每次突發(fā)讀寫的數(shù)據(jù)數(shù)量是可以設(shè)置的,分為1次發(fā)送1個(gè)32bit、1次發(fā)送4個(gè)
    發(fā)表于 09-12 20:43

    嵌入式計(jì)算機(jī)性能怎么評(píng)測(cè)?

    嵌入式計(jì)算機(jī)的設(shè)計(jì)不同于通用的計(jì)算機(jī)設(shè)計(jì),它的設(shè)計(jì)過(guò)程較復(fù)雜。對(duì)于嵌人計(jì)算機(jī)的設(shè)計(jì),是針對(duì)具體的應(yīng)用問(wèn)題,通過(guò)對(duì)問(wèn)題的描述、建模,分解嵌入式
    發(fā)表于 09-23 06:34

    嵌入式計(jì)算機(jī)性能怎么評(píng)測(cè)?

    嵌入式計(jì)算機(jī)的設(shè)計(jì)不同于通用的計(jì)算機(jī)設(shè)計(jì),它的設(shè)計(jì)過(guò)程較復(fù)雜。對(duì)于嵌人計(jì)算機(jī)的設(shè)計(jì),是針對(duì)具體的應(yīng)用問(wèn)題,通過(guò)對(duì)問(wèn)題的描述、建模,分解嵌入式
    發(fā)表于 03-09 07:35

    嵌入式計(jì)算機(jī)系統(tǒng)怎么降低功耗?

    綠色環(huán)保節(jié)能是全球化的熱潮,而嵌入式計(jì)算機(jī)系統(tǒng)被廣泛應(yīng)用于便攜和移動(dòng)性較強(qiáng)的產(chǎn)品,低功耗設(shè)計(jì)不僅是綠色環(huán)保的要求,也是嵌入式計(jì)算機(jī)系統(tǒng)體積和質(zhì)量的約束。隨著市場(chǎng)對(duì)嵌入式計(jì)算機(jī)系統(tǒng)在體
    發(fā)表于 03-31 07:39

    嵌入式系統(tǒng)是什么?嵌入式計(jì)算機(jī)系統(tǒng)有哪些特點(diǎn)?

    什么是嵌入式系統(tǒng)嵌入式微處理器有哪些特點(diǎn)?與通用型計(jì)算機(jī)系統(tǒng)相比,嵌入式計(jì)算機(jī)系統(tǒng)具有哪些特點(diǎn)?
    發(fā)表于 04-26 07:21

    什么是嵌入式計(jì)算機(jī)

    嵌入式計(jì)算機(jī)系統(tǒng)無(wú)處不在。如果你去過(guò)一家超級(jí)市場(chǎng),并且注意到墻上有售貨亭機(jī),那么這些售貨亭很有可能由嵌入式計(jì)算機(jī)供電。本文將介紹有關(guān)嵌入式PC和計(jì)算機(jī)所需的一切知識(shí)。什么是
    發(fā)表于 10-27 08:05

    什么是嵌入式計(jì)算機(jī)

    什么是嵌入式計(jì)算機(jī)時(shí)間:2012-2-26顧名思義,嵌入式計(jì)算機(jī)嵌入在宿主系統(tǒng)中使用的計(jì)算機(jī),如嵌入
    發(fā)表于 10-27 06:02

    嵌入式系統(tǒng)計(jì)算機(jī)系統(tǒng)的區(qū)別是什么?

    原標(biāo)題:嵌入式系統(tǒng)計(jì)算機(jī)系統(tǒng)有什么不同近段時(shí)間很多學(xué)習(xí)單片機(jī)或者傳統(tǒng)計(jì)算機(jī)的人員參加嵌入式培訓(xùn)的比例在不斷增大,這部分同學(xué)可能以前對(duì)于
    發(fā)表于 10-28 08:54

    嵌入式計(jì)算機(jī)系統(tǒng)概述

    嵌入式計(jì)算機(jī)系統(tǒng)概述:定義:以應(yīng)用為中心、以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟件硬件可裁剪,適應(yīng)應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)
    發(fā)表于 12-22 06:08

    討論幾種類型的嵌入式計(jì)算機(jī)系統(tǒng)

    型的嵌入式PC今天,我們將討論幾種類型的嵌入式計(jì)算機(jī)系統(tǒng),其中包括:堅(jiān)固的工業(yè)PC,車載計(jì)算機(jī),物聯(lián)網(wǎng)網(wǎng)關(guān),嵌入
    發(fā)表于 12-23 07:38

    嵌入式計(jì)算機(jī)系統(tǒng)相關(guān)資料推薦

    嵌入式計(jì)算機(jī)系統(tǒng)~
    發(fā)表于 12-23 06:00

    嵌入式計(jì)算機(jī)系統(tǒng)相關(guān)資料下載

    嵌入式計(jì)算機(jī)系統(tǒng)
    發(fā)表于 12-23 07:51

    PCI9056 pdf datasheet

    PCI9056 pd
    發(fā)表于 10-13 11:12 ?93次下載

    PC機(jī)與嵌入式計(jì)算機(jī)系統(tǒng)串行通訊的硬軟件實(shí)現(xiàn)

    【摘 要】 介紹了微機(jī)(PC)與嵌入式計(jì)算機(jī)系統(tǒng)的串行通訊的方法,敘述了嵌入式計(jì)算機(jī)在溫控系統(tǒng)中的應(yīng)用和硬件結(jié)構(gòu),給出了Windows98下的串行通訊程序。
    發(fā)表于 05-15 21:41 ?790次閱讀
    PC機(jī)與<b class='flag-5'>嵌入式計(jì)算機(jī)系統(tǒng)</b>串行通訊的硬軟件<b class='flag-5'>實(shí)現(xiàn)</b>

    什么是嵌入式計(jì)算機(jī)

    嵌入式計(jì)算機(jī)是一種專門設(shè)計(jì)用于特定功能的計(jì)算機(jī)系統(tǒng),通常被嵌入到其他設(shè)備中,以執(zhí)行特定的任務(wù)。這種計(jì)
    的頭像 發(fā)表于 01-15 15:10 ?1049次閱讀
    什么是<b class='flag-5'>嵌入式計(jì)算機(jī)</b>?