Linux2.6環(huán)境下USB設備的驅動(dòng)實(shí)現
3 UDC的設計與實(shí)現
設備控制器驅動(dòng)主要分為Gadget Driver接口模塊、Gadget API函數模塊、中斷處理模塊、數據結構定義、初始化模塊、硬件讀寫(xiě)模塊等,各模塊可以單獨進(jìn)行設計。
3.1 數據結構定義
根據Gadget API提供的數據結構,可以定義自己的數據結構(如設備數據結構otg_udc,端點(diǎn)數據結構otg_udc_ep等)來(lái)描述該USB設備控制器。
定義完特定的設備控制器驅動(dòng)的數據結構后,再進(jìn)行相應的映射(static struct otg_ip_udcmemory),以便將具體的設備控制器、設備端點(diǎn)和Gadget的抽象數據結構聯(lián)系起來(lái)。
3.2 Gadget Driver接口模塊
UDC驅動(dòng)提供有usb_gadget_driver_register模塊,該模塊可實(shí)usb_gadget_register_driver等綁定函數的功能,以綁定UDC和Gadget Driver。
3.3 Gadget API函數模塊
Linux USB gadget driver API定義了一個(gè)通用的gadget driver的接口,利用gadget driver可通過(guò)API與底層USB controller driver進(jìn)行通信。該API屏蔽了底層硬件的不同,故可使gadget driver只注重功能的實(shí)現,而盡量與硬件無(wú)關(guān)。其代碼如下:

該模塊主要實(shí)現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)測試的硬件環(huán)境如圖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ò)交叉編譯調試環(huán)境將開(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環(huán)境下的USB設備驅動(dòng)方法,可以快速地實(shí)現大容量的存儲功能,實(shí)驗表明:該系統的數據讀寫(xiě)速度可以達到681 kB/s,而且效果良好。
評論