1. 程式人生 > >USB開裝置開發學習之三:USB中的端點詳細瞭解

USB開裝置開發學習之三:USB中的端點詳細瞭解

原文:https://blog.csdn.net/go_str/article/details/80985717 
 

前言
    端點在實際的USB通訊過程種的具體作用與含義十分重要,但是有些難以理解,自己整理一些知識作為備忘。
(注:
    1、文中的EP表示Endpoint;

一、端點概念。
    端點(Endpoint),是主機與裝置之間通訊資料的接收或來源。主機與裝置之間通訊時最終會總用於裝置上的各個端點,它是主機與裝置間通訊流的一個邏輯終端。一系列相互獨立的端點在一起構成了USB邏輯裝置,在系統結構中,位於下方紅色方框內:

二、端點的分類
    每個USB裝置都有一個唯一的裝置地址,裝置地址是裝置連線上主機時由主機分配的,主機主要依靠這個裝置地址對USB裝置進行訪問。但是在裝置內部地址會被分的更細,裝置會分出一些端點來,每個端點在裝置都會有唯一的端點號,這個端點號是設計裝置時給定的。如端點0,端點1等。一個裝置最多可以包含16個端點,每個端點的地址為0-15。(網上也有說幾十個的,有待考究)    
    其中每個端點地址對應一個方向。例如端點3-IN,端點3-OUT,這兩個含義完全不同。但是需要注意其中的一個特殊端點--端點0,每個USB裝置必須要有一個端點0,其作用為對裝置列舉和對裝置進行一些基本的控制功能,端點0也被稱為控制端點。並且它與其他的端點還有一個不同之處在於端點0的資料傳輸方向是雙向的,即端點0既可以給主機發送資料,也可以接收主機發送過來的資料,而其它端點均為單向。
    雖然有16個端點,但通常我們只用到3個,如下:
     1)、EP0:做傳輸配置和控制資訊;
     2)、EP1:做資料輸入IN_EP;
     3)、EP2:做資料輸出OUT_EP。

注意:除了端點0,其餘的端點在裝置配置之前不能與主機通訊,只有向主機報告這些端點的特性並被確認後才能被啟用。

三、端點的特性
    一個端點的特性決定了它與客戶軟體進行傳送的型別。一個端點具有以下一些特性:
   ·端點的匯流排訪問頻率要求
   ·端點的匯流排延遲要求
   ·端點的頻寬要求
   ·端點的端點號
   ·對錯誤處理的要求
   ·端點能接收或傳送的包的最大長度
   ·端點的傳送型別
   ·端點與主機的資料傳送方向

四、端點描述符
    USB裝置中端點描述符描述了端點資訊,端點描述符格式如下:
typedef struct _USB_ENDPOINT_DESCRIPTOR_
{
    BYTE        bLength,
    BYTE        bDescriptorType,
    BYTE        bEndpointAddress,
    BYTE        bmAttributes,
    WORD      wMaxPacketSize,
    BYTE        bInterval
}USB_ENDPOINT_DESCRIPTOR;
各變數具體釋義如下:
bLength : 描述符大小.固定為0x07.
bDescriptorType : 介面描述符型別.固定為0x05.
bEndpointType : USB裝置的端點地址.Bit7,方向,對於控制端點可以忽略,1/0:IN/OUT.Bit6-4,保留.BIt3-0:端點號.
bmAttributes : 端點屬性.Bit7-2,保留.BIt1-0:00控制,01同步,02批量,03中斷.
wMaxPacketSize : 本端點接收或傳送的最大資訊包大小.
bInterval : 輪訓資料傳送端點的時間間隔.對於批量傳送和控制傳送的端點忽略.對於同步傳送的端點,必須為1,對於中斷傳送的端點,範圍為1-255。

五、端點與管道
1、管道的概念
    管道是主機軟體(資料快取區),和USB裝置各各端點之間的資料傳輸連線,他是兩者之間通訊流的抽象(實際上資料傳輸是USB匯流排介面完成)。管道與USB裝置中的端點逐個對應,並且各個管道的資料傳輸是相互獨立的。

2、管道的格式分類
    管帶的通訊格式分為兩種,一種為流,另一種為訊息,這兩種通訊格式不同且互斥。
1)、“流”指不具有USB定義格式的資料流,流通道中的資料是流的形式,也就是該資料內容不具有USB要求的結構。資料從流通道一端流進的順序與它們從流通道另一端流出時的順序是一樣的(先進先出),並且流通道中的通訊流總是單向的。
2)、“訊息”指具有某種USB定義格式的資料流。訊息通道與端點的關係同流通道與端點的關係是不同的。首先,主機向USB裝置發出一個請求;接著,就是資料的傳送;最後,是一個狀態階段(這部分即一次命令請求的過程)。為了能夠容納請求/資料/狀態的變化,訊息通道要求資料有一個格式,此格式保證了命令能夠被可靠地傳送和確認。訊息通道允許雙方向的資訊流。

六、端點的傳輸型別
    一個具體的端點只能屬於四個傳輸模式下中的一種。資料傳輸型別分為四種分別是:控制傳輸、批量傳輸、同步傳輸和中斷傳輸。一般情況下,通常把工作在什麼模式下的端點就叫什麼端點,例如:控制端點、批量端點、同步端點和中斷端點。
    端點0,是裝置的預設控制端點,在裝置上電後就存在並可以使用,在Set Config之前所有的傳輸都是通過端點0傳輸的。


總結:
    關於端點的瞭解暫時總結這麼多,後面有時間繼續補充;歡迎大家指正上面可能存在的問題,我會及時改正。