USB端點詳解

__u8 bEndpointAddress; //端點地址:03位是端點號,第7位是方向(0-OUT,1-IN)

端點地址:總共80,1,2,3四位表示端點號,第7位表示端點方向

那麼由這5位可以確定32個端點地址.

其中輸入端點0-15輸出端點0-15


Out endpoint for all omron health devices,

所有Omron健康設備的輸出端點地址(8,包括端點號,端點類型和端點方向)

static const uint32_t OMRON_OUT_ENDPT = 0x02;

In endpoint for all omron health devices,

所有Omron健康設備的輸入端點地址(8,包括端點號,端點類型,和端點方向)

static const uint32_t OMRON_IN_ENDPT = 0x81;

我們和設備通信的時候,不是使用端點號,端點號不能唯一確定一個管道,而是使用端點地址,端點地址中的端點號和端點方向,可以唯一確定一個管道pipe.


 0x81 端點的地址 1000 0001

 D7 表示傳輸方向 1 爲輸入 

 D6~D4 reserved

 D3~D0 爲端點號 端點號爲 01
  也就是說 1 號端點,輸入端點

//////////////////////////////////////////////////////////////

0x02 端點的地址 0000 0010
D7 表示傳輸方向 1 爲輸入

 D6~D4 reserved 

D3~D0 爲端點號 端點號爲 2
端點號爲 2,輸出端點




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

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

CONTROL

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

INTERRUPT

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

BULK

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

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. 這些宏定義了同步, 塊, 和中斷端點, 相應地.

wMaxPacketSize

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

bInterval

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章