新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于VxW0rks操作系統的USB 2.0驅動分析

        基于VxW0rks操作系統的USB 2.0驅動分析

        作者: 時間:2008-04-01 來源: 收藏

          引 言

        本文引用地址:http://www.104case.com/article/81004.htm

          (universal setial bus)是一種計算機外圍串行通信接口,具有高速數據傳輸、熱插拔、即插即用(PnP)、成本低等特點。隨著USB規范的日趨完善和成熟,測量儀器中也已經開始使用LISB作為其標準的外圍接口。VxWorks操作系統以其良好的可靠性和卓越的實時性在儀器儀表領域得到了廣泛應用,本文針對Vx-works操作系統下最新的USB 2.O驅動程序進行了分析,為基于VxWorks的儀器儀表使用USB 2.0總線提供了技術參考,并結合作者開發某儀器過程中遇到的問題,給出了使用注意事項。

          1 USB 2.0驅動程序模型結構

          USB體系結構是基于主從結構的,USB的驅動程序設計指的是主機端的驅動程序。圖1給出了VxWorks操作系統下USB主驅動棧各模塊之間的功能關系。

          在棧最底層的是硬件:USB主控制器(USB host con-troller),USB主控制器在嵌入式主機系統中控制USB,實現USB主機功能。目前,USB控制器主要有3類:

          (1)(UHCI,universal host controlle interface)通用的主控制器,由Intel最先設計并制定相應規范;

          (2)(OHCI,open host controller interface)開放的主控制器,由Microsoft,C2ompaq和National Semicondtlctor最先設計并制定相應規范;

          (3)(EHCI,enhanced host controller interface)增強的主控制器,該控制器支持USB2.O。

          每一主控制器在其上都有相對應的主控制器驅動程序(HCD),這些設備驅動程序與底層的硬件相關,為上層提供統一的功能接口。

          USB主機驅動(USBD)與底層硬件無關,通過HCD與底層控制器通信。USBD管理連接到主機上的每一個USB連接,并提供高層與USB設備通信的通道。除此之外,USB[)還自動對USB設備進行電源管理和分配帶寬。在USB系統中,集線器(HUB)對USB系統的正常操作起到關鍵性作用,因此USBD直接對集線器進行控制。這就意味著USBD還具有控制USB設備和集線器動態插拔的能力。

          在主機棧的最頂層是USB設備驅動程序。設備驅動程序依賴USBD提供的通信通道,驅動連接到USB系統中的USB設備。

          OSAL為LJSB主機棧提供了與VxWorks操作系統相關的操作,包括任務管理、互斥及信號燈、內存分配以及系統時鐘。

          通過圖1的結構,可以看出USB主機棧的設計關鍵是USB主機驅動(USBD)的設計,USBD為USB設備驅動程序提供標準的USBD API;為主機控制器驅動提供HCDAPI。

          

         

          2 USB主機棧啟動過程

          USB主機棧的啟動分為3步:

          (1)初始化LJSB主機驅動(USBD);

          (2)加載USB主控制器驅動(HCD);

          (3)加載USB設備驅動程序。

          集成開發環境(IDE)下可以通過工具進行配置,其步驟如下所述:

          (1)包含USB主機棧USB Host Stack組件,通過在工程中包含USB主機棧完成對USBD的支持。在系統啟動時對USB主機驅動進行初始化需要包含USBHostStack Init組件;

          (2)包含主機控制器(HC),根據具體設計選用相應的控制器。一般在嵌入式模塊的手冊中都有其模塊控制器的類別。在系統啟動時對主機控制器進行初始化需要包含相應控制器的初始化組件;

          (3)包含設備驅動,根據設計的需求選擇相應的設備驅動。

          通過上述配置生成的VxWorks系統中帶有USB主機棧,可以完成USB2.0主機功能。3 USB主機驅動(USBD)分析

          在使用USBD提供的接口之前,首先需要對USBD進行初始化,USBD的初始化分為3步,其步驟如下:

          (1)調用USBD的入口函數lasbdInit(),usbdInit初始化USBD用到的數據結構;

          (2)調用13SB集線器(HUB)的初始化函數lasbHu-blnit(),初始化集線器驅動的數據結構;

          (3)使用函數usbHCDlnit()掛接相應的主機驅動器。

          對于每一個掛接到USBD上的主機驅動程序,集線器驅動程序都會為其創建一個優先級為100的任務來監視USB總線上的事件。這個任務一直處于睡眠狀態,一旦集線器上的某一個端口狀態發生改變,該任務立即被激活。由于該任務的優先級為100,可以立刻獲得資源變為運行狀態將總線狀態告知USBD。

          USB設備類驅動需要首先在USBD中注冊,USBD為每一個設備類維護著一個設備類結構,它的定義如下:

          

         

          當USB設備插入或拔出USB系統時,集線器驅動程序將USB設備插入或拔出的信息通知USBD,USBD)根據得到設備信息(例如:設備類號,子類號,協議號等)查找設備驅動程序列表,查找到該設備的驅動程序后,調用USB設備的相應函數,進行設備的相應操作。 當一個設備類不在系統中使用時,通過撤銷函數來撤銷注冊,該操作的實質是刪除相應設備類的設備類結構。

          4結束語

          本文介紹的VxWorks操作系統下USB2.0驅動程序已經成功在國內某高性能頻譜分析儀中使用,在使用過程中有以下幾點注意事項:

          (1)通過分析USB主機棧啟動過程,可以對USB主機棧原理進行研究;

          (2)為考慮USB系統的可移植性,VxWorks提供的源程序并沒有基于平臺做處理。當使用X86平臺時,需要修改相應的PCI設置以適應X86平臺下的PCI機制。具體方法:修改usbPciStub.c定義:

          

         

          (3)在使用EHC時,一定要注意系統中使用的USBI.1的控制器是什么類型,并將相應的驅動程序組件加到VxWorks的Image中。



        關鍵詞: 通用串行總線

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 泗阳县| 乐亭县| 阳信县| 平乐县| 拜城县| 丹巴县| 紫云| 泉州市| 马山县| 彩票| 灯塔市| 阳江市| 慈利县| 无棣县| 龙口市| 上蔡县| 盐亭县| 江北区| 正阳县| 奉贤区| 乌拉特后旗| 府谷县| 拜城县| 阳江市| 洪泽县| 大埔区| 鲁山县| 万荣县| 望谟县| 洞头县| 腾冲县| 瑞安市| 习水县| 保德县| 武胜县| 莎车县| 土默特右旗| 师宗县| 时尚| 清河县| 宝坻区|