PCI裝置配置空間問題

2021-05-24 03:15:29 字數 861 閱讀 1953

pc機中包括三種空間:儲存器空間、i/o空間、配置空間。儲存器空間主要包括記憶體、視訊記憶體、擴充套件rom、裝置緩衝區等,一般用於存放大量資料和進行資料塊交換。i/o空間主要包括裝置的控制暫存器和狀態暫存器,一般用於控制和查詢裝置的工作狀態以及少量資料的交換。配置空間主要用於向系統提供裝置自身的基本資訊,並接受系統對裝置全域性狀態的控制和查詢。

為避免位址衝突,pci匯流排要求各個裝置所占用的位址能夠重定位,重定位是由裝置的配置空間的基址暫存器實現的,通常情況下,各個裝置的基址暫存器總是被bios或作業系統分配為不同的基址,從而將各個裝置分別對映到不同的位址範圍。在需要時,應用程式也可以自行修改基址暫存器中的基址,從而將裝置對映到指定的位址範圍。

後續:pci匯流排2.1版規範指出,全部pci裝置必須實現pci配置空間。2.2版規範說:每個裝置,除了主匯流排橋,必須實現配置位址空間。可見,pci的配置空間,就是在pci板卡上實現的。這樣看來,它指的就是專用介面晶元上的暫存器。

再續:看到一篇關於專用介面晶元pci9054的文章,說,pci9054提供了三個物理匯流排介面:pci匯流排介面,eeprom介面和區域性匯流排介面。pci匯流排介面依據pci擴充套件板上定義的引腳分配情況將對應的訊號連線在一起就行了;eeprom中存放的是pci9054的配置資訊,系統加電時pci9054自動載入其中的配置資訊,並有bios通過pci匯流排對配置暫存器讀寫,來完成各種控制功能。

續:bar中可讀不可寫的位數決定了儲存空間的大小,同樣如果讀回空間大小以後,將基位址寫回去的時候,改變的也只是高位可寫的。舉例來說,如果從10h寫全f讀回fff00001,說明memory空間大小為1m,再往裡寫的時候同樣只能改變高位的3個f,即這個裝置的io基址必然為***00001。其中x就是你往裡寫的。

2011.1.12續:eeprom只是用來儲存需要配置的暫存器資訊的,

PCI的配置空間

pci的配置空間 主要討論如何去訪問pci配置空間和描述pci裝置的配置空間的定義和使用規則。理論上如何訪問pci配置空間的問題是屬於匯流排操作的一部分,但是和配置空間有著密切聯絡,有必要一起討論。下圖是pci架構的級聯圖。不同的bus就是通過bridge來連線的。每個pci bus上都可以掛載多個...

PCI配置空間讀取

1.拼湊出32位位址 bus有8位,dev有5位,fun有3位,最高位bit位為使能。最高位要置1,也就是bit31置1,bit23 16是寫入bus number,bit15 11是device number,bit10 8是寫入function number.如果要訪問pci裝置中bus num...

PCI配置空間簡介

配置空間中最重要的有 vendor id 廠商id。知名的裝置廠商的id。ffffh是乙個非法廠商id,可它來判斷pci裝置是否存在。device id 裝置id。某廠商生產的裝置的id。作業系統就是憑著 vendor id和device id 找到對應驅動程式的。class code 類 共三位元...