USB中的端點詳細瞭解(轉)

 
前言
    端點在實際的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傳輸的。
 
 
設備、設備號、配置、接口、端點總結如下:

 

 

        這裏自己的理解是:一個設備只有一個設備號,有若干端點,在一個配置中,不同接口的端點號不同,端點號是唯一的,就像是例子中的教室,可能在不同配置中,同一個端點屬於了不同的接口,就像是一個教室,在不同的配置中可以是教室也可以是考場。但是其端點號不可改變。

       端點0不獨立屬於任何配置和任何接口,是歸屬於USB設備

         

 

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