引入:當咱們把一個USB設備接入PC機時,會出現什麼樣的現象?android
現象:把USB設備接到PC
1.右下角彈出「發現android phone」
2.跳出一個對話框,提示你安裝驅動程序app
首先來看一下,USB驅動程序的框架:框架
USB驅動程序框架:
app:
------------------------------------------------
USB設備驅動程序
內核---------------------------------------
USB總線驅動程序(這部分不須要太關心)
------------------------------------------------
USB主機控制器
硬件 -------------
USB設備函數
問1. 既然尚未驅動程序,爲什麼能知道是"android phone"
答1. widows裏已經有了USB的總線驅動程序,接入USB設備後,是"總線驅動程序"知道你是"android phone"
提示你安裝的是"設備驅動程序"
USB總線驅動程序負責:識別USB設備,給USB設備找到對應的驅動程序。spa
問2. USB設備種類很是多,爲何一接入電腦,就能識別出來?
答2. PC和USB設備都得遵照一些規範。
好比:USB設備接入電腦後,PC機會發出"你是什麼"?
USB設備就必須回答"我是xxx",而且回答的語言必須相同。
USB總線驅動程序會發出某些命令想獲取設備信息(描述符),
USB設備必須返回"描述符"給PC3d
問3. PC機上接有不少的USB設備,怎麼分辨它們?
USB接口只有4條線:5v,GND,D-,D+
答3. 每個USB設備接入PC時,USB總線驅動程序都會給它分配一個編號
接在USB總線上的每個USB設備都有本身的編號(地址)
PC機想訪問某個USB設備時,發出的命令都含有對應的編號(地址)對象
問4. USB設備剛接入PC時,尚未編號,那麼PC怎麼把"分配的編號"告訴它?
答4. 新接入的USB設備的默認編號是0,在未分配新編號前,PC使用0編號和它通訊。blog
問5. 爲何一接入USB設備,PC機就能發現它?
答5. PC的USB口內部,D-和D+接有15k的下拉電阻,未接USB設備時爲低電平。
USB設備的USB口內部,D-或D+接有1.5k的上拉電阻,它一接入PC,就會把PC USB口的D-或D+拉高,從硬件的角度通知PC有新設備接入了。接口
其餘概念:
1. USB 是主從結構的
全部的USB傳輸,都是從USB主機這邊發起,USB設備沒有"主動"通知USB主機的能力
例子:USB鼠標滑動一下馬上產生數據,可是它沒有能力通知PC機來讀數據,只能被動地等待PC機來讀。硬件
2. USB的傳輸類型:
a. 控制傳輸:可靠,時間有保證,好比USB設備的識別過程
b. 批量傳輸:可靠,時間沒有保證,好比U盤
c. 中斷傳輸:實時,可靠,好比USB鼠標
d. 實時傳輸:實時,不可靠(偶爾花屏),好比USB攝像頭
注意:USB設備沒有主動通知PC機的能力,那你爲何能發起中斷傳輸,這個地方只是藉助中斷的概念而已,
它是沒有中斷能力的,它是利用查詢方式來實現這個實時性的。
3. USB傳輸的對象:端點(endpoint)
咱們說讀U盤,寫U盤,能夠細化爲:把數據寫到U盤的端點1,從U盤的端點2裏讀出數據
除了端點0外,每一個端點只支持一個方向的數據傳輸。
端點0用於控制傳輸,既能輸出也能輸入
4. 每個端點都有傳輸類型,傳輸方向
5. 術語裏、程序裏說的輸入(IN)、輸出(out)都是基於USB主機的立場說的
好比鼠標的數據是從鼠標傳到PC機,對應的端點稱爲輸入端點
6. USB總線驅動程序的做用
a. 識別USB設備
b. 查找並安裝對應的設備驅動程序
c. 提供USB讀寫函數(它並不知道數據的含義,只是給你提供讀寫方法,而設備驅動知道數據的含義)