先把系統看懂,再深入各領域
這套課程從裝置在系統裡的角色出發。先理解軟體為什麼要查這個欄位,再沿著規格找出答案,逐步走進裝置發現、資源配置、傳輸與系統管理。
目前可閱讀 Chapter 0–37。先從系統觀建立共同基礎,再依需要選擇交易、實體層、虛擬化或管理主題。各章列出本次帶讀的條文與圖表位置。
讀情境,也讀推理過程
課程先從總覽圖看角色與路徑,再跟著正常流程閱讀。每一步都會指出相關的規格圖表、使用的欄位,以及接下來的動作。案例中的配置與讀值標明為作者假設,適用條件則在使用前交代。
- 跟著圖解走一遍:完整圖與文字持續顯示,可選擇步驟標出當下的元件與解說。
- 接上本章需要的背景:前情提要只回顧接下來會使用的關係,延伸背景可就近展開。
- 沿流程閱讀規格:先看簡短的閱讀路線,再逐步對照 Figure、Table 與相關條文。
課程安排
章號提供一條漸進的閱讀路徑;已有相關基礎時,也可以依各章的先備知識選擇切入點。
從系統全貌到第一次規格查詢
一個 PCIe 裝置如何被系統認識並使用?又該如何查出它支援什麼?
- PCIe 的用途與 CPU、記憶體、裝置之間的關係
- Root Complex、Root Port、Switch、Endpoint 的角色辨識
- 建立連線、發現裝置、配置資源與開始使用的整體流程
- Configuration Space、MMIO 與 DMA 的用途區分
- 支援能力、控制設定與目前狀態的差別
- 依序查找 Capability、Figure、Table 與欄位的完整速率判讀案例
- 用反例說明低於最高支援速率不等於已證明故障
先備知識:基本程式與 CPU/記憶體概念;不需要 PCIe 經驗
拓撲、交易角色與逐 Link 判讀
如何從同一張系統圖辨認 Function、Port 與 Link,再把交易角色與欄位讀值放回正確的位置?
- Component、Device、Function、Port、Link 與 Lane 的關係
- 沿 Memory Read 與 Completion 追蹤固定方向與當次傳輸角色
- 為 Switch 各條外部 Link 配對相鄰 Port
- 從 Device/Port Type 核對 Function 類型與欄位適用性
- 分別比較 Port 能力、Link 共同能力與目前結果
- 以 BDF、Bridge Bus 範圍與 Requester ID 補上軟體識別
先備知識:Chapter 0
讀取設定空間與尋找 Capability
我要確認某項功能是否存在,應從哪裡開始找,又如何避免讀錯欄位?
- 設定空間存取與 Configuration Header
- Type 0 與 Type 1 Header 的用途
- 傳統 Capability 與 Extended Capability 的清單走訪
- Capability ID、Next Pointer、相對位移與絕對位址
- 欄位大小、位元編碼、Reserved 與存取屬性
- Capability 版本與適用的 Function/Port 類型
- 建立可重複使用的 Figure、Table、條文查詢方法
先備知識:Chapter 0、Chapter 1
從未知拓樸到完成裝置發現
開機時還不知道有哪些裝置,系統如何逐步找到它們?
- Enumeration 的前提與觀察對象
- Root Bridge、Bridge 與下游匯流排的搜尋
- Bus Number 配置與橋接器的轉送範圍
- 多功能裝置的發現方式
- 裝置身分、Class Code 與軟體接手的線索
- 無回應、尚未就緒與不存在裝置的證據區分
- 韌體建立初始配置與 OS 後續處理的關係
先備知識:Chapter 1、Chapter 2
BAR、位址空間與資源配置
找到裝置後,CPU 要把資料寫到哪裡,裝置才會收到?
- BAR 表示的資源需求與位址配置
- Memory BAR、I/O BAR、32-bit 與 64-bit BAR
- 大小、對齊與 Prefetchable 屬性
- Bridge Window 與上游位址空間的涵蓋關係
- Memory Space Enable、I/O Space Enable 與 Bus Master Enable 的不同作用
- 資源分配、解碼啟用與開始使用的先後條件
- MMIO 位址、主記憶體位址與裝置內部位置的區別
先備知識:Chapter 2、Chapter 3
一次讀寫如何變成 PCIe 交易
CPU 讀取裝置暫存器後,要求和回覆如何穿過 PCIe 拓樸?
- Transaction Layer Packet 的用途
- Memory、Configuration、I/O 與 Message 交易
- 依位址、ID 或隱含規則進行路由
- Posted、Non-Posted 與 Completion
- Requester、Completer、Tag 與要求配對
- 資料長度、Byte Enable 與封包邊界
- 完成狀態與沒有一般 Completion 的交易
先備知識:Chapter 1、Chapter 2、Chapter 4
DMA、可見性與交易順序
裝置已經發出寫入,CPU 就一定看得到正確資料嗎?
- DMA 的要求者、目標與位址觀點
- IOMMU 的必要背景與位址轉換邊界
- PCIe 交易排序與作業系統記憶體模型的責任區分
- Relaxed Ordering、No Snoop 與相關適用條件
- 資料、描述項與通知的可見性關係
- 軟體同步、快取一致性與 PCIe 規則不能互相代替
- 以兩筆交易推演允許與不允許的觀察結果
先備知識:Chapter 4、Chapter 5
中斷如何把事件交給軟體
裝置有事情要處理時,如何通知 CPU?通知內容又在哪裡設定?
- 事件、資料與通知之間的關係
- INTx 的相容用途
- MSI 與 MSI-X 的能力查詢與設定
- MSI-X Table、PBA 與 BAR 的關係
- 向量、遮罩、Pending 與觸發條件
- 中斷寫入與先前資料交易的順序
- 以假設值追蹤一個向量的設定及通知結果
先備知識:Chapter 2、Chapter 4、Chapter 5、Chapter 6
Link 建立與可靠傳遞
兩端都支援 PCIe,為什麼還需要訓練連線、流量控制與重送?
- Lane、Link、速度與寬度的關係
- LTSSM 的主要狀態與訓練目的
- 支援速率、目標設定與協商結果
- Data Link 與 Transaction Layer 的責任邊界
- 流量控制、緩衝空間與傳送許可
- 傳輸錯誤的偵測與恢復
- PCIe 6.0 中 Flit Mode 與 Non-Flit Mode 的適用範圍
先備知識:Chapter 0、Chapter 2、Chapter 5
Reset 的範圍與恢復條件
重設一個 Function、重設一條 Link 與重新上電,會改變同樣的狀態嗎?
- 各種 Reset 的觸發方式與影響範圍
- Fundamental Reset、Hot Reset 與 Function Level Reset
- Reset 與 Link 狀態變化的關係
- 進行中的交易與重新存取的時機
- 欄位重設值、保存狀態與重新配置
- 裝置停止 DMA 與恢復軟體使用的條件
- 以狀態表比較同一欄位在不同事件後的結果
先備知識:Chapter 2、Chapter 4、Chapter 5、Chapter 8
裝置與連線如何省電
裝置暫時沒有工作時,哪些部分可以休息?需要工作時又如何回來?
- Function 電源狀態與 Link 電源狀態的區別
- PCI Power Management Capability
- ASPM 與軟體主導的電源管理
- L1 Substates 的能力、控制與依賴條件
- PME 與喚醒路徑
- 進入、退出與重新可用的延遲
- 平台電源資源與 PCIe 電源機制的分工
先備知識:Chapter 2、Chapter 8、Chapter 9
熱插拔與拓樸變動
系統運作中新增或移除裝置,如何維持資源與軟體狀態的一致性?
- Hot-Plug 能力與 Slot 的關係
- Presence、事件狀態、控制與通知
- 插入、供電、建立連線與開始枚舉
- 正常移除與 Surprise Removal 的條件差異
- 預留資源與重新配置的問題
- 軟體停止使用與實體裝置離開的先後關係
- DPC 對錯誤隔離的用途,連回錯誤處理章深入
先備知識:Chapter 3、Chapter 4、Chapter 7、Chapter 8、Chapter 9、Chapter 10
錯誤證據、回報與隔離
收到 PCIe 錯誤時,應如何從紀錄判斷發生了什麼,以及哪些結論仍缺乏證據?
- Correctable 與 Uncorrectable 錯誤
- 狀態、Mask、Severity 與回報控制
- AER 的查詢入口及紀錄解讀
- Root Port 回報與錯誤來源追蹤
- DPC 的隔離與恢復條件
- Header Log 與必要的交易背景
- 保留證據、判斷範圍與清除狀態的順序
- 以跨元件紀錄練習避免過度推論
先備知識:Chapter 2、Chapter 5、Chapter 7、Chapter 8、Chapter 9
韌體、ACPI 與 OS 的控制權
同一個 PCIe 功能,究竟由韌體還是 OS 管理?軟體如何得知平台的限制?
- UEFI 階段的 PCI Bus 與 PCI I/O 介面
- ACPI 描述的 Root Bridge、設定空間與資源
- MCFG、_CRS 與相關描述的用途
- _OSC 等控制權協調與能力確認
- 原生 Hot-Plug、AER 與電源管理的管理者
- 系統啟動交接與執行期間的責任邊界
- 區分 PCI Firmware、UEFI、ACPI 各自規定的內容
先備知識:Chapter 3、Chapter 4、Chapter 7、Chapter 10、Chapter 11、Chapter 12
從 TLP 標頭到 Flit 封包布局
收到一段封包資料,要從哪個欄位開始讀?
- Non-Flit 與 Flit 的封包類別、長度與位置
- Memory、I/O、Configuration、Message 與 Completion 的格式
- Prefix、OHC、識別、路由與有效條件
- 保留位元及資料負載的判讀路線
先備知識:Chapter 2、Chapter 5、Chapter 8
接收要求、完成回覆與進階交易
要求到了接收端,什麼時候才算完成?
- Completer 檢查、回覆、Byte Count 與分段條件
- Completion Timeout 與進行中要求的生命週期
- Locked Transactions 與 AtomicOps 的目標、路由及保證
- Deferrable Memory Write 的能力、請求與回覆
先備知識:Chapter 5、Chapter 6、Chapter 9、Chapter 14
Traffic Class、Virtual Channel 與仲裁
不同流量共用一條 Link,如何避免一起被堵住?
- TC 到 VC 的對應與獨立資源
- Port 與多功能裝置的 VC 能力、資源及仲裁
- VC 配置、啟用與協調條件
- Appendix A 的等時性需求與端到端預算
先備知識:Chapter 5、Chapter 8、Chapter 14
資料連結初始化、流量控制與重送細節
credit、Ack 和 Completion 各自在哪一步發生?
- Data Link 管理狀態、Feature Exchange 與 FC 初始化
- Scaled Flow Control、不同封包類別與額度更新
- Non-Flit 與 Flit 的確認、序號、錯誤及重送差異
- ECRC、LCRC、Poison 的責任邊界
- Appendix H 的更新與 ACK 延遲計算
先備知識:Chapter 8、Chapter 14、Chapter 16
編碼、Flit、CRC 與 FEC 如何合作
Flit、編碼與錯誤更正,怎麼放在同一張圖裡?
- 8b/10b、128b/130b 與 1b/1b 的適用範圍
- 封包框定、Ordered Sets、Scrambling 與 Flit 布局
- CRC 與 Forward Error Correction 的各自用途
- Appendices B、J、K 的編碼與矩陣閱讀方法
先備知識:Chapter 8、Chapter 14、Chapter 17
LTSSM、Equalization 與 Retimer
Link 還沒到正常傳送狀態,應該追哪個階段?
- 完整訓練狀態、狀態進入與離開條件
- 速率、Lane 寬度、Lane 編號與降級
- 不同速率的 Equalization 與訓練交換
- Retimer 的分段、轉送、設定與重設關係
先備知識:Chapter 8、Chapter 9、Chapter 18
發射端電氣條件與量測觀點
要判讀發送端電氣規格,為什麼不能先抄一個電壓上限?
- 電氣規格的量測位置、方向與單位
- 不同速率的發射電壓、抖動與等化參數
- PAM4 發射條件與線性相關量
- 以規格表串起量測條件與允收範圍
先備知識:Chapter 18、Chapter 19
接收端、通道與參考時脈
發送端符合規格,為什麼接收端還要另做測試?
- 接收測試的校準流程、模型眼圖與 BER 結果
- TP2/TP2P、通道損耗與壓力參考點
- Refclk 架構、Sj 條件與濾波模型
- 平台通道與外形規格的分工邊界
先備知識:Chapter 18、Chapter 19、Chapter 20
連線診斷、Lane Margining 與 Flit 紀錄
要檢查某條 Lane,設定空間應該怎麼查?
- 從 Port、Function 與預設 Lane 找到 Margining 入口
- 能力查詢、No Command 交握與 Step Margin 回覆
- 獨立取樣器、取樣量、錯誤上限與測後復原
- Flit Logging、Device 3 與錯誤注入的不同用途
先備知識:Chapter 12、Chapter 17、Chapter 19、Chapter 21
功率預算、動態分配與緊急降功耗
裝置已進 D0,功率限制還有哪些層次?
- 按回報範圍、工作條件與電源軌整理 Power Budgeting 資料
- 區分功耗需求、Slot 授權與初始化時的 Power Limit
- 串起 DPA 配置陣列、目標延遲、Control 與 Status
- Enabled 的 RW1C、緊急降功耗恢復與 PF/VF 分工
先備知識:Chapter 10、Chapter 16
TPH、LTR 與 OBFF 的平台協調
資料用途、可等待的延遲與平台活動時窗,分別要查哪條規格路線?
- TPH 模式、Steering Tag 表格與實際選取案例
- LTR 設定上限與訊息欄位的差異
- Switch 彙整、延遲更新與舊需求失效
- OBFF 訊號選擇、Variation 與接收條件
先備知識:Chapter 1、Chapter 10、Chapter 16
PTM 與時間同步的角色、交換與精度
如何把兩回合 PTM 交換,換成可解讀事件的共同時間?
- PTM 時間階層、控制 Function 與啟用案例
- 兩回合時序、ResponseD 欄位與歷史資料配對
- Equation 6-2 時間換算、Byte Order 與錯配案例
- ePTM Replay 失效、粒度與擷取精度邊界
先備知識:Chapter 1、Chapter 14、Chapter 18
多功能、ARI、SR-IOV 與 Shadow Functions
同一組 VF 的 ARI 身分、BAR 範圍與可用時機,如何一起確認?
- 多 Function 共用 Port 與 ARI 的實際轉送位置
- SR-IOV 數量、頁面、RID 與 64-bit VF BAR 完整案例
- VF Enable、RRS、Configuration 成功與 VF MSE 的時序
- VF 特有 Configuration、Reset 及 Shadow Functions 邊界
先備知識:Chapter 1、Chapter 2、Chapter 4、Chapter 7、Chapter 9
ATS、PRI 與 PASID 的位址轉譯流程
轉譯、失效與頁面群組的回覆,如何接回真正的資料存取?
- PASID/ATS/Page Request 三份結構的配置與作用範圍
- 4KiB Translation Request、權限與 Memory Read 完整案例
- ITag Vector、CC 與跨TC失效完成條件
- 兩頁PRG的Last、PASID、額度與重新查ATS流程
先備知識:Chapter 6、Chapter 14、Chapter 26
ACS、Peer-to-Peer 與 Multicast
同一顆 Switch 內,直送、導引與多播如何由欄位決定?
- 入口ACS、Port Number vector與Table 6-11的完整判讀
- Request/Completion路徑、排序前提與ACS Violation
- 四個多播視窗、群組阻擋與兩個出口的完整案例
- MC_Overlay地址改寫與ECRC處理
先備知識:Chapter 1、Chapter 5、Chapter 14、Chapter 26、Chapter 27
Enhanced Allocation、Resizable BAR 與拓樸轉譯
如何從 BAR 支援大小,走到完整資源配置?
- Enhanced Allocation 的資源描述與有效欄位
- Resizable BAR 的支援大小、選擇與重新配置
- Hierarchy ID 與 FPB 的識別及範圍轉譯
- 沿能力、設定與路由核對同一個 Function
先備知識:Chapter 2、Chapter 3、Chapter 4、Chapter 26
Root Complex 連結宣告、身分與裝置資料
裝置身分、產品資料與內部拓樸,要用同一份資訊嗎?
- Root Complex 拓樸宣告、內部連結與 RCRB
- Root Complex Event Collector 的關聯資訊
- DSN、Subsystem ID、VPD 的查詢與用途
- Vendor-Specific、VSEC、DVSEC 與 Null 結構的閱讀邊界
先備知識:Chapter 1、Chapter 2、Chapter 3、Chapter 12、Chapter 29
DOE 與元件量測、認證
如何透過 DOE 找到並交換元件支援的協定?
- DOE 的協定探索、信箱、控制與狀態
- 物件交換的先後、長度、等待與錯誤處理
- CMA/SPDM 的角色、測量與信任邊界
- Base 規則與外部安全協定的來源分工
先備知識:Chapter 2、Chapter 5、Chapter 28、Chapter 30
IDE 的保護範圍、Stream 與金鑰生命週期
如何確認 IDE Stream 的保護範圍和目前狀態?
- Link IDE 與 Selective IDE 的保護範圍
- Stream 的身分、位址關聯、配置與狀態
- 金鑰、IV、完整性與資料保密的角色
- 啟用、狀態改變、失敗與恢復條件
- Appendix L 的封包範例閱讀
先備知識:Chapter 14、Chapter 17、Chapter 28、Chapter 31
Protocol Multiplexing 與替代協定
共用 Link 時,如何配置 PMUX Channel 並辨識協定?
- Appendix G 的協定多工角色與交換
- Alternate Protocol 能力、選擇與適用條件
- 流量分類、轉送與原生 PCIe 的分工
- 重設、模式改變及互通性邊界
先備知識:Chapter 14、Chapter 18、Chapter 19
Readiness、進階熱插拔與平台管理
Link 已啟動,軟體還要等多久才能讀設定空間?
- Readiness Notifications、FRS Queueing 與時間回報
- Async Hot-Plug 與 Appendix I 參考模型
- NPEM 的能力、控制、狀態與外殼管理
- Conventional PCI AF 與 SFI 的平台約定
- 不同管理者、就緒狀態及事件的串接
先備知識:Chapter 9、Chapter 11、Chapter 12、Chapter 13、Chapter 23、Chapter 26
Expansion ROM 與開機路徑
開機韌體如何從 ROM 位址走到正確的映像?
- Expansion ROM BAR 與裝置初始化前提
- Firmware 3.3 的 ROM 結構、映像與選擇
- 開機前存取、驅動與 OS 接手的界線
- 相容規則與平台政策分開標示
先備知識:Chapter 2、Chapter 4、Chapter 13、Chapter 30
交易依賴、ID-Based Ordering 與 Message
先送資料、再送通知,讀者要確認哪些排序條件?
- Device Synchronization 與交易依賴
- Appendix D 的相依關係與等待條件
- Appendix E 的 ID-Based Ordering 使用情境
- Appendix F 的 Message Code 分配與選擇
- 以跨元件案例核對允許及禁止的先後
先備知識:Chapter 5、Chapter 6、Chapter 14、Chapter 15、Chapter 16、Chapter 17
效能推估與跨章觀察
速率與寬度都很高,為什麼應用仍跑不滿?
- GT/s、編碼、Flit、協定開銷與有效資料
- MPS、MRRS、分段、Tag 數與往返延遲
- Virtual Channel、仲裁、共享路徑與瓶頸
- Flit Performance Measurement 的能力與讀值
- 以假設工作負載串起欄位、限制及觀察結果
先備知識:Chapter 14、Chapter 16、Chapter 17、Chapter 18、Chapter 19、Chapter 22、Chapter 24、Chapter 26、Chapter 29、Chapter 36
版本與來源怎麼讀?
目前已完成章節的欄位與圖表以 PCI Express Base Specification Revision 6.0 為準,韌體背景另參考 PCI Firmware Specification Revision 3.3。Firmware 3.3 列出的 Base 參考版本為 5.0,因此教材逐項保留來源版本,不把兩份文件當成同版配套。
章內引用會列出章節、適用的 Figure/Table 與頁碼。補充資料標明來源及版本;作者設計的配置、讀值與推演也會另行標示。後續進階章節若需要其他規格,會在完成查證後再納入教材。