PCI總線的配置
2.4 PCI總線的配置
PCI總線定義了兩類配置請求,一個是Type 00h配置請求,另一個是Type 01h配置請求。PCI總線使用這些配置請求訪問PCI總線樹上的設(shè)備配置空間,包括PCI橋和PCI Agent設(shè)備的配置空間。
其中HOST主橋或者PCI橋使用Type 00h配置請求,訪問與HOST主橋或者PCI橋直接相連的PCI Agent設(shè)備或者PCI橋[1];而HOST主橋或者PCI橋使用Type 01h配置請求,需要至少穿越一個PCI橋,訪問沒有與其直接相連的PCI Agent設(shè)備或者PCI橋。如圖2?8所示,HOST主橋可以使用Type 00h配置請求訪問PCI設(shè)備01,而使用Type 01h配置請求通過PCI橋1、2或者3轉(zhuǎn)換為Type 00h配置請求之后,訪問PCI總線樹上的PCI設(shè)備11、21、22、31和32[2]。
當(dāng)x86處理器對CONFIG_DATA寄存器進(jìn)行讀寫操作時,HOST主橋?qū)Q定向PCI總線發(fā)送Type 00h配置請求還是Type 01h配置請求。在PCI總線事務(wù)的地址周期中,這兩種配置請求總線事務(wù)的不同反映在PCI總線的AD[31:0]信號線上。
值得注意的是,PCIe總線還可以使用ECAM(Enhanced Configuration Access Mechanism)機(jī)制訪問PCIe設(shè)備的擴(kuò)展配置空間,使用這種方式可以訪問PCIe設(shè)備256B~4KB之間的擴(kuò)展配置空間。但是本節(jié)僅介紹如何使用CONFIG_ADDRESS和CONFIG_FATA寄存器產(chǎn)生Type 00h和Type 01h配置請求。有關(guān)ECAM機(jī)制的詳細(xì)說明見第5.3.2節(jié)。
處理器首先將目標(biāo)PCI設(shè)備的ID號保存在CONFIG_ADDRESS寄存器中,之后HOST主橋根據(jù)該寄存器的Bus Number字段,決定是產(chǎn)生Type 00h配置請求,還是Type 01h配置請求。當(dāng)Bus Number字段為0時,將產(chǎn)生Type 00h配置請求,因為與HOST主橋直接相連的總線號為0;大于0時,將產(chǎn)生Type 01h配置請求。
在地址周期中,HOST主橋使用配置讀寫總線事務(wù),將CONFIG_ADDRESS寄存器的內(nèi)容拷貝到PCI總線的AD[31:0]信號線中。CONFIG_ADDRESS寄存器與Type 01h配置請求的對應(yīng)關(guān)系如圖2?11所示。
從圖2?11中可以發(fā)現(xiàn),CONFIG_ADDRESS寄存器的內(nèi)容基本上是原封不動的拷貝到PCI總線的AD[31:0]信號線上的[3]。其中CONFIG_ADDRESS的Enable位不被拷貝,而AD總線的第0位為必須為1,表示當(dāng)前配置請求是Type 01h。
當(dāng)PCI總線接收到Type 01配置請求時,將尋找合適的PCI橋[4]接收這個配置信息。如果這個配置請求是直接發(fā)向PCI橋下的PCI設(shè)備時,PCI橋?qū)⒔邮諅€Type 01配置請求,并將其轉(zhuǎn)換為Type 00h配置請求;否則PCI橋?qū)?dāng)前Type 01h配置請求原封不動的傳遞給下一級PCI總線。
如果HOST主橋或者PCI橋發(fā)起的是Type 00h配置請求,CONFIG_ADDRESS寄存器與AD[31:0]的轉(zhuǎn)換如圖2?12所示。
此時處理器對CONFIG_DATA寄存器進(jìn)行讀寫時,處理器將CONFIG_ADDRESS寄存器中的Function Number和Register Number字段拷貝到PCI的AD總線的第10~2位;將AD總線的第1~0位賦值為0b00。PCI總線在配置請求總線事務(wù)的地址周期根據(jù)AD[1:0]判斷當(dāng)前配置請求是Type 00h還是Type 01h,如果AD[1:0]等于0b00表示是Type 00h配置請求,如果AD[1:0]等于0b01表示是Type 01h配置請求。
而AD[31:11]與CONFIG_ADDRESS的Device Number字段有關(guān),在Type 00h配置請求的地址周期中,AD[31:11]位有且只有一位為1,其中AD[31:11]的每一位選通一個PCI設(shè)備的配置空間。如第1.2.2節(jié)所述,PCI設(shè)備配置空間的片選信號是IDSEL,因此AD[31:11]將與PCI設(shè)備的IDSEL信號對應(yīng)相連。
當(dāng)以下兩種請求之一滿足時,HOST主橋或者PCI橋?qū)⑸蒚ype 00h配置頭,并將其發(fā)送到指定的PCI總線上。
(1) CONFIG_ADDRESS寄存器的Bus Number字段為0時,處理器訪問CONFIG_DATA寄存器時,HOST主橋?qū)⒅苯酉騊CI總線0發(fā)出Type 00h配置請求。因為與HOST主橋直接相連的PCI總線號為0,此時表示HOST主橋需要訪問與其直接相連的PCI設(shè)備。
(2) 當(dāng)PCI橋收到Type 01h配置頭時,將檢查Type 01配置頭的Bus Number字段,如果這個Bus Number與PCI橋的Secondary Bus Number相同,則將這個Type 01配置頭轉(zhuǎn)換為Type 00h配置頭,并發(fā)送到該P(yáng)CI橋的Secondary總線上。
其中Type 00h配置請求可以直接讀取PCI Agent設(shè)備的配置空間,而Type 01h配置請求在通過PCI橋時,最終將被轉(zhuǎn)換為Type 00h配置請求,并讀取PCI Agent設(shè)備的配置寄存器。本節(jié)重點講述PCI橋如何將Type 01h配置請求轉(zhuǎn)換為Type 00h配置請求。
首先Type 00h配置請求不會被轉(zhuǎn)換成Type 01h配置請求,因為Type 00h配置請求是發(fā)向最終PCI Agent設(shè)備,這些PCI Agent設(shè)備不會轉(zhuǎn)發(fā)這些配置請求。
當(dāng)CONFIG_ADDRESS寄存器的Bus Number字段為0時,處理器對CONFIG_DATA寄存器操作時,HOST主橋?qū)⒅苯赢a(chǎn)生Type 00h配置請求,掛接在PCI總線0上的某個設(shè)備將通過ID譯碼接收這個Type 00h配置請求,并對配置寄存器進(jìn)行讀寫操作。如果PCI總線上沒有設(shè)備接收這個Type 00h配置請求,將引發(fā)Master Abort,詳情見PCI總線規(guī)范,本節(jié)對此不做進(jìn)一步說明。
如果CONFIG_ADDRESS寄存器的Bus Number字段為n(n≠0),即訪問的PCI設(shè)備不是直接掛接在PCI總線0上的,此時HOST主橋?qū)ONFIG_DATA寄存器操作時,將產(chǎn)生Type 01h配置請求,PCI總線0將遍歷所有在這條總線上的PCI橋,確定由哪個PCI橋接收這個Type 01h配置請求。
如果n大于等于某個PCI橋的Secondary Bus Number寄存器,而且小于等于Subordinate Bus number寄存器,那么這個PCI橋?qū)⒔邮赵诋?dāng)前PCI總線上的Type 01配置請求,并采用以下規(guī)則進(jìn)行遞歸處理。
(1) 開始。
(2) 遍歷當(dāng)前PCI總線的所有PCI橋。
(3) 如果n等于某個PCI橋的Secondary Bus Number寄存器,說明這個Type 01配置請求的目標(biāo)設(shè)備直接連接在該P(yáng)CI橋的Secondary bus上。此時PCI橋?qū)ype 01配置請求轉(zhuǎn)換為Type 00h配置請求,并將這個配置請求發(fā)送到PCI橋的Secondary Bus上,Secondary Bus上的某個設(shè)備將響應(yīng)這個Type 00h配置請求,并與HOST主橋進(jìn)行配置信息的交換,轉(zhuǎn)(5)。
(4) 如果n大于PCI橋的Secondary Bus Number寄存器,而且小于等于PCI橋的Subordinate Bus number寄存器,說明這個Type 01配置請求的目標(biāo)設(shè)備不與該P(yáng)CI橋的Secondary Bus直接相連,但是由這個PCI橋下游總線上的某個PCI橋管理。此時PCI橋?qū)⑹紫日J(rèn)領(lǐng)這個Type 01配置請求,并將其轉(zhuǎn)發(fā)到Secondary Bus,轉(zhuǎn)(2)。
(5) 結(jié)束。
下文將舉例說明PCI總線配置請求的轉(zhuǎn)換原則,并以圖2?8為例說明處理器如何訪問PCI設(shè)備01和PCI設(shè)備31的配置空間。PCI設(shè)備01直接與HOST主橋相連,因此HOST主橋可以使用Type 00h配置請求訪問該設(shè)備。
而HOST主橋需要經(jīng)過多級PCI橋才能訪問PCI設(shè)備31,因此HOST主橋需要首先使用Type 01h配置請求,之后通過PCI橋1、2和3將Type 01h配置請求轉(zhuǎn)換為Type 00h配置請求,最終訪問PCI設(shè)備31。
首先HOST處理器將CONFIG_ADDRESS寄存器的Enable位置1,Bus Number號置為0,并對該寄存器的Device、Function和Register Number字段賦值。當(dāng)處理器對CONFIG_DATA寄存器訪問時,HOST主橋?qū)⒋娣旁贑ONFIG_ADDRESS寄存器中的數(shù)值,轉(zhuǎn)換為Type 00h配置請求,并發(fā)送到PCI總線0上,PCI設(shè)備01將接收這個Type 00h配置請求,并與處理器進(jìn)行配置信息交換。
其中HOST主橋或者PCI橋使用Type 00h配置請求,訪問與HOST主橋或者PCI橋直接相連的PCI Agent設(shè)備或者PCI橋[1];而HOST主橋或者PCI橋使用Type 01h配置請求,需要至少穿越一個PCI橋,訪問沒有與其直接相連的PCI Agent設(shè)備或者PCI橋。如圖2?8所示,HOST主橋可以使用Type 00h配置請求訪問PCI設(shè)備01,而使用Type 01h配置請求通過PCI橋1、2或者3轉(zhuǎn)換為Type 00h配置請求之后,訪問PCI總線樹上的PCI設(shè)備11、21、22、31和32[2]。
當(dāng)x86處理器對CONFIG_DATA寄存器進(jìn)行讀寫操作時,HOST主橋?qū)Q定向PCI總線發(fā)送Type 00h配置請求還是Type 01h配置請求。在PCI總線事務(wù)的地址周期中,這兩種配置請求總線事務(wù)的不同反映在PCI總線的AD[31:0]信號線上。
值得注意的是,PCIe總線還可以使用ECAM(Enhanced Configuration Access Mechanism)機(jī)制訪問PCIe設(shè)備的擴(kuò)展配置空間,使用這種方式可以訪問PCIe設(shè)備256B~4KB之間的擴(kuò)展配置空間。但是本節(jié)僅介紹如何使用CONFIG_ADDRESS和CONFIG_FATA寄存器產(chǎn)生Type 00h和Type 01h配置請求。有關(guān)ECAM機(jī)制的詳細(xì)說明見第5.3.2節(jié)。
處理器首先將目標(biāo)PCI設(shè)備的ID號保存在CONFIG_ADDRESS寄存器中,之后HOST主橋根據(jù)該寄存器的Bus Number字段,決定是產(chǎn)生Type 00h配置請求,還是Type 01h配置請求。當(dāng)Bus Number字段為0時,將產(chǎn)生Type 00h配置請求,因為與HOST主橋直接相連的總線號為0;大于0時,將產(chǎn)生Type 01h配置請求。
2.4.1 Type 01h和Type 00h配置請求
本節(jié)首先介紹Type 01h配置請求,并從PCI總線使用的信號線的角度上,講述HOST主橋如何生成Type 01配置請求。在PCI總線中,只有PCI橋能夠接收Type 01h配置請求。Type 01h配置請求不能直接發(fā)向最終的PCI Agent設(shè)備,而只能由PCI橋?qū)⑵滢D(zhuǎn)換為Type 01h繼續(xù)發(fā)向其他PCI橋,或者轉(zhuǎn)換為Type 00h配置請求發(fā)向PCI Agent設(shè)備。PCI橋還可以將Type 01h配置請求轉(zhuǎn)換為Special Cycle總線事務(wù)(HOST主橋也可以實現(xiàn)該功能),本節(jié)對這種情況不做介紹。在地址周期中,HOST主橋使用配置讀寫總線事務(wù),將CONFIG_ADDRESS寄存器的內(nèi)容拷貝到PCI總線的AD[31:0]信號線中。CONFIG_ADDRESS寄存器與Type 01h配置請求的對應(yīng)關(guān)系如圖2?11所示。
從圖2?11中可以發(fā)現(xiàn),CONFIG_ADDRESS寄存器的內(nèi)容基本上是原封不動的拷貝到PCI總線的AD[31:0]信號線上的[3]。其中CONFIG_ADDRESS的Enable位不被拷貝,而AD總線的第0位為必須為1,表示當(dāng)前配置請求是Type 01h。
當(dāng)PCI總線接收到Type 01配置請求時,將尋找合適的PCI橋[4]接收這個配置信息。如果這個配置請求是直接發(fā)向PCI橋下的PCI設(shè)備時,PCI橋?qū)⒔邮諅€Type 01配置請求,并將其轉(zhuǎn)換為Type 00h配置請求;否則PCI橋?qū)?dāng)前Type 01h配置請求原封不動的傳遞給下一級PCI總線。
如果HOST主橋或者PCI橋發(fā)起的是Type 00h配置請求,CONFIG_ADDRESS寄存器與AD[31:0]的轉(zhuǎn)換如圖2?12所示。
此時處理器對CONFIG_DATA寄存器進(jìn)行讀寫時,處理器將CONFIG_ADDRESS寄存器中的Function Number和Register Number字段拷貝到PCI的AD總線的第10~2位;將AD總線的第1~0位賦值為0b00。PCI總線在配置請求總線事務(wù)的地址周期根據(jù)AD[1:0]判斷當(dāng)前配置請求是Type 00h還是Type 01h,如果AD[1:0]等于0b00表示是Type 00h配置請求,如果AD[1:0]等于0b01表示是Type 01h配置請求。
而AD[31:11]與CONFIG_ADDRESS的Device Number字段有關(guān),在Type 00h配置請求的地址周期中,AD[31:11]位有且只有一位為1,其中AD[31:11]的每一位選通一個PCI設(shè)備的配置空間。如第1.2.2節(jié)所述,PCI設(shè)備配置空間的片選信號是IDSEL,因此AD[31:11]將與PCI設(shè)備的IDSEL信號對應(yīng)相連。
當(dāng)以下兩種請求之一滿足時,HOST主橋或者PCI橋?qū)⑸蒚ype 00h配置頭,并將其發(fā)送到指定的PCI總線上。
(1)
(2)
2.4.2 PCI總線配置請求的轉(zhuǎn)換原則
當(dāng)CONFIG_ADDRESS寄存器的Enable位為1,系統(tǒng)軟件訪問CONFIG_DATA寄存器時,HOST主橋可以產(chǎn)生兩類PCI總線配置讀寫總線事務(wù),分別為Type 00h和Type 01h配置讀寫總線事務(wù)。在配置讀寫總線事務(wù)的地址周期和數(shù)據(jù)周期中,CONFIG_ADDRESS和CONFIG_DATA寄存器中的數(shù)據(jù)將被放置到PCI總線的AD總線上。其中Type 00h和Type 01h配置讀寫總線事務(wù)映射到AD總線的數(shù)據(jù)并不相同。其中Type 00h配置請求可以直接讀取PCI Agent設(shè)備的配置空間,而Type 01h配置請求在通過PCI橋時,最終將被轉(zhuǎn)換為Type 00h配置請求,并讀取PCI Agent設(shè)備的配置寄存器。本節(jié)重點講述PCI橋如何將Type 01h配置請求轉(zhuǎn)換為Type 00h配置請求。
首先Type 00h配置請求不會被轉(zhuǎn)換成Type 01h配置請求,因為Type 00h配置請求是發(fā)向最終PCI Agent設(shè)備,這些PCI Agent設(shè)備不會轉(zhuǎn)發(fā)這些配置請求。
當(dāng)CONFIG_ADDRESS寄存器的Bus Number字段為0時,處理器對CONFIG_DATA寄存器操作時,HOST主橋?qū)⒅苯赢a(chǎn)生Type 00h配置請求,掛接在PCI總線0上的某個設(shè)備將通過ID譯碼接收這個Type 00h配置請求,并對配置寄存器進(jìn)行讀寫操作。如果PCI總線上沒有設(shè)備接收這個Type 00h配置請求,將引發(fā)Master Abort,詳情見PCI總線規(guī)范,本節(jié)對此不做進(jìn)一步說明。
如果CONFIG_ADDRESS寄存器的Bus Number字段為n(n≠0),即訪問的PCI設(shè)備不是直接掛接在PCI總線0上的,此時HOST主橋?qū)ONFIG_DATA寄存器操作時,將產(chǎn)生Type 01h配置請求,PCI總線0將遍歷所有在這條總線上的PCI橋,確定由哪個PCI橋接收這個Type 01h配置請求。
如果n大于等于某個PCI橋的Secondary Bus Number寄存器,而且小于等于Subordinate Bus number寄存器,那么這個PCI橋?qū)⒔邮赵诋?dāng)前PCI總線上的Type 01配置請求,并采用以下規(guī)則進(jìn)行遞歸處理。
(1)
(2)
(3)
(4)
(5)
下文將舉例說明PCI總線配置請求的轉(zhuǎn)換原則,并以圖2?8為例說明處理器如何訪問PCI設(shè)備01和PCI設(shè)備31的配置空間。PCI設(shè)備01直接與HOST主橋相連,因此HOST主橋可以使用Type 00h配置請求訪問該設(shè)備。
而HOST主橋需要經(jīng)過多級PCI橋才能訪問PCI設(shè)備31,因此HOST主橋需要首先使用Type 01h配置請求,之后通過PCI橋1、2和3將Type 01h配置請求轉(zhuǎn)換為Type 00h配置請求,最終訪問PCI設(shè)備31。
1 PCI設(shè)備01
這種情況較易處理,當(dāng)HOST處理器訪問PCI設(shè)備01的配置空間時,發(fā)現(xiàn)PCI設(shè)備01與HOST主橋直接相連,所以將直接使用Type 00h配置請求訪問該設(shè)備的配置空間,具體步驟如下。首先HOST處理器將CONFIG_ADDRESS寄存器的Enable位置1,Bus Number號置為0,并對該寄存器的Device、Function和Register Number字段賦值。當(dāng)處理器對CONFIG_DATA寄存器訪問時,HOST主橋?qū)⒋娣旁贑ONFIG_ADDRESS寄存器中的數(shù)值,轉(zhuǎn)換為Type 00h配置請求,并發(fā)送到PCI總線0上,PCI設(shè)備01將接收這個Type 00h配置請求,并與處理器進(jìn)行配置信息交換。
關(guān)鍵詞:
PCI總線配
相關(guān)推薦
技術(shù)專區(qū)
- FPGA
- DSP
- MCU
- 示波器
- 步進(jìn)電機(jī)
- Zigbee
- LabVIEW
- Arduino
- RFID
- NFC
- STM32
- Protel
- GPS
- MSP430
- Multisim
- 濾波器
- CAN總線
- 開關(guān)電源
- 單片機(jī)
- PCB
- USB
- ARM
- CPLD
- 連接器
- MEMS
- CMOS
- MIPS
- EMC
- EDA
- ROM
- 陀螺儀
- VHDL
- 比較器
- Verilog
- 穩(wěn)壓電源
- RAM
- AVR
- 傳感器
- 可控硅
- IGBT
- 嵌入式開發(fā)
- 逆變器
- Quartus
- RS-232
- Cyclone
- 電位器
- 電機(jī)控制
- 藍(lán)牙
- PLC
- PWM
- 汽車電子
- 轉(zhuǎn)換器
- 電源管理
- 信號放大器
評論