RTEMS管理機制與USB驅動(dòng)程序設計

發(fā)布時(shí)間:2010-4-24 22:15    發(fā)布者:李寬
關(guān)鍵詞: RTEMS , USB , 程序設計 , 機制 , 驅動(dòng)
引言

在航空航天和工業(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設備,如圖1所示。



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)。



3.2.2 端點(diǎn)狀態(tài)管理

USB設備與主機的通信可以通過(guò)對USB端點(diǎn)狀態(tài)的控制來(lái)完成。USB設備端點(diǎn)可以定義3個(gè)不同狀態(tài):空閑(Idle)狀態(tài)、停止(Halt)狀態(tài)和讀/寫(xiě)(W/R)狀態(tài)。USB硬件抽象層提供USB_ConfigureEndpoint、USB_Write、USB_Read、 USB_EndOfTransfer、USB_Stall、USB_HaIt和USB_ClearHalt七個(gè)功能函數對設備的狀態(tài)進(jìn)行管理,端點(diǎn)的狀態(tài)轉換過(guò)程如圖4所示。



USB_ConfiguIreEndpoint負責配置端點(diǎn)的最大包長(cháng)度和傳輸方向,并將端點(diǎn)狀態(tài)設置為空閑狀態(tài)。端點(diǎn)進(jìn)入空閑狀態(tài),如果上層調用 USB_Write進(jìn)行數據發(fā)送,將發(fā)送緩沖區指向要發(fā)送的數據,設置端點(diǎn)狀態(tài)為寫(xiě)狀態(tài),等待USB主機接收數據(真正的數據傳輸在中斷服務(wù)程序中進(jìn)行)。寫(xiě)完成后,端點(diǎn)回到空閑狀態(tài)。數據接收與發(fā)送類(lèi)似。如果設備出現某種錯誤,主機會(huì )向設備發(fā)送Set_Feature命令,設備接收到 Set_Feature命令,執行USB_Halt進(jìn)入停止狀態(tài)。端點(diǎn)處于停止狀態(tài)時(shí),如果接收到Clear_Feature,則執行USB— ClearHalt清除Halt標志,進(jìn)入Idle狀態(tài);如果USB設備由于某種原因無(wú)法對當前命令進(jìn)行處理(如不能識別命令,或者沒(méi)有準備好進(jìn)行數據傳輸),則執行USB_Stall通知主機發(fā)生錯誤,但端點(diǎn)的狀態(tài)不變。

3.2.3 中斷管理

在USB設備端,存在以下幾類(lèi)中斷:幀起始中斷、設備恢復中斷、設備掛起中斷和端點(diǎn)中斷。硬件抽象層的中斷服務(wù)例程對各類(lèi)中斷進(jìn)行響應,判斷中斷類(lèi)型。如果是與設備狀態(tài)相關(guān)的中斷,則需要調整設備到相應的狀態(tài),同時(shí)調用上層提供的相應回調函數;如果是端點(diǎn)中斷,則按照圖5的流程處理。



3.3 USB設備類(lèi)驅動(dòng)

USB設備類(lèi)驅動(dòng)包含兩個(gè)功能:對標準命令的處理和對基于設備類(lèi)的命令的處理。USB類(lèi)驅動(dòng)根據硬件抽象層提供的接口,與中斷服務(wù)程序協(xié)同管理 USB設備和端點(diǎn)的狀態(tài)。通過(guò)為硬件抽象層的中斷服務(wù)程序提供相應的回調函數,完成特定設備類(lèi)要求的操作;同時(shí)根據RTEMS系統的設備管理機制,為應用程序提供設備驅動(dòng)的入口點(diǎn)。

3.3.1 標準命令處理

為了更好地協(xié)調USB主機與設備之間的數據通信,USB規范定義了一套命令,用于完成主機對總線(xiàn)上的USB設備的控制。USB設備必須對來(lái)自于主機的控制命令做出響應。一般來(lái)說(shuō),命令都是通過(guò)設備的默認管道傳遞到設備的。USB協(xié)議定義了11個(gè)標準命令,用于配置設備、獲得設備的信息等操作。USB設備必須支持這些標準命令。

3.3.2 基于設備類(lèi)的命令處理

除了標準命令以外,USB每種設備類(lèi)的協(xié)議又定義了自己的類(lèi)命令。設備廠(chǎng)商為了使設備實(shí)現某種特殊的功能,還可以定義廠(chǎng)商專(zhuān)有的命令。

所有的命令雖然有不同的內容和使用目的,但也有一些共同的特點(diǎn):所有命令的結構是一樣的;USB命令是在控制傳輸的設置階段從USB主機發(fā)往設備的;如果除命令本身外,主機還打算向設備發(fā)送與命令相關(guān)的信息,那么這些信息將由緊跟在設置階段的數據階段發(fā)出;如果命令要求設備返回信息,這些信息會(huì )在控制傳輸的數據階段從設備端發(fā)出;當命令完成時(shí),設備會(huì )在握手階段返回ACK;設備可以返回Stall,表明不支持當前命令或無(wú)法完成命令要求的操作。

