新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > Linux2.6環境下USB設備的驅動實現

        Linux2.6環境下USB設備的驅動實現

        作者: 時間:2010-04-09 來源:網絡 收藏


        3 UDC的設計與

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

        3.1 數據結構定義

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

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

        3.2 Gadget Driver接口模塊

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

        3.3 Gadget API函數模塊

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



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

        3.4 中斷處理模塊

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

        3.5 初始化模塊

        初始化主要是打開中斷、打開并設置端點、設置最大總線轉向時間(此時問即包間最大等待時間),還要設置最大緩沖區長度等。

        3.6 硬件讀寫模塊

        和主機控制器驅動程序類似,設備控制器的讀寫方式分為PIO讀寫和DMA讀寫兩種模式,讀寫內容也分為寄存器讀寫和端點緩沖區讀寫。在讀寫過程中,所有讀寫地址都必須是雙字節對齊模式。

        4 驅動測試結果

        本文研究的HCD已經應用于實際的工程中,驅動測試的硬件如圖4所示。



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

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



        5 結束語

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

        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 金华市| 广元市| 盘锦市| 宁阳县| 巴彦县| 织金县| 松溪县| 桐梓县| 宜兰县| 无锡市| 韶山市| 崇信县| 平湖市| 隆回县| 达州市| 来宾市| 九龙坡区| 资阳市| 乐山市| 原阳县| 常熟市| 大宁县| 刚察县| 苍溪县| 凤台县| 台北市| 资中县| 安吉县| 曲麻莱县| 东方市| 临汾市| 新田县| 靖宇县| 麟游县| 兖州市| 夏河县| 阜阳市| 义马市| 仪陇县| 蓬安县| 久治县|