PCIe總線錯(cuò)誤檢測(cè)囊括了鏈路(Link)上的錯(cuò)誤以及包傳遞過(guò)程中的錯(cuò)誤,如下圖所示。用戶設(shè)計(jì)的應(yīng)用程序?qū)又械腻e(cuò)誤不屬于鏈路傳輸中的錯(cuò)誤,不應(yīng)當(dāng)通過(guò)PCIe的錯(cuò)誤檢測(cè)與處理機(jī)制處理,一般可借助設(shè)備特殊中斷(Device Specific Interrupt)等合適的方式進(jìn)行報(bào)告與處理。
包傳遞過(guò)程的錯(cuò)誤主要通過(guò)CRC編碼來(lái)檢測(cè)。PCIe定義了兩種CRC——LCRC和ECRC。其中LCRC(Link CRC)由數(shù)據(jù)鏈路層產(chǎn)生和校檢,用于檢測(cè)從一端的數(shù)據(jù)鏈路層發(fā)送到另一端的數(shù)據(jù)鏈路層的TLP是否發(fā)生的錯(cuò)誤。而ECRC(End-to-end CRC)由事務(wù)層產(chǎn)生和校檢,且ECRC是可選的。
有人可能會(huì)質(zhì)疑ECRC存在的必要性,因?yàn)長(zhǎng)CRC已經(jīng)對(duì)TLP進(jìn)行了CRC校檢,在此基礎(chǔ)上多加一層ECRC可能是沒(méi)有必要的。這里來(lái)簡(jiǎn)單地說(shuō)明一下,一般情況下(尤其是沒(méi)有Switch的簡(jiǎn)單PCIe總線系統(tǒng)中),ECRC的確是沒(méi)有必要存在的。ECRC主要為解決Switch中傳輸?shù)目赡苠e(cuò)在的傳輸錯(cuò)誤問(wèn)題的,換句話說(shuō),如果用戶的設(shè)計(jì)中并沒(méi)有Switch(只是簡(jiǎn)單的Root與Endpoint的端對(duì)端直連),完全可以不使用ECRC。
如下圖所示,假設(shè)來(lái)自Endpoint的TLP被正確地傳輸?shù)絊witch的Downstream輸入端口(Ingress Port),Downstream輸入端口中的數(shù)據(jù)鏈路層也完成了對(duì)其的LCRC校檢,且未發(fā)現(xiàn)錯(cuò)誤。然后Switch會(huì)將該LCRC移除,并添加新的序列號(hào)(Sequence Number),隨后重新計(jì)算LCRC,再將該TLP發(fā)送至Switch的Upstream輸出端口(Egress Port)。顯然,在此過(guò)程中TLP是不受保護(hù)的,一旦期間數(shù)據(jù)傳輸遇到錯(cuò)誤等異常,可能會(huì)導(dǎo)致重新計(jì)算LCRC前的數(shù)據(jù)已經(jīng)受到了破壞,且僅僅使用LCRC是無(wú)法發(fā)現(xiàn)這樣的錯(cuò)誤的。
注:關(guān)于序列號(hào)(Sequence Number),可以參考前面的關(guān)于Ack/Nak的相關(guān)文章。
需要注意的是,ECRC是AER中的一部分,要想使用ECRC,該P(yáng)CIe設(shè)備必須是支持AER的。
如果按照錯(cuò)誤產(chǎn)生的層(Layer)來(lái)分,則可以分為物理層錯(cuò)誤,數(shù)據(jù)鏈路層錯(cuò)誤和事務(wù)層錯(cuò)誤。
物理層錯(cuò)誤(Physical Layer Errors)主要有:
· 8b/10b編解碼異常
· Framing異常(8b/10b編碼中是可選的,128b/130b中是必選的)
· Elastic Buffer錯(cuò)誤(可選的)
· 起始字符失鎖(Loss of Symbol Lock)或者通道對(duì)齊失鎖(Lane Deskew)(可選的)
數(shù)據(jù)鏈路層錯(cuò)誤(Data Link Layer Errors)主要有:
· LCRC校檢失敗
· 序列號(hào)(Sequence Number)異常
· DLLP中的16-bit CRC校檢失敗
· 鏈路層協(xié)議錯(cuò)誤(Link Layer Protocol Errors)
事務(wù)層錯(cuò)誤(Transaction Layer Errors)主要有:
· ERCR校檢失敗(可選的)
· 異常的TLP(Malformed TLP)(即TLP的格式異常)
· 流量控制協(xié)議異常(Flow Control Protocol Violation)
· 不支持的請(qǐng)求
· 數(shù)據(jù)損壞(Data Corruption,又稱為Poisoned Packet)
· Completer Abort(可選的)
· 接收端溢出(Receiver Overflow)(可選的)
· 返回包超時(shí)(Completion Timeout)
· 不對(duì)應(yīng)的返回包(Unexpected Completion,即Completion與發(fā)出的Request不一致)
當(dāng)接收端的物理層檢測(cè)到TLP存在錯(cuò)誤時(shí),如果再將該TLP繼續(xù)傳送至數(shù)據(jù)鏈路層和事務(wù)層必然也會(huì)發(fā)現(xiàn)錯(cuò)誤。而過(guò)多的錯(cuò)誤會(huì)讓錯(cuò)誤分析與處理變得困難。因此,沒(méi)有必要在向上傳遞該TLP,而是將其直接扔掉,并報(bào)告相應(yīng)的錯(cuò)誤。
然而,即使這樣,PCIe總線的錯(cuò)誤報(bào)告中也有很多錯(cuò)誤源自同一個(gè)錯(cuò)誤源。因此需要對(duì)錯(cuò)誤進(jìn)行優(yōu)先級(jí)排序,使得錯(cuò)誤源(最底層的錯(cuò)誤)的優(yōu)先級(jí)更高,能夠最先得到處理。PCIe總線中的錯(cuò)誤優(yōu)先級(jí)排序如下(優(yōu)先級(jí)從高到低):
· 不可更正的內(nèi)部錯(cuò)誤(Uncorrectable Internal Error)
· 接收端Buffer溢出
· 流量控制協(xié)議錯(cuò)誤
· ECRC校檢失敗
· 異常的TLP(Malformed TLP)
· AtomicOp Egress Blocked
· TLP包頭異常(TLP Prefix Blocked)
· 訪問(wèn)控制服務(wù)(Access Control Services,ACS)異常
· MC(Multi-cast) Blocked TLP
· 不支持的請(qǐng)求(Unsupported Request,UR),Completer Abort(CA)或者不對(duì)應(yīng)的返回包(Unexpected Completion)
· 接收到損壞的數(shù)據(jù)包(Poisoned Packet)
-
crc
+關(guān)注
關(guān)注
0文章
205瀏覽量
30611 -
Link
+關(guān)注
關(guān)注
0文章
104瀏覽量
27964 -
PCIe
+關(guān)注
關(guān)注
16文章
1419瀏覽量
87504
原文標(biāo)題:【博文連載】PCIe掃盲——PCIe錯(cuò)誤檢測(cè)機(jī)制
文章出處:【微信號(hào):ChinaAET,微信公眾號(hào):電子技術(shù)應(yīng)用ChinaAET】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
PCIe簡(jiǎn)介及引腳定義
PCIe插槽秒變M.2存儲(chǔ)倉(cāng)!免拆機(jī)維護(hù)神器M.2 NVMe轉(zhuǎn)PCIe 4.0 x4 硬盤(pán)抽取盒!#pcie
基于12槽PCIE擴(kuò)展塢知識(shí)資料
PCIe的技術(shù)原理詳細(xì)說(shuō)明
體驗(yàn)紫光PCIE之使用WinDriver驅(qū)動(dòng)紫光PCIE
PCIe至USB的TMS320DM816xTMS320C6A816x和AM389x評(píng)估板詳細(xì)資料概述
KeyStone中使用PCIE的應(yīng)用案例和PCIE特征的詳細(xì)描述
PCIe錯(cuò)誤報(bào)告機(jī)制上高級(jí)錯(cuò)誤報(bào)告AER
PHP出現(xiàn)502錯(cuò)誤的問(wèn)題如何解決詳細(xì)資料說(shuō)明
python的內(nèi)置函數(shù)詳細(xì)資料概述
CAN總線基礎(chǔ)的詳細(xì)資料概述
PCIe錯(cuò)誤報(bào)告的兩種機(jī)制詳解
PCIe熱插拔機(jī)制介紹

PCIe掃盲—PCIe錯(cuò)誤檢測(cè)機(jī)制的詳細(xì)資料概述
評(píng)論