久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > USB設備驅(qū)動開發(fā)-USB協(xié)議相關(guān)(1)

USB設備驅(qū)動開發(fā)-USB協(xié)議相關(guān)(1)

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

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

本文引用地址:http://cqxgywz.com/article/201612/329082.htm

二、與驅(qū)動開發(fā)相關(guān)的USB協(xié)議規(guī)范

1. USB設備被分為三層:

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

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

usb function:USB功能層,調(diào)用下層的接口實現(xiàn)不同的功能,如USB鼠標、USB鍵盤、USB話筒。通常的USB驅(qū)動開發(fā)指的都是這層的工作。

2. USB設備的狀態(tài)和狀態(tài)機轉(zhuǎn)換

Attached:USB設備接入或拔出,USB協(xié)議規(guī)范只定義了USB設備接入時的狀態(tài);

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

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

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

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

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

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

3. 總線枚舉

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

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

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

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

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

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

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

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

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



評論


技術(shù)專區(qū)

關(guān)閉