




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
嵌入式電子工程師2第四章USB驅(qū)動34.1USB驅(qū)動層次結(jié)構(gòu)4課程目的了解USB驅(qū)動發(fā)展概況掌握USB驅(qū)動編譯掌握USB驅(qū)動架構(gòu)掌握USB驅(qū)動結(jié)構(gòu)體5課程內(nèi)容
USB驅(qū)動發(fā)展概況USB驅(qū)動編譯USB驅(qū)動架構(gòu)USB驅(qū)動結(jié)構(gòu)體64.1.1
USB驅(qū)動編譯7USB驅(qū)動編譯在講解USB驅(qū)動之前我們先感性認識USB驅(qū)動,首先我們編譯并安裝USB驅(qū)動進入linux源碼目錄運行命令makemenuconfig8USB驅(qū)動編譯9USB驅(qū)動編譯10USB驅(qū)動編譯11USB驅(qū)動編譯12USB驅(qū)動編譯13USB驅(qū)動編譯如果第一次編譯內(nèi)核,需要先執(zhí)行命令:makedep然后編譯內(nèi)核,執(zhí)行命令:makebzImage編譯模塊,執(zhí)行命令:makemodules14USB驅(qū)動編譯打開串口,進入vivi,將內(nèi)核燒錄到實驗箱上vivi〉loadflashkernelx燒錄完成后,啟動內(nèi)核,掛載NFS服務器拷貝linux源碼目錄中的drivers/usb/storage/usb-storage.o到開發(fā)板上15USB驅(qū)動編譯插入U盤觀察串口輸出插入USB大容量存儲驅(qū)動,使用命令:insmodusb-storage.olsmod察看再次插入U盤,觀察串口輸出使用命令mount/dev/scsi/host0/bus0/target0/lun0/part1/usr或者mount/dev/scsi/host0/bus0/target0/lun0/disc/usr16USB驅(qū)動編譯察看U盤內(nèi)容,執(zhí)行命令:ls/usr174.1.2
什么是USB接口18一、USB接口定義
USB是英文“Universal
Serial
Bus”的縮寫,意為“通用串行總線”。是由Compaq(康柏)、DEC、IBM、Intel、NEC、微軟以及Northern
(北方電訊)等公司于1994年11月共同提出的,主要目的就是為了解決接口標準太多的弊端USB使用一個4針插頭作為標準插頭,并通過這個標準接頭,采用菊花瓣形式把所有外設(shè)連接起來,它采用串行方式傳輸數(shù)據(jù),目前最大數(shù)據(jù)傳輸率為12Mbps,
支持多數(shù)據(jù)流和多個設(shè)備并行操作,允許外設(shè)熱插拔19目前USB接口雖然只發(fā)展了2代(USB1.0/1.1,USB2.0),但是USB綜合了一個多平臺標準的所有優(yōu)點
--
包括降低成本,增加兼容性,可連接大量的外部設(shè)備,融合先進的功能和品質(zhì)。使其逐步成為PC接口標準,進入了高速發(fā)展期。
204.1.3
USB拓撲結(jié)構(gòu)21USB拓撲結(jié)構(gòu)一個USB系統(tǒng)由一個USB主機、一個或多個USB集線器和一個或多個USB設(shè)備節(jié)點組成。在USB總線上,USB會為每個連接在USB設(shè)備分配一個地址,USB主機通過設(shè)備地址訪問相關(guān)的設(shè)備USB總線連接了USB設(shè)備和USB主機,USB的物理連接是由層次性的星型結(jié)構(gòu)集線器能夠增加外設(shè)的端口數(shù)22USB拓撲結(jié)構(gòu)在任何USB系統(tǒng)中僅有一臺主機(Host)。主機系統(tǒng)中的USB接口稱為主機控制器USB主機通過主機控制器與USB設(shè)備進行交互。USB主機負責的任務包括:檢測USB設(shè)備的連接和拆除管理主機和USB設(shè)備之間的控制流管理主機和USB設(shè)備之間的數(shù)據(jù)流收集狀態(tài)和活動的統(tǒng)計為連接的USB設(shè)備提供電源23USB拓撲結(jié)構(gòu)244.1.4USB驅(qū)動層次25USB驅(qū)動層次Linux中的USB驅(qū)動分為兩部分,一部分為設(shè)備端驅(qū)動,一部分為控制器端驅(qū)動。之所以USB驅(qū)動需要分為設(shè)備端和主控制端是因為USB本身分為USB從設(shè)備和USB主設(shè)備。USB設(shè)備端驅(qū)動主要用于linux運行在USB設(shè)備中,比如運行l(wèi)inux的手機大多數(shù)可以作為U盤連接到電腦交換數(shù)據(jù)。USB主控制端驅(qū)動用于連接USB設(shè)備的的主機中,比如安裝了linux的電腦。26USB驅(qū)動層次27USB驅(qū)動層次對于USB設(shè)備端驅(qū)動一般都固化在USB設(shè)備中,有制造USB設(shè)備的廠家提供。我們這里主要探討USB主控制器端的驅(qū)動。28USB驅(qū)動層次29USB驅(qū)動層次HostControlDriver位于USB主控制器端驅(qū)動的最底層,它對硬件進行了抽象,向上提供操作USB控制器接口,這一層在linux2.6中被單獨放在host目錄中,主要用于處理各大廠商USB控制器的不同之處,當把USB驅(qū)動移植到一個新的平臺時需要完成這個驅(qū)動程序。30USB驅(qū)動層次31USB驅(qū)動層次USBCore屬于設(shè)備無關(guān)層,不需要做任何修改,在這個層次中主要完成定義關(guān)鍵數(shù)據(jù)結(jié)構(gòu)、宏和功能函數(shù),USB協(xié)議轉(zhuǎn)換等核心操作。USBCore在整個USB驅(qū)動中處于核心地位,向下控制USB控制器的數(shù)據(jù)傳輸,向上支持各種各樣的USB設(shè)備。USBDriver對應各種特定的USB設(shè)備,比如U盤,USB鍵盤,USB音箱等,USBDriver使用USBCore提供的服務完成USB設(shè)備的最終驅(qū)動。32USB驅(qū)動層次33USB驅(qū)動層次USBdriver與最終的具體USB設(shè)備一一對應。例如USB鍵盤,U盤,USB音箱等USB開發(fā)主要集中在此層次中344.1.3
USB設(shè)備邏輯層次35USB設(shè)備邏輯層次在USB設(shè)備的邏輯組織中,包含設(shè)備、配置、接口、端點4個層次36USB設(shè)備邏輯層次37設(shè)備描述符這里設(shè)備指的是USBdevice指物理上不可分離的一個整體,比如一個帶音箱的鍵盤這是一個整體的概念,并不與具體USB設(shè)備對應38設(shè)備描述符設(shè)備描述符:關(guān)于設(shè)備的通用信息,如供應商的ID、產(chǎn)品ID、修訂ID等設(shè)備描述符使用usb_device_descriptor結(jié)構(gòu)體進行描述usb_device_descriptor結(jié)構(gòu)體在\include\linux\usb\ch9.h中39設(shè)備描述符40USB設(shè)備邏輯層次41USB設(shè)備邏輯層次每個USB設(shè)備都提供了不同級別的配置信息。可以包含一個或多個配置信息,不同的配置使設(shè)備表現(xiàn)出不同的功能組合,配置由多個接口組成42USB設(shè)備邏輯層次配置描述符主要用來描述接口數(shù)、支持的掛起和恢復能力以及功率要求USB配置描述符由結(jié)構(gòu)體usb_config_descriptor表示結(jié)構(gòu)usb_config_descriptor在\include\linux\usb\ch9.h中43USB設(shè)備邏輯層次44USB設(shè)備邏輯層次45USB設(shè)備邏輯層次接口與USBdriver一一對應,一個接口代表一個USB功能,有的USB設(shè)備可能有多個接口,比如一個USB鍵盤上有一個小音箱,這個USB設(shè)備就要包含USB鍵盤和USB音箱兩個接口。接口由多個端點構(gòu)成46USB設(shè)備邏輯層次接口描述符:接口類、子類和適用的協(xié)議,接口備用配置的數(shù)目和端點數(shù)目USB接口描述符由結(jié)構(gòu)體usb_interface_descriptor描述結(jié)構(gòu)體usb_interface_descriptor定義在\include\linux\usb\ch9.h中47USB設(shè)備邏輯層次48USB設(shè)備邏輯層次49USB設(shè)備邏輯層次端點是USB數(shù)據(jù)傳輸?shù)淖罨拘问?,主機只能通過端點與USB設(shè)備進行通訊。在USB設(shè)備中每個端點都是在出廠前就設(shè)置好的,而且端點數(shù)的多少是衡量一個USB設(shè)備的重要標準。在USB系統(tǒng)中每個端點都有唯一的地址,這是有設(shè)備地址和端點號給出的,每個端點都有一定的屬性,一個USB端點只能在一個方向承載數(shù)據(jù),因此端點可看作一個單向的通道。端點0默認作為控制端點,所有的USB設(shè)備都要實現(xiàn)端點0。當USB設(shè)備連接到USB控制器以后,USB控制器會向USB設(shè)備的端點0發(fā)送配置信息完成對USB設(shè)備的枚舉。50USB設(shè)備邏輯層次一個USB端點只能在一個方向承載數(shù)據(jù),或者從主機到設(shè)備(稱為輸出端點)或者從設(shè)備到主機(稱為輸入端點)端點可看作一個單向的管道,因此一個具有輸入輸出的USB設(shè)備(如U盤)至少要實現(xiàn)三個端點,即0號控制端點、輸入端點、輸出端點。51USB設(shè)備邏輯層次端點描述符:端點地址、方向和類型,如果是中斷類型的端點則還包括輪詢頻率端點描述符使用結(jié)構(gòu)體usb_endpoint_descriptor進行描述結(jié)構(gòu)體usb_endpoint_descriptor定義在\include\linux\usb\ch9.h中52USB設(shè)備邏輯層次534.1.4
USB傳輸類型54USB傳輸類型USB端點有4種類型,用來描述數(shù)據(jù)如何被傳送控制端點中斷端點塊端點同步端點55控制端點控制端點被用來允許對USB設(shè)備的不同部分存取。通常用作配置設(shè)備,獲取關(guān)于設(shè)備的信息,發(fā)送命令到設(shè)備,或者獲取關(guān)于設(shè)備的狀態(tài)報告??刂贫它c在尺寸上常常較?。ㄖ敢淮慰蓚魉偷淖址^少)。每個USB設(shè)備有一個控制端點稱為“端點0”,被USBCore用來在插入時配置設(shè)備。這些傳送由USB協(xié)議保證來總有足夠的帶寬使它到達設(shè)備。56中斷端點中斷端點傳送小量的數(shù)據(jù),在每次USB主請求設(shè)備數(shù)據(jù)時,以固定的速率傳送中斷端點傳送對USB鍵盤和鼠標來說是主要的傳送方法中斷端點傳送還用來傳送數(shù)據(jù)到USB設(shè)備來控制設(shè)備,但通常不用來傳送大量數(shù)據(jù)中斷端點傳送由USB協(xié)議保證來總有足夠的帶寬使它到達設(shè)備57塊端點塊端點傳送大量的數(shù)據(jù),這些端點常常比中斷端點大(它們一次可持有更多的字符)。塊端點主要用于傳送不能有任何數(shù)據(jù)丟失的數(shù)據(jù)。這些傳送不被USB協(xié)議保證來一直使它在特定時間范圍內(nèi)完成。如果總線上沒有足夠的空間來發(fā)送整個BULK報文,它被分為多次傳送到或者從設(shè)備。塊端點普遍在打印機,存儲器和網(wǎng)絡設(shè)備上。58同步端點同步端點也傳送大量數(shù)據(jù),但是這個數(shù)據(jù)常常不被保證它完成同步端點用在可以處理數(shù)據(jù)丟失的設(shè)備中,并且更多依賴于保持持續(xù)的數(shù)據(jù)流同步端點主要用于實時數(shù)據(jù)收集,例如音頻和視頻設(shè)備,一直都使用這些端點。594.1.5
device、bus、driver60Linux設(shè)備模型Linux設(shè)備模型中三個很重要的概念就是總線、設(shè)備、驅(qū)動即bus、device、driverLinux內(nèi)核中實際定義了這么一些數(shù)據(jù)結(jié)構(gòu)structbus_typestructdevicestructdevice_driver這三個重要的數(shù)據(jù)結(jié)構(gòu)都來自一個地方include/linux/device.h61總線、設(shè)備、驅(qū)動structbus_type中為devices和drivers準備了兩個鏈表代表device的結(jié)構(gòu)體structdevice中有兩個成員structbus_type*bus和structdevice_driver*driver代表driver的結(jié)構(gòu)體structdevice_driver同樣有兩個成員structbus_type*buf和structdevice*device三者互相關(guān)聯(lián),知道一個結(jié)構(gòu)體可以迅速找到其他兩個62總線、設(shè)備、驅(qū)動busdriverdevice63USB總線、設(shè)備、驅(qū)動USB總線、設(shè)備、驅(qū)動三者的關(guān)系與普通驅(qū)動相同usbcore的代碼進行整個USB系統(tǒng)的初始化,比如申請strcutbus_typeusb_bus_type,然后會掃描usb總線,看線上連接了哪些設(shè)備,最終把usb_bus_type中的devices鏈表建立起來對于drivers鏈表,就不需要bus方面主動了,當每個driver模塊加載時,driver本身去bus上面登記644.1.5
USBdriver65USBdriver在linux內(nèi)核中,適用一個usb_d
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 北京鏈家購房合同范本
- 產(chǎn)品攝影廣告合同范例
- 劇目買斷合同范本
- 融資收費合同范本
- 勞動合同范本解除
- 單位車輛外包服務合同范本
- 分期出租房合同范本
- 醫(yī)療服務協(xié)議合同范本
- 單位招聘保安合同范本
- 分項付款合同范本
- PySide學習教程
- 數(shù)據(jù)結(jié)構(gòu)英文教學課件:chapter1 Introduction
- 人教三年級數(shù)學下冊表格式全冊
- 事業(yè)單位綜合基礎(chǔ)知識考試題庫 綜合基礎(chǔ)知識考試題庫.doc
- 優(yōu)秀教研組評比制度及實施細則
- 譯林初中英語教材目錄
- 物業(yè)交付后工程維修工作機制
- 農(nóng)作物病蟲害專業(yè)化統(tǒng)防統(tǒng)治管理辦法
- JJF 1752-2019全自動封閉型發(fā)光免疫分析儀校準規(guī)范(高清版)
- GB 1886.300-2018 食品安全國家標準 食品添加劑 離子交換樹脂(高清版)
- 食品經(jīng)營單位經(jīng)營場所和設(shè)備布局、操作流程示意圖模板
評論
0/150
提交評論