前面的文章介紹了tlp的幾種型別以及tlp的包結構。這篇文章來詳細地聊一聊non-posted transaction(包括ordinary read、locked read和io/configuration writes)與posted writes(包括memory writes和message writes)。
non-posted transaction
o ordinary reads
下圖顯示的是乙個endpoint向system memory傳送讀請求(read request)的例子。
在這個例子中,endpoint的讀請求通過了兩個switch,然後到達其目標,即root。root對讀請求的包進行解碼後,並從中識別出操作的位址,然後鎖存資料,並將資料傳送至endpoint,即包含資料的completion包,clpd。需要注意的是,pcie允許每個包的最大資料量(max data payload)為4kb,但實際上設計者往往會採用較小的max payload size(比如128,256,512,1024和2048)。因此,常常乙個讀請求會對應多個clpd,即將大於max payload size的資料分成多個包傳送。如果遇到錯誤,則root會通過completion包告知相應的endpoint。
注:root向傳送請求的endpoint傳送completion包,是通過request包中的bdf資訊(bus,device和function)進行查詢對應的endpoint的。關於bdf,會在後面的文章詳細地介紹。
o locked reads
locked請求實際上是pcie為了相容早期的pci匯流排而設定的一種方式,對於非pci相容的設計中,是不允許使用locked操作的。並且也只有root可以發起locked請求操作,endpoint是不可以發起locked請求操作的。下圖顯示的是乙個簡單的locked read請求操作:
locked read主要用於支援一種叫做atomic read-modify-write操作,這是一種高優先順序且不可被打斷的操作。主要用於測試鏈路狀況等任務(針對pci裝置,pcie裝置禁止使用locked操作)。此外,locked操作採用的是目標儲存定址(target memory address)來尋找legacy endpoint(pci裝置),而不是採用前面介紹的bdf。
o io/configuration writes
下圖是乙個non-posted io寫操作的例子。和locked操作一樣,io操作也是為了相容早期的pci裝置,在pcie裝置中也是不建議使用。
posted writes
o memory writes
前面的文章有所提及,pcie中的memory寫操作都是posted的,因此requester並不需要來自completer的completion。乙個簡單的memory writes例子如下圖所示:
因此沒有返回completion,所以當發生錯誤時,requester也不會知道。但是,此時completer會將錯誤記錄到日誌(log),然後向root傳送包含錯誤資訊的message。
o message writes
和其他的幾種型別不太一樣,message支援多種routing方式。比如requester可以將message傳送至乙個指定的completer,但是不管指定的completer是不是root,root都會自動的收到來自任何乙個endpoint傳送的message。此外,當requester是root的時候,requester還可以向所有的endpoint進行廣播傳送message。
不得不說,message機制的提出幫助pcie匯流排省去了很多pci匯流排中的邊帶訊號。pci中很多用於中斷、功耗管理、錯誤報告的邊帶訊號,在pcie中都通過了message來進行實現了。
PCIe掃盲 PCIe匯流排事務層入門(一)
在介紹事務層之前,首先簡單地了解一下pcie匯流排的通訊機制。假設某個裝置要對另乙個裝置進行讀取資料的操作,首先這個裝置 稱之為requester 需要向另乙個裝置傳送乙個request,然後另乙個裝置 稱之為completer 通過completion packet返回資料或者錯誤資訊。在pcie...
PCIe匯流排事務層
在介紹事務層之前,首先簡單地了解一下pcie匯流排的通訊機制。假設某個裝置要對另乙個裝置進行讀取資料的操作,首先這個裝置 稱之為requester 需要向另乙個裝置傳送乙個request,然後另乙個裝置 稱之為completer 通過completion packet返回資料或者錯誤資訊。在pcie...
PCIe掃盲 PCIe匯流排體系結構入門
和很多的序列傳輸協議一樣,乙個完整的pcie體系結構包括應用層 事務層 transaction layer 資料鏈路層 data link layer 和物理層 physical layer 其中,應用層並不是pcie spec所規定的內容,完全由使用者根據自己的需求進行設計,另外三層都是pcie ...