Linux USB 驱动开发(一)—— USB设备基础概念【转】
本文轉載自:http://blog.csdn.net/zqixiao_09/article/details/50984074
? 在終端用戶看來,USB設備為主機提供了多種多樣的附加功能,如文件傳輸,聲音播放等,但對USB主機來說,它與所有USB設備的接口都是一致的。一個USB設備由3個功能模塊組成:USB總線接口、USB邏輯設備和功能單元:
a -- 這里的USB總線接口指的是USB設備中的串行接口引擎(SIE);
b -- USB邏輯設備被USB系統(tǒng)軟件看作是一個端點的集合;
c --?功能單元被客戶軟件看作是一個接口的集合。SIE、端點和接口都是USB設備的組成單元;
?
? ? ? ? 為了更好地描述USB設備的特征,USB提出了設備架構的概念。從這個角度來看,可以認為USB設備是由一些配置、接口和端點組成,即一個USB設備可以含有一個或多個配置,在每個配置中可含有一個或多個接口,在每個接口中可含有若干個端點。其中,配置和接口是對USB設備功能的抽象,實際的數(shù)據(jù)傳輸由端點來完成。在使用USB設備前,必須指明其采用的配置和接口。這個步驟一般是在設備接入主機時設備進行枚舉時完成的
這些單元之間的關系如下:
?
設備通常有一個或多個配置;
配置通常有一個或多個接口;
接口通常有一個或多個設置;
接口有零或多個端點。
?
? ? ? ?這樣的概念太抽象了,可以這樣看:有一個設備,如支持視頻和音頻的一個播放器。那么,對于上面提到的4個描述符,對它們設置的時候,它們分別對于哪一個描述符呢? ?
? ? ? 從我現(xiàn)在的理解來看,這樣一個設備對應一個設備描述符,支持視頻的功能對應一個接口描述符,支持音頻功能的對應一個接口描述符。為了支持視頻,在下層有多個端口同時工作為提供視頻數(shù)據(jù)傳輸?shù)闹С?#xff0c;所以有多個端點描述符。
? ? ? USB設備使用各種描述符來說明其設備架構,包括設備描述符、配置描述符、接口描述符、端點描述符和字符串描述符,他們通常被保存在USB設備的固件程序中。
1、設備描述符
? ? ? 設備代表一個USB設備,它由一個或多個配置組成。設備描述符用于說明設備的總體信息,并指明其所含的配置的個數(shù)。一個USB設備只能有一個設備描述符。
[cpp]?view plaincopy?
?
?
2、配置描述符
? ? ? ?一個USB設備可以包含一個或多個配置,如USB設備的低功耗模式和高功耗模式可分別對應一個配置。在使用USB設備前,必須為其選擇一個合適的配置。配置描述符用于說明USB設備中各個配置的特性,如配置所含接口的個數(shù)等。USB設備的每一個配置都必須有一個配置描述符。
[cpp]?view plaincopy?
?
3、接口描述符
? ? ? 一個配置可以包含一個或多個接口,例如對一個光驅來說,當用于文件傳輸時,使用其大容量存儲接口;而當用于播放CD時,使用其音頻接口。接口是端點的集合,可以包含一個或多個可替換設置,用戶能夠在USB處于配置狀態(tài)時改變當前接口所含的個數(shù)和特性。接口描述符用于說明設備中各個接口的特性,如接口所屬的設備類及其子類等。USB設備的每個接口都必須有一個接口描述符
[cpp]?view plaincopy?
?
4、端點描述符
?
? ? ? 端點是USB設備中的實際物理單元,USB數(shù)據(jù)傳輸就是在主機和USB設備各個端點之間進行的。端點一般由USB接口芯片提供,例如Freescale公司的MC68HC908JB8和MC9S12UF32。USB設備中的每一個端點都有唯一的端點號,每個端點所支持的數(shù)據(jù)傳輸方向一般而言也是確定的:或是輸入(IN),或是輸出(OUT)。也有些芯片提供的端點的數(shù)據(jù)方向是可以配置的,例如MC68HC908JB8包含有兩個用于數(shù)據(jù)收發(fā)的端點:端點1和端點2。其中端點1只能用于數(shù)據(jù)發(fā)送,即支持輸入(IN)操作;端點2既能用于數(shù)據(jù)發(fā)送,也可用于數(shù)據(jù)接收,即支持輸入(IN)和輸出(OUT)操作。而MC9S12UF32具有6個端點。
? ? ?利用設備地址、端點號和傳輸方向就可以指定一個端點,并與它進行通信。端點的傳輸特性還決定了其與主機通信是所采用的傳輸類型,例如控制端點只能使用控制傳輸。根據(jù)端點的不同用途,可將端點分為兩類:0號端點和非0號端點。
? ? ??0號端點比較特殊,它有數(shù)據(jù)輸入IN和數(shù)據(jù)輸出OUT兩個物理單元,且只能支持控制傳輸。所有的USB設備都必須含有一個0號端點,用作默認控制管道。USB系統(tǒng)軟件就是使用該管道與USB邏輯設備進行配置通信的。0號端點在USB設備上的以后就可以使用,而非0號端點必須要在配置以后才可以使用。
? ? ?根據(jù)具體應用的需要,USB設備還可以含有多個除0號端點以外的其他端點。對于低速設備,其附加的端點數(shù)最多為2個;對于全速/高速設備,其附加的端點數(shù)最多為15個。
[cpp]?view plaincopy?
?
?
5、字符串描述符
? ? ? 在USB設備中通常還含有字符串描述符,以說明一些專用信息,如制造商的名稱、設備的序列號等。它的內(nèi)容以UNICODE的形式給出,且可以被客戶軟件所讀取。對USB設備來說,字符串描述符是可選的。
[cpp]?view plaincopy?
?
?
6、管道
? ? ? 在USB系統(tǒng)結構中,可以認為數(shù)據(jù)傳輸時在USB主機軟件與USB設備的各個端點之間直接進行的,它們之間的連接稱為管道。管道是在USB設備的配置過程中建立的。管道是對USB主機與USB設備間通信流的抽象,表示USB主機的數(shù)據(jù)緩沖區(qū)與USB設備的端點之間存在著邏輯數(shù)據(jù)傳輸,而實際的數(shù)據(jù)傳輸是由USB總線接口層來完成的。
? ? ?管道與USB設備中的端點一一對應。一個USB設備含有多少個端點,其與USB主機進行通信時就可以使用多少條管道,且端點的類型決定了管道中數(shù)據(jù)的傳輸類型,例如中斷端點對應中斷管道,且該管道只能進行中斷傳輸。不論存在著多少條管道,在各個管道中進行的數(shù)據(jù)傳輸都是相互獨立的。
?
7、USB端點分類
? ? ? USB 通訊的最基本形式是通過端點。一個USB端點只能向一個方向傳輸數(shù)據(jù)(從主機到設備(稱為輸出端點)或者從設備到主機(稱為輸入端點))。端點可被看作一個單向的管道。
? ? ?USB 端點有 4 種不同類型, 分別具有不同的數(shù)據(jù)傳送方式:
1) 控制CONTROL?
? ? 控制端點被用來控制對USB設備的不同部分訪問. 通常用作配置設備、獲取設備信息、發(fā)送命令到設備或獲取設備狀態(tài)報告。這些端點通常較小。每個 USB 設備都有一個控制端點稱為"端點 0", 被 USB 核心用來在插入時配置設備。USB協(xié)議保證總有足夠的帶寬留給控制端點傳送數(shù)據(jù)到設備.
2) 中斷INTERRUPT?
? ? ?每當 USB 主機向設備請求數(shù)據(jù)時,中斷端點以固定的速率傳送小量的數(shù)據(jù)。此為USB 鍵盤和鼠標的主要的數(shù)據(jù)傳送方法。它還用以傳送數(shù)據(jù)到USB設備來控制設備。通常不用來傳送大量數(shù)據(jù)。USB協(xié)議保證總有足夠的帶寬留給中斷端點傳送數(shù)據(jù)到設備.
3) 批量BULK
? ? 批量端點用以傳送大量數(shù)據(jù)。這些端點通常比中斷端點大得多. 它們普遍用于不能有任何數(shù)據(jù)丟失的情況。USB 協(xié)議不保證傳輸在特定時間范圍內(nèi)完成。如果總線上沒有足夠的空間來發(fā)送整個BULK包,它被分為多個包進行傳輸。這些端點普遍用于打印機、USB Mass Storage和USB網(wǎng)絡設備上。
4) 等時ISOCHRONOUS?
? ? 等時端點也批量傳送大量數(shù)據(jù), 但是這個數(shù)據(jù)不被保證能送達。這些端點用在可以處理數(shù)據(jù)丟失的設備中,并且更多依賴于保持持續(xù)的數(shù)據(jù)流。如音頻和視頻設備等等。
? ? 控制和批量端點用于異步數(shù)據(jù)傳送,而中斷和等時端點是周期性的。這意味著這些端點被設置來在固定的時間連續(xù)傳送數(shù)據(jù),USB 核心為它們保留了相應的帶寬。
?
[cpp]?view plaincopy?
? ? ?當調用USB設備驅動調用usb_submit_urb提交urb請求時,將調用int usb_hcd_link_urb_to_ep(struct usb_hcd *hcd, struct urb *urb)把此urb增加到urb_list的尾巴上。(hcd: Host Controller Driver,對應數(shù)據(jù)結構struct usb_hcd )
《新程序員》:云原生和全面數(shù)字化實踐50位技術專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的Linux USB 驱动开发(一)—— USB设备基础概念【转】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows 10小娜只显示文字而不发
- 下一篇: vue.js环境安装