新聞中心

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

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

        作者: 時間:2016-12-12 來源:網絡 收藏
        一、USB設備模型

        USB設備模型從物理上分為兩個部分:主機(host)控制端作為主機端,驅動的設備是USB Host Controller;外設端被稱為設備端,驅動的設備是USB Device Controller。因此,USB設備驅動應該分為主機端驅動和設備端驅動兩部分,只是由于USB協議的主從定位思想,從設備只需要響應主機控制器的請求,不能主動發起請求,通常所說的USB驅動都是指主機端的驅動程序。但近年來隨著嵌入式設備的廣泛使用,運行Linux系統嵌入式設備也需要通過USB協議與主機端通信,因此從設備端的Linux也需要進行USB設備驅動程序開發,為了避免和主機端的USB設備驅動開發混淆,就將運行Linux的從設備驅動開發成為USB gadget driver,進入與device driver區分開。

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

        二、與驅動開發相關的USB協議規范

        1. USB設備被分為三層:

        usb host controller:最底層,也是總線接口層,負責傳輸和接收數據包;

        usb core:USB核心層,Linux系統已經根據USB協議規范實現的通用接口。作為中間層,主要完成總線與設備上端點的通信,端點是數據最終的生產者和消費者,一個設備可以有多個端點。因此,這一層其實就是總線和端點的路由。

        usb function:USB功能層,調用下層的接口實現不同的功能,如USB鼠標、USB鍵盤、USB話筒。通常的USB驅動開發指的都是這層的工作。

        2. USB設備的狀態和狀態機轉換

        Attached:USB設備接入或拔出,USB協議規范只定義了USB設備接入時的狀態;

        Powered:USB設備的供電分為兩種,從USB總線取電的稱為總線供電,USB設備從外部取電的稱為自供電。即時是自供電設備在插入前已經接通電源仍不能認為其處于Powered狀態,只有插入Attached加電后才處于Powered狀態;

        支持兩種供電模式的設備可以通過配置描述符來向主機報告它當前的供電模式。

        Default:當設備處于Powered狀態后,仍不能相應任何總線通信,只有設備手段總線的reset請求后,設備才能通過默認地址進行通信。設備被成功reset后,可以相應配置描述符請求并返回相應的信息;

        Addess:在設備被reset后,每個USB設備將被分配一個獨一無二的地址,USB設備在其掛起期間仍擁有這個地址。不論USB被分配了獨一無二的地址或使用的默認地址,都能通過默認的通道(pipe,即每個設備的0號端點)進行通信;

        Configured:在設備的功能被正常使用前,設備必須被配置。從設備端來講,配置就是正常處理一個帶有非0參數的SetConfiguration()請求。包括將每個端點的數據包默認類型設為DATA0;

        Suspended:電源管理相關,在沒有總線傳輸的一段時間后,USB設備將自動進入suspend狀態。在suspend狀態,USB設備自身維護它分配的地址和配置。當有一個總線激活信號后,設備從suspend狀態返回。USB設備也可以支持遠程喚醒(Remote Wakeup)來喚醒處于suspend狀態的主機控制器,但需支持host可以使能或關閉這個功能。

        3. 總線枚舉

        當一個USB設備接入或拔出時,主機需要通過總線枚舉功能來管理設備的狀態。當設備接入時,將采取下面的措施:

        1. 當設備接入后,接入的HUB通過一個狀態改變通道通知主機這個事件,這時USB設備處于Powered狀態并且其連接的端口是disabled的;

        2. 主機詢問HUB這次事件的類型等信息;

        3. 當主機了解這是個插入事件后,將enable設備接入的端口并等待100ms,讓設備的供電穩定,然后向這個端口發出reset命令;

        4. HUB執行這次reset操作,USB設備將處于default狀態,同時可以從Vbus獲取不超過100ma的電源。當前設備的寄存器和狀態都被reset了,并且可以通過默認地址進行響應;

        5. 主機將給USB設備分配一個獨一無二的地址,設備將進入address狀態;

        6. 在USB設備獲取獨一無二的地址之間,通過默認地址的默認控制通道仍然可以訪問,host獲取設備描述符來決定默認控制通道的最大數據載荷;

        7. 主機將從設備獲取全部配置信息,從0到n-1的配置描述符,即設備所擁有的所有配置描述符;這將花費幾毫秒;

        8. 通過獲取的配置信息來決定設備將被如何使用,主機將分配各設備一個配置值,這時設備處于configured狀態同時所有的端點也就具有這個配置下的特性,USB設備也將獲取在其所指定的配置中的電流值。設備處于可用狀態了;



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 麻城市| 密云县| 高台县| 宁陵县| 高淳县| 台南市| 眉山市| 西乌珠穆沁旗| 七台河市| 凤凰县| 定结县| 哈尔滨市| 南城县| 甘谷县| 韩城市| 淳化县| 铜梁县| 荆门市| 光泽县| 伊春市| 静海县| 阿克陶县| 本溪| 安康市| 鹰潭市| 涿州市| 西昌市| 丹阳市| 纳雍县| 房产| 治县。| 谢通门县| 乌兰浩特市| 若尔盖县| 桐城市| 名山县| 晋州市| 务川| 涿州市| 葵青区| 连山|