基於VxW0rks作業系統的USB 2.0驅動分析
| [日期:2008-7-11] |
來源:電子產品世界 作者: |
[字型:大 中 小] |
引 言
通用序列匯流排(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中。