作者:小田BSP
一、PCI總線
在PC時代,為了解決CPU主頻和外部設備訪問速度的問題,發展了幾代I/O總線:
1、第一代總線:ISA、EISA等
2、第二代總線:PCI、PCI-X等
3、第三代總線:PCIE、mPCIE、m.2等
PCI(Peripheral Component Interconnect),外部設備互聯,Intel公司提出,主要功能是連接外部設備。PCI引腳如下:
PCI引腳
PCI總線特點如下:
1、PCI總線是并行總線,有32/64根地址線,地址和數據都是通過這32/64根地址線進行傳輸,分時復用
2、PCI總線上可同時掛載多個設備,設備分為主設備和從設備。主設備一般是主控芯片PCI控制器,需要負責PCI總線上的仲裁
3、PCI設備共享總線,通過片選引腳、地址范圍、總線號、設備號、功能號等機制來確定當前和哪個設備通信。
4、PCI總線通信大致分為:配置階段和地址訪問階段。
5、配置階段:PCI總線控制器依次掃描連接在PCI總線上的所有設備,訪問設備的配置空間,知道設備的類型、要申請的資源,然后給設備分配總線號、設備號、功能號、地址空間,并寫進設備的配置空間。
6、地址訪問階段:在配置階段,給每個PCI設備分配PCI地址范圍,并寫進設備寄存器,以后設備會監聽地址線,當監聽到地址線上傳輸的地址是自己的地址范圍,就會處理。
8、PCI有三個相互獨立的物理地址空間:內存地址空間、I/O地址空間和配置空間。配置空間是PCI特有的一個物理空間,PCI設備支持即插即用。
9、PCI總線規范定義的配置空間總長度為256字節,前64字節的配置空間稱為配置頭,對于所有的設備都一樣。配置頭的主要功能是用來識別設備、定義主機訪問PCI卡的訪問方式(I/O訪問或者存儲器訪問,還有中斷信息),其余192字節稱為本地配置空間(設備有關區),主要定義卡上局部總線的特性、本地空間基地址和范圍等。
其中:
1)Vendor ID:廠商ID,FFFFh是一個非法廠商ID,根據它判斷PCI設備是否存在。
2)Device ID:設備ID,某廠商生產設備的ID,驅動根據Vendor ID和Device ID找對應驅動程序。
3)Base Address0 ~ 5:簡稱BAR寄存器,保存PCI設備使用的PCI總線域的基地址。PCI設備復位后,BAR寄存器存放的是設備需要使用的地址空間大小、類型(I/O或MEM),如果是MEM則是否可預取(Prefectchable是否為1)
4)IRQ Line:IRQ 編號,支持管理24個中斷。
5)IRQ Pin:中斷引腳,PCI有4個中斷引腳,該寄存器表示該設備連接的是哪個引腳。
PCI枚舉過程:嘗試所有的BUS/DEV/FUNC組合,判斷廠商ID是否為FFFFh。
訪問配置空間方法:
通過訪問0xCF8h/0xCFCh端口實現。
1)0xCF8h:CONFIG_ADDRESS,PCI配置空間地址端口。CONFIG_ADDRESS寄存器格式:
31: Enable位
23~16:總線號
15~11:設備號
10~8:功能號
7~2:配置空間寄存器編號
1~0:0
2)0xCFCh:CONFIG_DATA,PCI配置空間數據端口。
二、PCIE介紹
PCIE(PCI Express)是在PCI的基礎上發展而來,是目前PC和嵌入式系統中最常用的高速總線,PCIE與PCI是軟件向后兼容,PCI的系統軟件可以用在PCIe系統中。
PCIE采用的是樹形拓撲結構,體系架構包括:root complex,switch、bridge和endpoint等類型的PCIE設備組成。PCIE總線拓撲結構如下:
Root Complex:根復合體,簡稱RC,CPU和PCIE之間的接口。RC位于PCIE倒立拓撲的根,并代表CPU與系統的其余部分進行通信。PCIE端口在配置空間中被標記為根端口。
Bridge:橋提供了與其他總線(如:PCI或PCI-X)的接口,允許舊的PCI或PCI-X卡插入新系統。反向橋接允許一個新的PCIE卡插入一個舊的PCI系統。
Switch:提供擴展或聚合能力,允許更多的設備連接到一個PCIE端口。充當包路由器,根據地址或其他路由信息識別給定包需要走哪條路徑。是一種PCIE轉PCIE的橋。
Endpoint:PCIE總線系統拓撲結構中的最末端,一般作為總線操作的發起者(initiator)或終結者(Completes)。Endpoint只能接受來自上級拓撲的數據包或向上級拓撲發送數據包。
PCIe插槽集中在PCIex1/x4/x8/x16四種上。
1)PCIex1插槽的長度是最短的,數據針腳14個。主要用途:獨立網卡、獨立聲卡和USB3.0/3.1擴展卡。
2)PCIex4和x8插槽一樣,現在多數做成PCIex16插槽,或擴展為M.2接口,用于安裝M.2 SSD、M.2無線網卡。
3)PCIex8,為了兼容性PCIex8插槽通常做成PCIex16插槽的形式,但數據針腳只有一半是有效的。
4)PCIex16插槽主要用于顯卡以及RAID陣列卡,向下兼容x1/x4/x8級別的設備。
在PCI總線中,所有需要提交中斷請求的設備,必須能通過INTx引腳提交中斷請求,MSI機制是一個可選機制。而PCIE總線中,PCIE設備必須支持MSI或MSI-X中斷請求機制,而可以不支持INTx中斷消息。
在PCIE總線中,MSI和MSI-X中斷機制使用存儲器寫請求TLP向處理器提交中斷請求。
三、PCIE地址空間
PCIE有三種主要的地址空間:memory-space,IO space和configuration space。
1)Memory space:數據存儲內存空間(refetchable 和 Non-Prefetchable Memory Space)
2)IO Space:用于訪問IO設備的內部寄存器/存儲,已被MMIO機制代替,訪問方式和Memory相同,且也分(refetchable 和 Non- Prefetchable Memory range)
3)Configuration Space:配置空間,通過bar寄存器控制Memory space映射
四、PCI和PCIE差異
1) 顏色
PCI接口通常是白色,PCIE接口一般用其他顏色。
2) 長度
PCIE接口要比PCI接口長。
3) 兼容性
PCIE在軟件層面上兼容目前的PCI技術和設備。
4) 速度
PCI的工作頻率:33MHZ和66MHZ,最大吞吐率264MB/s(66MHZ*32BIT/8)。
PCI-X的工作頻率:66MHZ/100MHZ和133MHZ,最大吞吐率1064MB/s(133MHZ*64BIT/8)。
5) 傳輸方式
PCI是并行數據傳輸,一次傳輸4/8字節,半雙工。
PCIE是串行數據傳輸,全雙工。
6) 硬件
PCI信號是普通電平。
PCIE信號是差分電平。
7) 鏈路
PCI是總線的連接方式。
PCIE是點對點的連接方式。
8) 編碼方式
PCIE gen1和gen2采用8bit/10bit編碼方式,gen3以后采用128b/130b的編碼方式。
9) Inbound和outbound
PCIE設備和系統內存相互訪問時,outbound是指CPU到設備方向;inbound是指device到RC(CPU端)方向。CPU讀寫RC端的寄存器時,屬于偏上系統的范圍,不屬于inbound或outbound。
10)PCI配置空間
PCI設備擁有256B的配置空間,PCIE還提供了另外4KB的擴展。256B的配置空間中前64B是規范的,其他是各廠商自己定義的。
PCI設備地址:
10.1)總線號:廠家ID
10.2)設備號:設備ID
10.3)功能號:設備類
11) PCIE配置空間
PCIE一共支持256條bus,32個dev和8個fun,和PCI相同。
PCIE設備發展向前兼容PCI,每個設備的配置空間前256B是PCI空間,后(4K-256)B的空間是PCIE控制空間。
Linux用同一套驅動代碼處理PCI和PCIE驅動,只需要在配置、傳輸等底層操作去區分兩種總線協議。
五、PCIE驅動
以RK3568 PCIE RC驅動為例。
1)compatible = "rockchip,rk3568-pcie", "snps,dw-pcie"
PCIE接口使用的是RC模式;EP模式
2)bus-range = <0x10 0x1f>
PCI bus地址范圍從0x10到0x1f。
3)interrupts
中斷號和中斷名稱。對應RK3568 中斷號如下(-32):
4)interrupt-map-mask 和 interrupt-map
interrupt-map-mask 和 interrupt-map:標準PCI屬性值,對應INTA ~ INTD(legacy 中斷)
5)num-lanes = <1>
PCIE設備所使用的lane數量,默認不需要調整,軟件自動探測并關閉不需要的lane以節省功耗。
6)max-link-speed = <3>
PCIE帶寬版本,1表示Gen1;2表示Gen2;3表示Gen3,無需配置。
7)reset-gpios = <&gpio2 RK_PD6 GPIO_ACTIVE_HIGH>
PCIE接口的perst#復位信號,插槽和焊貼設備,都需要。必須配置。
8)msi-map = <0x1000 &its 0x1000 0x1000>
PCIE設備映射到MSI控制器,格式和介紹如下:
9)phys = <&pcie30phy>
使用的PCIE PHY。
10)power-domains = <&power RK3568_PD_PIPE>
PCIE電源域
11)reg 和 reg-names
PCIE-dbi(映射總線上設備的配置空間地址)和PCIE-apb(PCIE控制器地址)寄存器地址和范圍
12)rangs
功能:設備將CPU域地址映射到PCIE域地址
格式:
<映射類型(第1個字段) PCIe基地址(第2~3字段)CPU域基地址(第4~5字段)映射區域大小(第6~7字段)>
0x81000000:表示IO空間
0x82000000:表示MEM空間 (non-prefetchable)
13)vpcie3v3-supply = <&pcie30_3v3>
PCIE外設的3V3供電。PCIE phy使用1.8V或0.9V供電。
Linux系統查看PCI設備的命令:lspci,PCI邏輯地址:XXZ分別表示總線號:設備號:功能號。一個PCI域能容納256個總線,每個總線可支持32個PCI設備,每個PCI設備可容納8個PCI功能。
lspci -t:顯示樹狀結構
lspci -x:顯示配置空間前64字節的內容
lspci -s:指定PCI設備
審核編輯:黃飛
?
評論
查看更多