3.3.3 命令的處理流程

當設備接收到新的命令時(shí),硬件抽象層的中斷處理函數會(huì )調用USB設備類(lèi)驅動(dòng)層提供的回調函數;在回調函數中,判斷命令的類(lèi)型,如果是標準命令,則交給標準命令處理函數處理;否則,交給基于設備類(lèi)的命令處理函數處理。因此,要實(shí)現對某種標準USB設備類(lèi)型或非標準USB設備類(lèi)型的命令的支持,只需要在 USB設備類(lèi)驅動(dòng)層添加對該標準設備類(lèi)型命令或者自定義命令的處理函數,這樣使得程序易于擴展。

3.3.4 USB設備驅動(dòng)程序入口函數

RTEMS系統的設備驅動(dòng)程序應該包含下列入口函數:設備初始化例程、設備打開(kāi)例程、設備關(guān)閉例程、從設備中讀出數據的例程、向設備中寫(xiě)人數據的例程和特定于具體設備的設備操作例程。如果一個(gè)設備驅動(dòng)程序不支持某個(gè)特定的入口函數,在設備驅動(dòng)程序地址表中這個(gè)入口函數的地址值應該設置為空。以下6個(gè)函數是驅動(dòng)程序為標準I/O請求提供的入口函數。

①初始化:rtems_device_driver usb_initialize(rtems_device_major_number maior,rtems_device_minor_numberminor,vold*arg)。在RTEMS系統中注冊USB設備的設備名,調用 USB_Init實(shí)現設備的功能和狀態(tài)初始化,注冊中斷。

②打開(kāi):rtems_device_driver usb_open(rtems_device_major_number major,rtems_device_minor_number mi—nor,void*arg)。如果設備已經(jīng)被成功枚舉(處于配置態(tài))并且未被其他任務(wù)打開(kāi),則標記設備已被打開(kāi)標志,成功返回;否則,打開(kāi)失敗。

③關(guān)閉:rtems_device_driver usb_close(rtems_device_major_number major,rtems_device_minor_number mi—nor,void*arg)。清除設備打開(kāi)標志。

④讀操作:rtems_device_driver usb_read(rtems_de—vice_major_number major,rtems_device_minor_numberminor,void*arg)。調用USB_Read(),設置端點(diǎn)為讀狀態(tài),等待主機端發(fā)來(lái)的數據,數據到達后,中斷服務(wù)程序會(huì )把端點(diǎn)設置為空閑狀態(tài),函數將數據返回給應用程序。

⑤寫(xiě)操作:rtems_device_driver usb_write(rtems_de—vice_major_number major,rtems_device_minor_numberminor,void*arg)。調用USB_Write(),設置端點(diǎn)為寫(xiě)狀態(tài),并等待主機接收數據,數據發(fā)送完成后,中斷服務(wù)程序會(huì )將端點(diǎn)設置為空閑狀態(tài),函數返回。

⑥控制操作:rtems_device_driver usb_control(rtems_device_major_number major,rtems_device_minor_num—ber minor,void*arg)。具體操作根據需要定義。將設備驅動(dòng)程序的入口函數地址添加到設備驅動(dòng)程序地址表后,就可以通過(guò)RTEMS提供的I/0系統調用對設備進(jìn)行操作。

結語(yǔ)

在RTEMS系統的移植和應用開(kāi)發(fā)過(guò)程中,設備驅動(dòng)程序的編寫(xiě)是十分重要的一環(huán)。USB由于其協(xié)議的復雜性,成為驅動(dòng)開(kāi)發(fā)中的難點(diǎn)之一。本文對 RTEMS系統下USB設備驅動(dòng)程序的設計與實(shí)現進(jìn)行了詳細論述,相應程序在A(yíng)T91RM9200開(kāi)發(fā)板上得以實(shí)現和驗證。本設計著(zhù)眼于程序的可移植性和可擴展性,采用層次結構,實(shí)現了硬件平臺與USB具體設備類(lèi)驅動(dòng)的分離,使其能夠方便地移植到其他硬件平臺上并實(shí)現對特定USB設備類(lèi)型的支持。同時(shí),由于與操作系統的耦合度較小,驅動(dòng)程序還可以方便地移植到其他的操作系統上。

參考文獻

   1. 查看詳情
   2. 肖踞雄.翁鐵成 USB 技術(shù)及應用設計 2003
   3. 蔣文杰.陳文智 基于 RTEMS操作系統的設備驅動(dòng)開(kāi)發(fā) [期刊論文] -工業(yè)控制計算機2006(6)

作者:北京航空航天大學(xué) 王品  尚利宏
來(lái)源:單片機與嵌入式系統應用 2009 (1)
本文地址:http://selenalain.com/thread-10783-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页