1. 程式人生 > >PCI子系統(一) - 協議

PCI子系統(一) - 協議

協議來自PCI Express Base Specification Revision 3.0


7.1 PCI Express Configuration Mechanisms

在這裡插入圖片描述
PCI Compatible Configuration Space Header,範圍是[0, 0x3F],檢視7.5節
PCI Express Capability Structure,範圍是[0x40, 0xFF],(注:圖中灰色的部分PCI Express Capability Structure只是眾多PCI Capability Structure中的一個),檢視7.7節
PCI Express Extended Capability Structure,範圍是[0x100, 0xFFFF]

PCI Express Capability Structure
PCI Express Capability List位於[0x40, 0xFF]區間
他可以被看作是一個由Capability Item組成的連結串列,連結串列的頭指標儲存在PCI compatible configuration register的0x34位置的Capability Pointer中。每個Capability Item的大小長度範圍是不同的,但是都遵循一個標準化的Capibility Header,如下:
在這裡插入圖片描述


7.5 PCI compatible configuration register

這是type 0型的頭部結構,一般用於PCI裝置,還有個type 1型的頭部結構,用於PCI橋。
在這裡插入圖片描述


7.7 MSI and MSI-X Capability structures

MSI(Message Signaled Interrupts)是一種中斷方式,從PCI2.2開始只是,在PCI3.0中得到擴充套件,支援更多中斷以及擁有獨立配置各個中斷能力的MSI-X。
MSI的原理:PCI有一個特殊的暫存器,往這個暫存器裡面寫資料,就會觸發CPU中斷
這個暫存器就來自PCI提供的MSI/MSI-X Capability結構裡的Message Address
在這裡插入圖片描述

INTx,MSI,MSI-X區別:
INTx:
在PCI匯流排裡面INTx中斷是由四條可選的中斷線決定的,這種中斷方式是共享的,所有的PCI裝置把中斷訊號在一條中斷線上相與,再上報給CPU,CPU收到中斷後再查詢具體是哪個裝置產生了中斷。
MSI:
在PCIe匯流排裡已經沒有實體的INTx物理匯流排了,PCIe使用專門的Message事物包來實現INTx中斷,這是為了相容以前的PCI軟體。MSI中斷是往CPU中斷暫存器中進行memory寫操作來產生中斷。
MSI-X:
MSI支援的中斷資料比較有限,而且如果有一組中斷的話,必須要求中斷號連續,而MSI可以支援很多的中斷,並且一組中斷中中斷號也不需要連續。


參考文章

  1. PCI Express Base Specification Revision 3.0
  2. PCI Express體系結構導讀