PCIe總線錯誤檢測囊括了鏈路(Link)上的錯誤以及包傳遞過程中的錯誤,如下圖所示。用戶設計的應用程序層中的錯誤不屬于鏈路傳輸中的錯誤,不應當通過PCIe的錯誤檢測與處理機制處理,一般可借助設備特殊中斷(Device Specific Interrupt)等合適的方式進行報告與處理。
包傳遞過程的錯誤主要通過CRC編碼來檢測。PCIe定義了兩種CRC——LCRC和ECRC。其中LCRC(Link CRC)由數據鏈路層產生和校檢,用于檢測從一端的數據鏈路層發送到另一端的數據鏈路層的TLP是否發生的錯誤。而ECRC(End-to-end CRC)由事務層產生和校檢,且ECRC是可選的。
有人可能會質疑ECRC存在的必要性,因為LCRC已經對TLP進行了CRC校檢,在此基礎上多加一層ECRC可能是沒有必要的。這里來簡單地說明一下,一般情況下(尤其是沒有Switch的簡單PCIe總線系統中),ECRC的確是沒有必要存在的。ECRC主要為解決Switch中傳輸的可能錯在的傳輸錯誤問題的,換句話說,如果用戶的設計中并沒有Switch(只是簡單的Root與Endpoint的端對端直連),完全可以不使用ECRC。
如下圖所示,假設來自Endpoint的TLP被正確地傳輸到Switch的Downstream輸入端口(Ingress Port),Downstream輸入端口中的數據鏈路層也完成了對其的LCRC校檢,且未發現錯誤。然后Switch會將該LCRC移除,并添加新的序列號(Sequence Number),隨后重新計算LCRC,再將該TLP發送至Switch的Upstream輸出端口(Egress Port)。顯然,在此過程中TLP是不受保護的,一旦期間數據傳輸遇到錯誤等異常,可能會導致重新計算LCRC前的數據已經受到了破壞,且僅僅使用LCRC是無法發現這樣的錯誤的。
注:關于序列號(Sequence Number),可以參考前面的關于Ack/Nak的相關文章。
需要注意的是,ECRC是AER中的一部分,要想使用ECRC,該PCIe設備必須是支持AER的。
如果按照錯誤產生的層(Layer)來分,則可以分為物理層錯誤,數據鏈路層錯誤和事務層錯誤。
物理層錯誤(Physical Layer Errors)主要有:
· 8b/10b編解碼異常
· Framing異常(8b/10b編碼中是可選的,128b/130b中是必選的)
· Elastic Buffer錯誤(可選的)
· 起始字符失鎖(Loss of Symbol Lock)或者通道對齊失鎖(Lane Deskew)(可選的)
數據鏈路層錯誤(Data Link Layer Errors)主要有:
· LCRC校檢失敗
· 序列號(Sequence Number)異常
· DLLP中的16-bit CRC校檢失敗
· 鏈路層協議錯誤(Link Layer Protocol Errors)
事務層錯誤(Transaction Layer Errors)主要有:
· ERCR校檢失敗(可選的)
· 異常的TLP(Malformed TLP)(即TLP的格式異常)
· 流量控制協議異常(Flow Control Protocol Violation)
· 不支持的請求
· 數據損壞(Data Corruption,又稱為Poisoned Packet)
· Completer Abort(可選的)
· 接收端溢出(Receiver Overflow)(可選的)
· 返回包超時(Completion Timeout)
· 不對應的返回包(Unexpected Completion,即Completion與發出的Request不一致)
當接收端的物理層檢測到TLP存在錯誤時,如果再將該TLP繼續傳送至數據鏈路層和事務層必然也會發現錯誤。而過多的錯誤會讓錯誤分析與處理變得困難。因此,沒有必要在向上傳遞該TLP,而是將其直接扔掉,并報告相應的錯誤。
然而,即使這樣,PCIe總線的錯誤報告中也有很多錯誤源自同一個錯誤源。因此需要對錯誤進行優先級排序,使得錯誤源(最底層的錯誤)的優先級更高,能夠最先得到處理。PCIe總線中的錯誤優先級排序如下(優先級從高到低):
· 不可更正的內部錯誤(Uncorrectable Internal Error)
· 接收端Buffer溢出
· 流量控制協議錯誤
· ECRC校檢失敗
· 異常的TLP(Malformed TLP)
· AtomicOp Egress Blocked
· TLP包頭異常(TLP Prefix Blocked)
· 訪問控制服務(Access Control Services,ACS)異常
· MC(Multi-cast) Blocked TLP
· 不支持的請求(Unsupported Request,UR),Completer Abort(CA)或者不對應的返回包(Unexpected Completion)
· 接收到損壞的數據包(Poisoned Packet)
-
crc
+關注
關注
0文章
199瀏覽量
29461 -
Link
+關注
關注
0文章
101瀏覽量
26952 -
PCIe
+關注
關注
15文章
1234瀏覽量
82584
原文標題:【博文連載】PCIe掃盲——PCIe錯誤檢測機制
文章出處:【微信號:ChinaAET,微信公眾號:電子技術應用ChinaAET】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論