日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

PCI协议简析

發布時間:2024/3/12 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PCI协议简析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??? PCI協議是一套工業標準,這個就不細說了,這套協議有點類型IP協議,由多種不同功能的設備組成,主要是主機,主設備, bridge(橋) ,從設備等等組成, PCI bridge 類似于IP協議里面的 路由器, 鏈接自己的bus(有一個獨立無一的bus id)到主的總線,它的主要作用是轉發兩個bus間的通信。

???? 1)BUS Operation.

???? 1.1) BUS command

?????????? 0000?????????????????????? Interrupt Acknowledge
?????????? 0001?????????????????????? Special Cycle
?????????? 0010?????????????????????? I/O Read
?????????? 0011?????????????????????? I/O Write
?????????? 0100?????????????????????? Reserved
?????????? 0101????????????????????? Reserd
?????????? 0110????????????????????? Memory Read
?????????? 0111????????????????????? Memory Write
?????????? 1000????????????????????? Reserved
?????????? 1001????????????????????? Reserved
?????????? 1010????????????????????? Configuration Read
?????????? 1011????????????????????? Configuration Write
??????????? 1100???????????????????? Memory Read Multiple
??????????? 1101???????????????????? Dual Address Cycle
??????????? 1110?????????????????? ? Memory Read Line
??????????? 1111????????????????????? Memory Write and Invalidate
?? 1.1.2) Read commands

????????? Memory Read command?? 讀一個DWORD bytes

????????? Memory Read Line command?? 讀一個cache line size bytes

???????? Memory Read Multiple command? 讀一個包含多個cache line 的 block.

?? 1.1.3) Write command

?? 1.1.4) 設備選擇(Device selection)

?? 1.1.5) 設備配置

???????????? PCI 定義為驅動軟件提供了初始化和配置,通過一個單獨的配置空間(memory)(獨立于讀寫空間(memory). 每個設備只解析它自己的地址, 在配置階段, 設備選擇需要在訪問前完成, 通過 PCI的IDSEL pin給設備傳入信號,也就是 “片選”信號,表明該設備被選取。如何實現IDSEL是一個系統規范,不是PCI規范。 通常情況下:設備0的IDSEL,對應"地址寄存器"的16位, 設備1對應17位,依次類推, 設備0~設備16的片選(IDSEL)分別對應地址寄存器的[16..31] 位。 主機通過設置 狀態寄存器里面的Master-Abort位來終止配置。 有兩種配置類型寄存器,都是32bit。

???????????? type 0:??? 31-{reserved} -11??? 10-{ Function? number}-8???????? 7-{ Register number}-2???? 1-{ 0 }-1?? 0-{0}-0??

???????????? type 1: ?? 31-{reserved} -23 ?? 23-{bus number} -16??? 15-{device-number}-11 ?? 10-{ Function? number}-8???????? 7-{ Register number}-2???? 1-{ 0 }-1?? 0-{1}-0


???????????? type 0 只在本地總線內使用,Host,bridges 使用 type 0來配置掛在它們各自總線下的設備。

???????????? type 1 用來配置其它 bus 的設備。 如 主機需要配置某個 bridge,就使用type 0,如果配置某個該bridge后面的某個設備,就需要使用type 1。

? ? ? ? ? ? 響應 type 0的設備 主要分別兩種類型:1)往前兼容的設備(老設備)2) 多功能設備(multi-function device).

? ? ? ? ??

???????????? device number? 占5位,最大可以選擇32個設備,但是由于 IDSEL對應 AD[31..11]只有21位,分別對應設備0~設備20,實際上最大只能支持21個設備。

???????????? function number? 最大的功能號是8, 功能號0是PCI設備必須實現的,其它功能不是必須的。

???????????? 驅動配置代碼,根據device number的次序,逐步檢測(此時 function number 為0),如果檢測到一個多功能設備,則依次檢測function number.


??????????? 系統必須提供給軟件提供接口,產生一個配置流(configure cycles),有兩種機制用來產生這樣的配置流(configure cycles).

? ? ? ? ? ? 配置機制1 : 使用 (CF8h) 作為 CONFIG_ADDRESS,?? (CFCh)? 作為 CONFIG_DATA.

??????????? 配置的過程是這樣的, 兩個I/O寄存器分別是? CONFIG_ADDRESS(CF8h) 和 CONFIG_DATA(CFCh)。 CONFIG_ADDRESS? 選擇 BUS,device,然后再通過? CONFIG_DATA? 寫入數據(CONFIG_ADDRESS 的第31位必須是1)。

??????????

???????????? 配置機制2: 主要是為了向前兼容,不建議使用。映射 4k的PCI配置空間到PC的內存(C000h ~ CFFFh)。

