新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > USB設備驅動開發-USB協議相關(2)

        USB設備驅動開發-USB協議相關(2)

        作者: 時間:2016-12-12 來源:網絡 收藏
        一、USB設備通用操作

        1. 熱插拔

        本文引用地址:http://www.104case.com/article/201612/329080.htm

        在熱插拔中,USB HUB扮演著很重要的角色,HUB向主機報告端口的狀態改變,主機才能對相應的動作采取相應的操作;

        2. 地址分派

        當USB設備插入后,主機會對USB設備分配一個獨一無二的地址,同時resetUSB設備并對HUB的相應端口使能;

        3. 配置(Configuration):

        在USB設備的功能可用之前必須被配置,主機首先獲取設備的配置信息了解設備的功能進而進行配置。主機將設置設備的配置(configuration),并且可能對接口(Interface)選擇可變的設置(setting).

        在一個配置中,設備可能支持多個接口,一個接口就是相關的一些端點(Endpoint) ,通過這些端點提供一個功能。因此,一個接口就向主機提供一個功能,在一個配置中,一個USB設備可以向主機提供多個不同的功能。接口中端點的特性和端點與主機通信的協議可以通過設備類(device class)或廠商自定義的標記來標示。

        接口可以有一些設置來重定義接口關聯的端點的編號和特性,但這需要設備支持GetInterface()請求來報告接口的當前設置,并通過SetInterface()請求來為接口選則可變的設置。

        接口配置符(Interface Descriptor)數據結構包含表示接口號和可變設置的域,其中接口號是從0至n-1(n表示當前配置所支持的接口數),可變設置也是編號從0至n-1編號,當設備初始化配置中接口的默認設置是0號設置。

        為了支持通用性驅動程序,設備描述符和接口描述符中都包含Class、SubClass和Protocol域,來標示USB設備提供的功能和利用這些功能主機和設備的通信協議。

        4. 數據傳輸

        USB設備和主機之間有四種數據傳輸方式(控制、中斷、批量和等時),端口號可以在不同的接口設置中使用不同的傳輸方式。但一旦這種接口設置選定,在這種接口設置期間相應的端口就只能使用這種設置中指定的數據傳輸方式。

        5. 請求響應

        在USB設備處理請求時,為了保證處理的及時性,設置了一個時間上限5秒。在5秒內任何請求都必須被處理完成,但這不是強制性的規定。一個設備標準的請求包括三個階段:發出請求,傳輸數據,返回狀態。

        在設備標準請求中,若沒有數據階段,則設備必須在50ms內完成請求處理并返回狀態,這個限制適用于設備、接口和端點。

        若需要在數據階段傳輸數據給主機,則設備必須在接收到請求50ms內發出第一個數據包,并在500ms內傳輸完其他數據包,然后在最后一個數據傳輸完50ms內返回狀態,完成狀態階段。也就是說,主機獲取數據的請求必須在600ms內完成。

        若主機需要發送數據到設備,則是5秒的限制。設備需要在5秒內完成數據的接收和狀態階段。

        二、USB設備請求(USB Device Request)

        所有的USB設備請求都是通過設備的默認控制通道(0號控制端點)完成的,使用控制傳輸協議。這些請求和請求的參數通過Setup包發送,每個Setup包都是8個字節。

        Setup包的格式:

        bmRequestType:請求類型相關信息,一個字節

        其中的Direction表示第二階段數據傳輸的方向,若wLength字段為0,表示沒有數據傳輸,則這個位可以忽略。

        Type位(兩位)表示請求的類型,USB設備規范定義了一些所有設備必須支持的標準設備請求,用Standard。或者這類設備定義了一些請求,用class表示,或這個廠商自定義的請求,用vendor。

        Recipient位(5位)表示請求的對象,請求對象可以是設備、設備上的接口或指定的端點。若操作的對象是接口或端點,則wIndex域來表示接口號或端點號。

        bRequest:是具體的請求,一個字節

        具體的請求操作,標準設備請求將在后表列出

        wValue:根據請求的不同有不同的含義,兩個字節

        與具體的請求相關,將在后表列出

        wIndex:根據請求的不同有不同的含義,一般表示索引或便宜量,兩個字節

        當請求操作對象是設備時,可用于傳遞給設備的參數;

        當請求操作對象是接口或端點時,用于表示操作的接口號或端點號

        Direction位設為0,表示OUT端點,設為1表示IN端點。在控制通道中,應當將其設置為0。

        wLength:若請求有數據傳輸,則表示傳輸數據的長度

        表示在第二階段數據傳輸的長度,bmRequestType字段中指示了數據傳輸的方向。若wlength表示為0,則沒有數據傳輸階段。

        在一個獲取數據的請求中,設備不能返回多于wLength的數據,但可以返回少于wLength的數據。而在輸出數據的請求豬,wLength總是發出數據的準確長度,若發出的數據長度超過wLength,則設備的行為是不可知。

        設備標準請求指令和Setup包中相關字段對應的值



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 颍上县| 安乡县| 古蔺县| 祁阳县| 景洪市| 若羌县| 龙井市| 冷水江市| 浪卡子县| 河东区| 纳雍县| 宝鸡市| 岗巴县| 长宁县| 夏津县| 白山市| 本溪| 镇沅| 罗定市| 九江市| 陵水| 双桥区| 柳河县| 呈贡县| 抚顺市| 瓮安县| 嘉兴市| 天水市| 汝州市| 定西市| 清苑县| 新野县| 红河县| 天祝| 萝北县| 长泰县| 余江县| 梧州市| 阳新县| 五河县| 明光市|