記錄相關數據結構之前,先上一張圖,這樣就基本一目了然了

USB XHCI HOST有三種RING
分別為COMMAND, EVENT 與TRANSFER
這里所說的是TRANSFER RING
一個RING可能由一個或者多個SEGMENT構成
每一個SEGMENT則有多個TRB構成
多個SEGMENT的鏈接是由LINK TRB來實現的,LINK就像一個單鏈表,最后一個LINK TRB指向第一個SEGMENT,由此,形成了一個環,RING
TRANSFER TRB有以下幾種類型:
針對USB CONTROL TRANSFER的SETUP, DATA, STATUS TRBs
針對BULK, INTERRUPT, ISO TRANSFER的NORMAL TRB
針對ISO TRANSFER的ISOCH TRB (ISO TD由一個ISOCH TRB與0個或多個NORMAL TRB構成)
SW將需要硬件完成的USB傳輸,通過TRB的形式,將信息提交給硬件,放入RING當中,放入的位置為當前ENQUEUE PTR的位置,每放一個,ENQUEUE PTR向前跨一步,遇到LINK TRB,則跳轉到LINK TRB指向的位置
而硬件則按DEQUEUE PTR指向的位置,取出TRB到CACHE當中,執行該TRB,同樣,每執行一個,則ADVANCE 該 DEQUEUE PTR,遇LINK TRB,跳轉。
TD表示一個USB TRANSFER(不同於USB TRANSACTION)
在TRB當中,有一個CH BIT,如果一處TD由多個TRB構成,則軟件需要將除最后一個TRB的所有CH BIT置位。
本文详细解析了USB XHCI Host中的COMMAND、EVENT与TRANSFER RING结构,介绍了TRB(Transfer Request Block)的不同类型,包括SETUP、DATA、STATUS等,并阐述了硬件与软件如何通过TRB进行数据传输的交互过程。重点讲解了多段SEGMENT链接和ISOCHTRB的使用。
493

被折叠的 条评论
为什么被折叠?



