上一篇講到了PCIe的事務層,下面會對數據鏈路層和物理層做簡要介紹。
數據鏈路層的主要功能為:
TLP傳輸
出錯檢測和裁決
LCRC和Sequence Number的生成
存儲發送端的TLP用於重發
為TLP和DLLP做crc校驗
DLLP的ack/nack響應
鏈路初始化和電源管理
DLLP傳輸
用於鏈路管理功能(TLP確認,電源管理,VC通道初始化)
仍然用下面這張圖來梳理三層結構中的事務包.

數據鏈路層為了保證事務包傳輸的正確性, 采用了Ack/Nak的握手機制,
Ack/Nak是一種由硬件實現的,完全自動的機制,目的是保證TLP有效可靠地傳輸。Ack DLLP用於確認TLP被成功接收,Nak DLLP則用於表明TLP傳輸中遇到了錯誤。
下圖為數據鏈路層的工作過程:

PCIe的物理層 :
物理層分為兩部分,邏輯物理層和電氣物理層。如下圖所示:

電氣層和邏輯層間定義了一個成為PIPE的物理接口
電氣子層: 包括收發器、模擬緩沖器、串行/解串行器(SerDes)在內的模擬器件以及10位接口
編碼子層(PCS)把每8位數據字節編碼/解碼為10位代碼。這種編碼特性不僅能檢查有效字符,而且也限制了被發送的0/1數量上的差異,從而同時在發射器和接收器側保持了DC均衡,進而大大提高了電磁兼容性(EMC)和電氣信號性能。
在物理層內PIPE接口的另一側包含用以指示鏈路訓練和狀態的狀態機(LTSSM)、通道間去除偏移、特殊序列檢測和生成等功能。
電氣層涉及模擬電路的部分,這里簡單了解一點:
從串行引腳層到PIPE接口層統稱為物理層。
從PIPE接口到應用的那些層稱為數字控制器(Controller)。
SerDes設計挑戰
串行到並行的數據轉換,要求先進的模擬設計
不同工藝技術間,模擬設計不具有移植性。所以必須針對芯片制造所采用的工藝技術對物理層實施重新設計
高速-模擬鏈路引入的額外設計復雜性使設計難度進一步加大(如因信號完整性和噪音導致的衰減問題)
物理層必須通過嚴格的電氣和兼容性測試,以確保與其他設備的互操作性。
邏輯物理層:
物理層的發射部分負責:
采用特殊符號插入對數據包進行幀化處理; 如用STP或SDP符號標志數據包的開始,用END符號標記數據包結束。
通道映射使順序傳送數據包在到通道鏈路上同時發送,從而增加吞吐量。接收器物理層以正確順序對數據包進行重組
數據加擾
鏈路控制 – 初始化、寬度和通道反轉協商
多通道傳輸控制
生成跳躍序列以補償鏈路兩端的時鍾PPM差。

物理層的接收部分負責:
負責包含多通道鏈路的通道映射、通道到通道間的去偏移
數據解擾
發現數據包並實施去幀化處理
CDR恢復始終信號
檢測特殊數據包序列,如: TS1, TS2, Skip和電氣閑置。
關於三層結構介紹暫時到這里,那么PCIe在上電后是怎么開始工作的呢?下面會較詳細的敘述PCIe開始工作的過程。
PCIe開始工作主要分為3個步驟:鏈路訓練,枚舉掃描,配置BAR空間。
鏈路初始化:

Link Initialization & Training:


枚舉掃描:

總線枚舉過程:




配置BAR:
配置基地址寄存器,給PCIe分配地址空間。




PCIe還有很多其他內容,比如Ordering, 中斷,RAS,Power管理,虛擬化等,每一個話題都可以單獨開題,PCIe初探部分就到此為止了,后續會對PCIe的Ordering和在ARM架構中的應用做一次專題,敬請期待.