???????????? 配置空間enable需要寫 I/O port CF8h 的CSE位。

??????????? 7-{KEY}-4???????? 3-{FUNCTION NUMBER}-1???? 0-{SCE}-0

??????????? 轉發寄存器?? I/O port? CFAh 用來表明 那一個bus 被訪問,如果 它的值是 0,那么 該bridge的本地總線被訪問, 發起一個type 0的訪問,否則 bridge轉發 數據到其它 pci橋, 發起一個type 1的配置訪問。

?????????

???? 2)? 配置空間

?????????? type 0 配置空間 總共 256個字節: 依次是 Vendor ID, Device ID,? command, status,? revision id,? class code,? cache line size,? latency timer, Header type,? BIST,? Base Address register,? cardbus CIS Point, Sub Vender ID,? subsystem ID, Expansion? ROM Base? Address,? interrupt Line ,? interrput Pin,? Min_Gnt, Max_Lat.


?????????? Vendor ID, device ID,? Sub Vendor ID, subsystem ID 這些都是工業標準確定的,比如:??? (Vendor ID)0x1002 代表? "ATI Technologies" ,??? 0x4752 表示是? "ATI Rage XL PCI" 等等,這些都是 PCI相關的組織分配的。

??????????? class code:? 用來標識 device的通用功能, 3個字節大小, 高字節(offset?? 0B)是 基本的類別代碼,標識一些通用的功能, 中間字節(offset 0A)是子類別,低字節是 編碼級別的接口,標識詳細的功能類別。

???????????? 00h??????????????????????????????? Device was built before Class Code, definitions were finalized.
???????????? 01h???????????????????????????????? Mass storage controller.
???????????? 02h???????????????????????????????? Network controller.
???????????? 03h???????????????????????????????? Display controller.
???????????? 04h???????????????????????????????? Multimedia device.
???????????? 05h???????????????????????????????? Memory controller.
???????????? 06h???????????????????????????????? Bridge device.
???????????? 07h????????????????????????????????? Simple communication controllers.
???????????? 08h?????????????????????????????????? Base system peripherals.
????????????? 09h???????????????????????????????? Input devices.
???????????? 0Ah???????????????????????????????? Docking stations.
??????????? 0Bh????????????????????????????????? Processors.
?????????? 0Ch?????????????????????????????????? Serial bus controllers.
?????????? 0Dh - FEh??????????????????????? Reserved.
????????????? FFh Device does not fit in any defined?? classes.


? ? ? ? cache line size :? PCI設備的讀寫功能, 如:read, read line, read multiple line.? 數據大小就是 line * cache line size.


? ? ? ??? BIST? : build-in Self-Test.


??????? Interrupt? line? 設置那些輸入產生中斷, 主要是被設備驅動程序和操作系統使用。


??????? BASE ADDRESS :??? 這是 最重要的功能之一,? 應用程序可以重新分配各個 設備在內存的地址映射地址。? 當PC啟動的時候,BIOS會檢測所有的PCI設備,然后,把它們映射到相應的內存地址。 以后,直接通過內存地址就可以訪問到pci設備的內存,寄存器空間。?? 映射分為2種模式,分別是映射到內存空間或者I/O空間。 PCI設備可以同時使用兩種映射,可以分別通過 內存空間或者I/O空間來訪問同一PCI設備。? BASE ADDRESS的bit 0, 0-表明是 內存映射, 1-表明是I/O映射。

????? Memory Base Address Register Bits 2/1 Encoding

????? 00 ? ? ? ? ? ? ? ? ? ? ?? Base register is 32 bits wide and mapping can be???? done anywhere in the 32-bit Memory Space.
????? 01 ? ? ? ? ? ? ? ? ? ? ? ? Base register is 32 bits wide but must be mapped below 1M in Memory Space.
???? 10 ? ? ? ? ? ? ? ? ? ? ? ? ? Base register is 64 bits wide and can be mapped? anywhere in the 64-bit address space.
?????? 11?????????????????????? Reserved

????? 應用程序通過 把 BASE ADDRESS全部寫入1,可以得到相應設備所需要的內存大小。
???? 一個典型的設備一般是把“控制功能” 映射到一個內存區域, 也有設備映射到兩個不同內存區域的,比如顯卡, 它把“控制功能”映射到一個區域, 把 frame buffer映射到另一個區域。
????

Expansion? ROM Base? Address?? 有些PCI設備會提供附加的ROM,應用程序可以映射ROM到相應的內存地址。


參考文章

???? "PCI Local Bus Specification"



? ? ? ? ? ? ????????????



總結

以上是生活随笔為你收集整理的PCI协议简析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。