<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > Linux2.6環(huán)境下USB設備的驅動(dòng)實(shí)現

Linux2.6環(huán)境下USB設備的驅動(dòng)實(shí)現

作者: 時(shí)間:2010-04-09 來(lái)源:網(wǎng)絡(luò ) 收藏


3 UDC的設計與

控制器主要分為Gadget Driver接口模塊、Gadget API函數模塊、中斷處理模塊、數據結構定義、初始化模塊、硬件讀寫(xiě)模塊等,各模塊可以單獨進(jìn)行設計。

3.1 數據結構定義

根據Gadget API提供的數據結構,可以定義自己的數據結構(如數據結構otg_udc,端點(diǎn)數據結構otg_udc_ep等)來(lái)描述該控制器。

定義完特定的設備控制器的數據結構后,再進(jìn)行相應的映射(static struct otg_ip_udcmemory),以便將具體的設備控制器、設備端點(diǎn)和Gadget的抽象數據結構聯(lián)系起來(lái)。

3.2 Gadget Driver接口模塊

UDC提供有usb_gadget_driver_register模塊,該模塊可實(shí)usb_gadget_register_driver等綁定函數的功能,以綁定UDC和Gadget Driver。

3.3 Gadget API函數模塊

Linux gadget driver API定義了一個(gè)通用的gadget driver的接口,利用gadget driver可通過(guò)API與底層 controller driver進(jìn)行通信。該API屏蔽了底層硬件的不同,故可使gadget driver只注重功能的,而盡量與硬件無(wú)關(guān)。其代碼如下:



該模塊主要Gadget API定義的函數功能,如結構體usb_ep_ops和usb_gadget_ops中的函數,以及usb_gadget_register_driver注冊函數等。這些函數可供Gadget Driver調用。

3.4 中斷處理模塊

由于設備是被動(dòng)的接受主機的控制,設備的所有行為都是基于設備中斷的觸發(fā),因此,函數主要處理Reset中斷、Resume中斷、Suspend中斷、EP0中斷以及其他端口中斷。

3.5 初始化模塊

初始化主要是打開(kāi)中斷、打開(kāi)并設置端點(diǎn)、設置最大總線(xiàn)轉向時(shí)間(此時(shí)問(wèn)即包間最大等待時(shí)間),還要設置最大緩沖區長(cháng)度等。

3.6 硬件讀寫(xiě)模塊

和主機控制器驅動(dòng)程序類(lèi)似,設備控制器的讀寫(xiě)方式分為PIO讀寫(xiě)和DMA讀寫(xiě)兩種模式,讀寫(xiě)內容也分為寄存器讀寫(xiě)和端點(diǎn)緩沖區讀寫(xiě)。在讀寫(xiě)過(guò)程中,所有讀寫(xiě)地址都必須是雙字節對齊模式。

4 驅動(dòng)測試結果

本文研究的HCD已經(jīng)應用于實(shí)際的工程中,驅動(dòng)測試的硬件如圖4所示。



本系統的硬件平臺是Realview EB,這是一個(gè)高度集成的開(kāi)發(fā)板,其母板上的硬件資源包括:一個(gè)FPGA (Xilinx Virtex-II XC2V6000)、靜態(tài)和動(dòng)態(tài)內存、集成外圍設備和兩個(gè)用于Core Tiles連接的tile連接器。設計時(shí)可通過(guò)增加一個(gè)額外的Core Tile(ARM926EJS CORE)來(lái)創(chuàng )建一個(gè)微處理系統。Logic Tile(Xilinx XC2V6000)中包含有一塊具有主機控制器功能的芯片otg_ip,otg_ip可通過(guò)片內總線(xiàn)AHB掛載在母板EB上。在該開(kāi)發(fā)板上運行Linux系統時(shí),可通過(guò)交叉編譯調試將開(kāi)發(fā)報與一臺PC機相連,這樣,調試信息就可以通過(guò)串口打印在該主機的終端上。otg_ip可通過(guò)ULPI接口連接PHY芯片,并與USB設備相連。

設備控制器驅動(dòng)模塊otg_ip_udc.ko和g_filestorage.ko成功加載后,再將其作為移動(dòng)優(yōu)盤(pán)插入電腦主機的USB接口,驅動(dòng)即可成功識別。圖5所示是內核打印的信息結果。



5 結束語(yǔ)

USB通用串行總線(xiàn)具有傳輸速率高、功耗低、可熱插拔和發(fā)展快速等優(yōu)點(diǎn),而Linus操作系統則具有易于移植和裁減、內核小、效率高、原代碼開(kāi)放等特點(diǎn),本文通過(guò)將其結合而給出的Linux下的USB設備驅動(dòng)方法,可以快速地實(shí)現大容量的存儲功能,實(shí)驗表明:該系統的數據讀寫(xiě)速度可以達到681 kB/s,而且效果良好。

上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>