目錄篇地址為:http://blog.chinaaet.com/justlxy/p/5100053481
Completions
Completions的TLP Header的格式如下圖所示:
這里來解釋一下Completion Status Codes
· 000b (SC) Successful Completion:表示請求(Request)被正確的處理;
· 001b (UR) Unsupported Request:表示請求是非法的或者不能被Completer所識別的。在PCIe V1.1以及之后的版本將這作為Advisory Non-Fatal Error;
· 010b (CRS) Configuration Request Retry Status:Completer暫時不能響應的配置請求,需要Requester稍后再次嘗試;
· 100b (CA) Completer Abort:Completer可以響應該請求,但是卻發生了其他的錯誤,該錯誤是Uncorrectable Error。
關於CplD,需要注意的是:
· 前面的文章中多次提到,一個讀請求可能會對應多個CplD(因為4KB的地址邊界問題,以及RCB的限制),但是返回的總的數據量應當與請求的數據量保持一致,否則可能會出現Completion Timeout的錯誤;
· 一個Completion只能對應於一個Request;
· IO和Configuration讀請求由於一直都是1DW,因此其一直都只對應一個Completion;
· 當Completion中的狀態碼(Status Codes)為SC(Successful)之外的狀態,則一次傳輸(事務,Transaction)被終止;
· 在處理一個請求多個CplD時,應當注意Read Completion Boundary(RCB),RCB的值可以是64Bytes或者128Bytes;
· Bridge和Endpoint應設計為RCB的大小是可以通過軟件修改或控制的;
· 在處理一個請求多個CplD時,應注意先發送的時低地址的數據,后發送高地址數據。
Requester接受到Completion的處理規則:
· 如果Requester接收到的Completion與自己之前發送的Request不一致,則會報錯;
· 當Completion中的狀態碼不是SC或者CRS的話,則會報錯,並且相關的Buff都會被清空;
· 當任何非配置請求的Completion中的狀態碼為CRS時,都會被認為是非法的,並被認為是Malformed TLP;