基于RTEMS的USB設備驅動(dòng)程序設計
引 言
本文引用地址:http://dyxdggzs.com/article/247855.htm在航空航天和工業(yè)控制等一些嵌入式應用領(lǐng)域,要求控制系統具有嚴格的實(shí)時(shí)性,能夠為任務(wù)提供一個(gè)可預見(jiàn)的響應時(shí)間。一些實(shí)時(shí)操作系統的引入可以有效地滿(mǎn)足任務(wù)的實(shí)時(shí)性要求,如RTEMS和 VxWorks。在這樣的系統中,如果系統通信模塊的通信速度不高,或者通信質(zhì)量不可靠,就會(huì )影響整個(gè)系統的實(shí)時(shí)性能。通用串行總線(xiàn)(USB)由于其高帶寬、高可靠性的特點(diǎn),必將越來(lái)越多地應用到這類(lèi)系統中。然而由于多數實(shí)時(shí)操作系統目前并未提供USB主機和設備的驅動(dòng),而且USB協(xié)議相對于其他串行通信協(xié)議(RS232、SPI等)復雜度較高,使得USB驅動(dòng)程序的開(kāi)發(fā)難度較大。
1 RTEMS及其設備管理機制
1.1 RTEMS簡(jiǎn)介
RTEMS(Real—Time Executive for MultiprocessorSystem)是一個(gè)為嵌入式應用系統提供高性能支持環(huán)境的實(shí)時(shí)操作系統內核,早期用于美國軍方的導彈系統。RTEMS的實(shí)時(shí)性能高于RTLinux,與VxWorks相比也毫不遜色。
RTEMS具有如下特點(diǎn):支持多任務(wù);支持同構或異構多處理器系統;支持事件驅動(dòng)、基于優(yōu)先級、占先的調度算法,具有單調速率調度算法;支持任務(wù)間的通信和同步;支持優(yōu)先級繼承算法,快速響應的中斷管理;支持動(dòng)態(tài)存儲器分配,具有用戶(hù)配置的能力。
RTEMS是微內核搶占式的實(shí)時(shí)操作系統,具有實(shí)時(shí)性能好、運行速度快和可靠性高等優(yōu)點(diǎn),在通信、航空航天、工業(yè)控制等領(lǐng)域有著(zhù)非常廣泛的應用。
1.2 設備管理機制
操作系統的一個(gè)重要功能就是為應用程序提供一個(gè)統一的I/O設備的虛擬接口,使用戶(hù)程序能夠按照相同的模式對設備進(jìn)行操作,無(wú)需關(guān)心每個(gè)設備的具體特性。
RTEMS系統提出了一種設備抽象模型,使用這種模型,應用程序通過(guò)相同的I/O系統調用塒沒(méi)備進(jìn)行操作,而不必關(guān)心實(shí)現細節。RTEMS的I/O管理器提供的系統調用包括:
◆rIems_io_initialize,初始化一個(gè)設備驅動(dòng)程序;
◆rtems_io_register_name,注冊一個(gè)設備名;
◆rIems_io_lookup_name,根據設備名查找主/副設備號;
◆rterns_io_open,打開(kāi)一個(gè)設備;
◆rteros_io_close,關(guān)閉一個(gè)設備;
◆rtems_io_read,從一個(gè)設備中執行讀操作;
◆rtems_io_write,向一個(gè)設備中執行寫(xiě)操作;
◆rteros_io_control,特殊的設備服務(wù)。
RTEMS系統使用設備驅動(dòng)程序地址表來(lái)提供這種抽象,在這個(gè)表中提供了每個(gè)標準I/O請求處理函數的入口地址。RTEMS使用設備的主設備號和副設備號來(lái)定位它的驅動(dòng)程序。主設備號是設備驅動(dòng)程序地址表中相應設備表項的索引,用于選擇某個(gè)設備驅動(dòng)程序;副設備號的用途則依賴(lài)于具體的設備驅動(dòng)程序,通常用于在相同設備驅動(dòng)程序所控制的若干設備中指定特定的設備。在RTEMS系統中,每個(gè)特定的設備都有與之相關(guān)聯(lián)的設備名稱(chēng)。RTEMS系統內核中包含了一個(gè) “設備驅動(dòng)程序文件名表”。這個(gè)表將設備文件名與設備的主、副設備號聯(lián)系起來(lái),應用程序可以使用注冊設備名查找與一個(gè)設備相關(guān)聯(lián)的主設備號/副設備號,進(jìn)而通過(guò)標準I/0系統調用和主設備號/副設備號在設備驅動(dòng)程序地址表中找到該設備的驅動(dòng)程序的入口函數地址,對設備進(jìn)行操作。
RTEMS系統在初始化時(shí),會(huì )調用各個(gè)設備驅動(dòng)程序的初始化函數,初始化所有的設備驅動(dòng)程序。當應用程序需要對設備進(jìn)行操作時(shí),會(huì )執行有關(guān)設備管理的 I/O系統調用,RTEMS會(huì )根據該系統調用判斷應該選擇的設備驅動(dòng)程序的入口函數。由應用程序傳遞給RTEMS的信息,將被傳遞給適當的設備驅動(dòng)程序入口函數。
2 USB通信協(xié)議簡(jiǎn)介
USB(Universal Serial Bus,通用串行總線(xiàn))是一種在主機和設備之間進(jìn)行串行數據傳輸的通信協(xié)議。USB接口由于速度快、可靠性高、功耗低等優(yōu)點(diǎn),已成為當前微機的必備接口,同時(shí)也被廣泛應用于嵌入式系統設計中心。USB的物理拓撲為分層的星型結構,由3部分組成——USB主機、USB集線(xiàn)器和USB設備,如圖l所示。

