Linux 內核端點

USB 通信的最基本形式是經過某些稱爲 端點 的. 一個 USB 端點只能在一個方向承載數 據, 或者從主機到設備(稱爲輸出端點)或者從設備到主機(稱爲輸入端點). 端點可看做一 個單向的管道.程序員

 

一個 USB 端點但是 4 種不一樣類型的一種, 它來描述數據如何被傳送:網絡

 

 

CONTROL異步

 

控制端點被用來容許對 USB 設備的不一樣部分存取. 一般用做配置設備, 獲取關於 設備的信息, 發送命令到設備, 或者獲取關於設備的狀態報告. 這些端點在尺寸上 經常較小. 每一個 USB 設備有一個控制端點稱爲"端點 0", 被 USB 核用來在插入時 配置設備. 這些傳送由 USB 協議保證來總有足夠的帶寬使它到達設備.視頻

 

INTERRUPTip

 

中斷端點傳送小量的數據, 以固定的速率在每次 USB 主請求設備數據時. 這些端 點對 USB 鍵盤和鼠標來講是主要的傳送方法. 它們還用來傳送數據到 USB 設備來 控制設備, 但一般不用來傳送大量數據. 這些傳送由 USB 協議保證來總有足夠的 帶寬使它到達設備.同步

 

BULKio

 

塊端點傳送大量的數據. 這些端點經常比中斷端點大(它們一次可持有更多的字符). 它們是廣泛的, 對於須要傳送不能有任何數據丟失的數據. 這些傳送不被 USB 協 議保證來一直使它在特定時間範圍內完成. 若是總線上沒有足夠的空間來發送整個 BULK 報文, 它被分爲屢次傳送到或者從設備. 這些端點廣泛在打印機, 存儲器, 和網絡設備上.class

 

ISOCHRONOUS音頻

 

同步端點也傳送大量數據, 可是這個數據經常不被保證它完成. 這些端點用在能夠 處理數據丟失的設備中, 而且更多依賴於保持持續的數據流. 實時數據收集, 例如 音頻和視頻設備, 一直都使用這些端點.配置

 

控制和塊端點用做異步數據傳送, 不管什麼時候驅動決定使用它們. 中斷和同步端點是週期性 的. 這意味着這些端點被設置來連續傳送數據在固定的時間, 這使它們的帶寬被 USB 核 所保留.

 

USB 端點在內核中使用結構 struct usb_host_endpoint 來描述. 這個結構包含真實的端 點信息在另外一個結構中, 稱爲 struct usb_endpoint_descriptor. 後者包含全部的 USB- 特定 數據, 以設備自身特定的準確格式. 驅動關心的這個結構的成員是:

 

bEndpointAddress

 

這是這個特定端點的 USB 地址. 還包含在這個 8-位 值的是端點的方向. 位掩碼 USB_DIR_OUT 和 USB_DIR_IN 可用來和這個成員比對, 來決定給這個端點的數據是 到設備仍是到主機.

 

bmAttributes

 

這是端點的類型. 位掩碼 USB_ENDPOINT_XFERTYPE_MASK 應當用來和這個值比對, 來決定這個端點是不是 USB_ENDPOINT_XFER_ISOC, USB_ENDPOINT_XFER_BULK, 或

者是類型 USB_ENDPOINT_XFER_INT. 這些宏定義了同步, 塊, 和中斷端點, 相應地.

 

 

這是以字節計的這個端點可一次處理的最大大小. 注意驅動可能發送大量的比這個 值大的數據到端點, 可是數據會被分爲 wMaxPakcetSize 的塊, 當真正傳送到設備 時. 對於高速設備, 這個成員可用來支持端點的一個高帶寬模式, 經過使用幾個額 外位在這個值的高位部分. 關於如何完成的細節見 USB 規範.

 

bInterval

 

若是這個端點是中斷類型的, 這個值是爲這個端點設置的間隔, 即在請求端點的中 斷之間的時間. 這個值以毫秒錶示.

 

這個結構的成員沒有一個"傳統" Linux 內核的命名機制. 這是由於這些成員直接對應於 USB 規範中的名子. USB 內核程序員認爲使用規定的名子更重要, 以便在閱讀規範時減小 混亂, 沒必要使這些名子對 Linux 程序員看起來熟悉.

相關文章
相關標籤/搜索