PCIe總線有三種錯誤報告方式,分別是:
1. Completions:通過Completion中的狀態位向Request返回錯誤信息
2. Poisoned Packet(又稱為錯誤傳遞,Error Forwarding):告知接收端當前TLP的Data Payload已經被破壞
3. Error Message(錯誤消息):向主機報告錯誤信息
前兩種之前的文章都已經提及,錯誤消息的格式和對應的消息編碼如下所示:
為了兼容PCI總線的錯誤報告機制(使用PERR#和SERR#),PCIe設備會自動將CA、UR和Poisoned TLP轉換為對應的錯誤信息。具體這里就不詳細介紹了,有興趣的可以自行閱讀PCIe Spec的相關章節。
PCIe設備的配置空間中的狀態與控制寄存器如上圖所示,通過這些寄存器可以使能(或禁止)通過錯誤消息(Error Message)發送錯誤報告、查詢錯誤狀態信息,以及鏈路訓練和初始化狀態等。
前面的文章介紹過,默認的錯誤分類如下表所示:
這些錯誤類型可以通過設備控制寄存器(Device Control Register)中的相關位,進行使能或者禁止:
也可以通過設備狀態寄存器(Device Status Registers)相關位查詢錯誤狀態:
當然,當Root接收到錯誤消息后,怎么處理還要取決于Root Control Register的設置:
鏈路錯誤(Link Errors)一般發生在物理層與數據鏈路層通信的過程中。對于Downstream的設備,如果鏈路上發生了Fatal錯誤,此時,該設備并不能夠向Root報告錯誤。這種情況下,需要Upstream設備向Root來報告錯誤。為了消除鏈路錯誤,一般需要對鏈路進行重新訓練(Retrain)。如下圖所示,在鏈路控制寄存器中,可以通過往Retrain Link這一位寫1,來強制進行鏈路重訓練。
當發起重訓練請求后,軟件可以檢查鏈路狀態寄存器(Link Status Register)中的Link Training位,來確認鏈路訓練是否已經完成,如下圖所示。當該位為1時,表明鏈路訓練尚未完成(或者還沒有開始),如果鏈路訓練已經完成,硬件會自動將該位清零。
PCIe總線的錯誤登記與報告的流程圖如下圖所示:
-
寄存器
+關注
關注
31文章
5355瀏覽量
120541 -
總線
+關注
關注
10文章
2888瀏覽量
88145 -
PCIe
+關注
關注
15文章
1241瀏覽量
82732
原文標題:【博文連載】PCIe掃盲——PCIe錯誤報告機制
文章出處:【微信號:ChinaAET,微信公眾號:電子技術應用ChinaAET】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論