新聞中心

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

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

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


3 UDC的設(shè)計(jì)與

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

3.1 數(shù)據(jù)結(jié)構(gòu)定義

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

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

3.2 Gadget Driver接口模塊

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

3.3 Gadget API函數(shù)模塊

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



該模塊主要Gadget API定義的函數(shù)功能,如結(jié)構(gòu)體usb_ep_ops和usb_gadget_ops中的函數(shù),以及usb_gadget_register_driver注冊(cè)函數(shù)等。這些函數(shù)可供Gadget Driver調(diào)用。

3.4 中斷處理模塊

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

3.5 初始化模塊

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

3.6 硬件讀寫(xiě)模塊

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

4 驅(qū)動(dòng)測(cè)試結(jié)果

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



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

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



5 結(jié)束語(yǔ)

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

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

評(píng)論


相關(guān)推薦

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

關(guān)閉