USB主機是USB系統的主控組件,控制總線(xiàn)上所有USB設備和USB集線(xiàn)器的數據通信過(guò)程,所有的數據傳輸都是由USB主機端發(fā)起的。
USB主機控制器的復雜度要遠遠高于USB設備,典型的USB主機控制器大約需要10 000個(gè)門(mén)電路,而設備端的USB接口大約需要1 500個(gè)門(mén)電路。正是由于這種設計復雜度的不平等,使得USB設備得以在短時(shí)間內得到廣泛應用。
3 RTEMS下USB設備驅動(dòng)程序的設計
3.1 概 述
嵌入式系統的硬件環(huán)境千差萬(wàn)別,各類(lèi)USB設備的類(lèi)規范也各不相同。為了確保程序的可移植性和可擴展性,將程序設計為二層結構:硬件抽象層和USB設備類(lèi)驅動(dòng)層,如圖2所示。

硬件抽象層封裝對底層USB設備控制器的操作和對中斷的處理,通過(guò)一些標準方法,為上層提供一個(gè)底層的硬件抽象,便于移植。USB設備類(lèi)驅動(dòng)層包含對標準命令和對特定設備類(lèi)命令的處理。
3.2 硬件抽象層
硬件抽象層對USB設備控制器進(jìn)行操作,實(shí)現以下功能:設備狀態(tài)管理、端點(diǎn)狀態(tài)管理和中斷管理。
3.2.1 設備狀態(tài)管理
每一個(gè)USB設備在正常工作前必須完成主機對它的配置過(guò)程,即總線(xiàn)枚舉。USB設備在總線(xiàn)上共有6種狀態(tài):接入態(tài)、加電態(tài)、默認態(tài)、地址態(tài)、配置態(tài)和掛起態(tài)。
硬件抽象層提供USB_Init、USB_Attach、USB_Disat—tach、USB_Connect、USB_Disconnect、 USB_SetAddress、USB_ResetAddress、USB_SetConfiguration和 USB_ResetConfiguration九個(gè)函數對設備的狀態(tài)進(jìn)行管理。一般來(lái)說(shuō),設備在總線(xiàn)上的狀態(tài)變化都會(huì )由中斷通知設備,中斷服務(wù)程序根據中斷類(lèi)型和當前狀態(tài)通過(guò)提供的功能接口對沒(méi)備進(jìn)行相應的操作,確保設備能夠完成枚舉過(guò)程÷順利進(jìn)入配置態(tài)。設備在硬件抽象層函數控制下的在總線(xiàn)上的狀態(tài)機如圖3所示。由于掛起與恢復無(wú)需軟件干預,因此沒(méi)有在狀態(tài)機中描述這一狀態(tài)。
評論