pci匯流排操作 之 pci配置週期
pci匯流排協議中定義了256位元組的配置空間,用來驅動和配置pci裝置。配置空間的暫存器在匯流排第六章有描述,這裡主要討論訪問pci配置空間的匯流排命令的具體操作。
在pci匯流排的拓撲結構中,每個pci裝置都有乙個固定唯一的位址,我們稱之為config address。在物理上,對pci裝置的配置都需要通過此config address 解碼找到對應的裝置。也即是,裝置的idsel 腳要被選中,當然此時ad[1:0]的值為「00」。找到pci裝置之後,訪問內部的配置空間暫存器(64-dword),是通過ad[7:2]和byte enable線來解碼實現。如果pci針對某個config address去解碼,沒有任何裝置反饋的話,那麼此次訪問以master-abort來終結。
這裡要說明乙個問題,idsel的連線和deviceno。
如果idsel連線到匯流排上的ad17,則pci deviceno為1=17-16;以此類推。那麼對於deviceno為17-31怎麼處理呢? 一般情況不會有裝置存在。主橋會處理這類位址週期,但是不會去影響ad[31:16]線,並且以master-abort方式來結束這次傳輸。
下面是pci配置週期的read 時序圖
idsel只是在配置週期的定址階段其效果。如上圖中,為了保證idsel能穩定的被取樣,需要在frame#動作之前,讓位址匯流排多驅動一段時間,當做delay。
配置型別
為了適應pci匯流排中的多層次結構,定義了兩種匯流排配置型別,如下圖所示,主要區別在與配置週期中位址階段ad匯流排上的不同。
type0和type1的配置週期中明顯的不同在於ad[1:0]線。type0(當ad[1:0]=「00」)用來訪問當前匯流排上掛載的pci裝置。而type1(當ad[1:0]=「01」)用來訪問非當前匯流排的pci裝置,需要通過pci-pci bridge來解析到另外的bus上。bridge解析到ad線,得到其下一層bus上某個device的deviceno,則會產生type0的配置週期給下一層bus,同時拉動idsel線去訪問對應裝置。
如果目標裝置不是在下一層bus,則bridge會產生乙個type1的週期,普通裝置不會響應type1,只有pci-pci bridge才會理會type1週期。通過busno一層一層的通過bridge傳導到對應的bus上。如果某個bridge發現該配置週期中的busno為自己的secondary busno,則它會將此配置週期進行剝離,解碼。只保留ad[10:2]不變,ad[1:0]變成「00」,其他ad清零,同時拉動idsel線,訪問響應的裝置。
PCI匯流排介紹(四)
8.pci裝置的配置空間 所有除主橋之外的裝置功能,必須實現配置位址空間,目前有三種型別的首部格式 首部型別0,用於全部除pci橋之外的裝置 首部型別1,用於pci pci橋 首部型別2,用於card bus橋。每個pci裝置的配置空間大小為256位元組,用來存放pci配置檔案,其中檔案頭標識區佔6...
PCI匯流排學習(二) PCI匯流排仲裁
幻燈片 9 在一定時間內,可能有多個bus master請求使用匯流排傳輸資料,每個請求匯流排的master都會assert它的req 訊號,來告訴仲裁器他要申請使用匯流排,仲裁器一般整合於晶元組中。幻燈片 10 如果仲裁器是可程式設計的,啟動配置軟體可以通過讀取max lat配置暫存器來決定每個b...
PCI匯流排(二)
pci網絡卡驅動程式分析 針對 gnic ii 的千兆乙太網卡,源程式檔案 drivers net hamachi.c 1 初始化 static int init hamachi init void 進入bus add driver int bus add driver struct device ...