2017-04-06 71 views
0

我知道什麼:USB交互( - 緩衝 - 端點HostController)

  • USB設備(鼠標),有一箇中斷IN端點,其中輸出數據到主機IST存儲。
  • 主機輪詢此中斷IN端點並將數據寫入緩衝區。

我在哪裏可以找到這個緩衝區?我非常努力地在我的主板的技術手冊(USB ... Controller ... Buffer)中找到它,但是我找不到這個寄存器。

那麼HostController使用自己的緩衝區來存儲來自設備的Endpoint IN數據,還是Host Conroller將它映射到其他寄存器?

如果有動作(例如鼠標移動或點擊),USB主控制器是否會引起中斷? 我在哪裏可以找到這個存儲/緩衝的數據?

我與Ubuntu合作,並尋找到/proc/interrupts我可以找到EHCI_HCD:USB2控制器,連接的USB設備的IRQ號(鼠標)...

也許任何人都可以幫我瞭解這個USB Enpoint => HostController =>中斷---機制。

非常感謝!

回答

0

我在哪裏可以找到這個緩衝區?我非常努力地在我的主板的技術手冊(USB ... Controller ... Buffer)中找到它,但是我找不到這個寄存器。

此緩衝區來自URB形式的HID類驅動程序。所以它是一個軟件緩衝區。

那麼HostController是否使用自己的緩衝區來存儲來自設備的Endpoint IN數據,或者是Host Conroller將它映射到其他寄存器?

正如我前面所說,主機控制器中沒有寄存器來存儲數據。主機控制器使用HCD傳遞的軟件緩衝區。

如果有某個操作(例如鼠標移動或點擊),USB主控制器是否會引起中斷?我在哪裏可以找到這個存儲/緩衝的數據?

不會有任何中斷。您將輪詢中斷端點以獲取狀態。主機控制器使用中斷通知中斷IN傳輸的傳輸完成。

要說清楚,請看下面的Transfer Descriptor圖。主機控制器分別在IN和OUT事務的情況下使用「緩衝區指針」存儲或檢索數據。要了解更多關於Transfer Descriptor的信息,請閱讀EHCI規範。

enter image description here

+0

親愛的@Shaibal。謝謝您的回答。所以當URB完成時,主機控制器會引起中斷?註冊到通用中斷控制器?通知核心?什麼是pic「緩衝區指針」的來源......我找不到USB規範中描述的傳輸描述符。您有這方面的來源嗎?此致 – fetteotter

+0

是主控制器在三種情況下導致中斷 - 傳輸完成,端口更改事件,主機內部錯誤。該中斷將被註冊到通用中斷控制器。請參閱intel的「ehci規範」文檔。有關緩衝區的數據結構圖和細節,請參見第3章第5節。 :) – Shaibal