USB設備驅動開發(fā)-USB協(xié)議相關(2)
1. 熱插拔
本文引用地址:http://2s4d.com/article/201612/329080.htm在熱插拔中,USB HUB扮演著很重要的角色,HUB向主機報告端口的狀態(tài)改變,主機才能對相應的動作采取相應的操作;
2. 地址分派
當USB設備插入后,主機會對USB設備分配一個獨一無二的地址,同時resetUSB設備并對HUB的相應端口使能;
3. 配置(Configuration):
在USB設備的功能可用之前必須被配置,主機首先獲取設備的配置信息了解設備的功能進而進行配置。主機將設置設備的配置(configuration),并且可能對接口(Interface)選擇可變的設置(setting).
在一個配置中,設備可能支持多個接口,一個接口就是相關的一些端點(Endpoint) ,通過這些端點提供一個功能。因此,一個接口就向主機提供一個功能,在一個配置中,一個USB設備可以向主機提供多個不同的功能。接口中端點的特性和端點與主機通信的協(xié)議可以通過設備類(device class)或廠商自定義的標記來標示。
接口可以有一些設置來重定義接口關聯(lián)的端點的編號和特性,但這需要設備支持GetInterface()請求來報告接口的當前設置,并通過SetInterface()請求來為接口選則可變的設置。
接口配置符(Interface Descriptor)數(shù)據(jù)結構包含表示接口號和可變設置的域,其中接口號是從0至n-1(n表示當前配置所支持的接口數(shù)),可變設置也是編號從0至n-1編號,當設備初始化配置中接口的默認設置是0號設置。
為了支持通用性驅動程序,設備描述符和接口描述符中都包含Class、SubClass和Protocol域,來標示USB設備提供的功能和利用這些功能主機和設備的通信協(xié)議。
4. 數(shù)據(jù)傳輸
USB設備和主機之間有四種數(shù)據(jù)傳輸方式(控制、中斷、批量和等時),端口號可以在不同的接口設置中使用不同的傳輸方式。但一旦這種接口設置選定,在這種接口設置期間相應的端口就只能使用這種設置中指定的數(shù)據(jù)傳輸方式。
5. 請求響應
在USB設備處理請求時,為了保證處理的及時性,設置了一個時間上限5秒。在5秒內任何請求都必須被處理完成,但這不是強制性的規(guī)定。一個設備標準的請求包括三個階段:發(fā)出請求,傳輸數(shù)據(jù),返回狀態(tài)。
在設備標準請求中,若沒有數(shù)據(jù)階段,則設備必須在50ms內完成請求處理并返回狀態(tài),這個限制適用于設備、接口和端點。
若需要在數(shù)據(jù)階段傳輸數(shù)據(jù)給主機,則設備必須在接收到請求50ms內發(fā)出第一個數(shù)據(jù)包,并在500ms內傳輸完其他數(shù)據(jù)包,然后在最后一個數(shù)據(jù)傳輸完50ms內返回狀態(tài),完成狀態(tài)階段。也就是說,主機獲取數(shù)據(jù)的請求必須在600ms內完成。
若主機需要發(fā)送數(shù)據(jù)到設備,則是5秒的限制。設備需要在5秒內完成數(shù)據(jù)的接收和狀態(tài)階段。
二、USB設備請求(USB Device Request)
所有的USB設備請求都是通過設備的默認控制通道(0號控制端點)完成的,使用控制傳輸協(xié)議。這些請求和請求的參數(shù)通過Setup包發(fā)送,每個Setup包都是8個字節(jié)。
Setup包的格式:
bmRequestType:請求類型相關信息,一個字節(jié)
其中的Direction表示第二階段數(shù)據(jù)傳輸?shù)姆较颍魒Length字段為0,表示沒有數(shù)據(jù)傳輸,則這個位可以忽略。
Type位(兩位)表示請求的類型,USB設備規(guī)范定義了一些所有設備必須支持的標準設備請求,用Standard?;蛘哌@類設備定義了一些請求,用class表示,或這個廠商自定義的請求,用vendor。
Recipient位(5位)表示請求的對象,請求對象可以是設備、設備上的接口或指定的端點。若操作的對象是接口或端點,則wIndex域來表示接口號或端點號。
bRequest:是具體的請求,一個字節(jié)
具體的請求操作,標準設備請求將在后表列出
wValue:根據(jù)請求的不同有不同的含義,兩個字節(jié)
與具體的請求相關,將在后表列出
wIndex:根據(jù)請求的不同有不同的含義,一般表示索引或便宜量,兩個字節(jié)
當請求操作對象是設備時,可用于傳遞給設備的參數(shù);
當請求操作對象是接口或端點時,用于表示操作的接口號或端點號
Direction位設為0,表示OUT端點,設為1表示IN端點。在控制通道中,應當將其設置為0。
wLength:若請求有數(shù)據(jù)傳輸,則表示傳輸數(shù)據(jù)的長度
表示在第二階段數(shù)據(jù)傳輸?shù)拈L度,bmRequestType字段中指示了數(shù)據(jù)傳輸?shù)姆较?。若wlength表示為0,則沒有數(shù)據(jù)傳輸階段。
在一個獲取數(shù)據(jù)的請求中,設備不能返回多于wLength的數(shù)據(jù),但可以返回少于wLength的數(shù)據(jù)。而在輸出數(shù)據(jù)的請求豬,wLength總是發(fā)出數(shù)據(jù)的準確長度,若發(fā)出的數(shù)據(jù)長度超過wLength,則設備的行為是不可知。
設備標準請求指令和Setup包中相關字段對應的值
評論