日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 嵌入式 > 嵌入式硬件

過去USB僅應(yīng)用于個人計算機,而在嵌入式系統(tǒng)領(lǐng)域的巨大潛力還沒有開發(fā)出來,USB在嵌入式系統(tǒng)中的應(yīng)用包括KVM開關(guān)、數(shù)碼相機、PDA、打印機、機頂盒以及移動電話等。本文將介紹在嵌入式系統(tǒng)中應(yīng)用USB時其主機控制器的設(shè)計。

嵌入式系統(tǒng)被定義為硬件和固件(獨立的或作為更大型系統(tǒng)的一部分)通常帶有某種操作系統(tǒng),操作系統(tǒng)可以是Windows CE、VxWorks或其它由“自編代碼”構(gòu)成的更簡單系統(tǒng)。根據(jù)這樣的定義,可以認(rèn)為任何帶有處理器的電子裝置均可以作為USB嵌入式主機。

嵌入式系統(tǒng)設(shè)計挑戰(zhàn)

在基于PC的系統(tǒng)中,USB操作一般需要三種部件,分別是通常作為PCI子系統(tǒng)的主機控制器、USB堆棧以及USB類驅(qū)動器。

主機控制器是集成主板芯片組的一部分,USB堆棧則包含主板芯片及通用主機控制器接口(UCHI)和開放主機控制器接口(OHCI)驅(qū)動程序以及USB驅(qū)動程序(usbd.sys),在PC上實現(xiàn)USB需要上述領(lǐng)域的專門技術(shù)。

在嵌入式USB系統(tǒng)中,其主要組成部分與PC系統(tǒng)類似,如嵌入式主機控制器芯片、帶OHCI堆棧的實時操作系統(tǒng)(RTOS)以及專用驅(qū)動程序?,F(xiàn)有很多可供選擇的主機控制器芯片,有些帶有處理器,有些則是基于寄存器的,對器件的選擇將影響到其下面兩層。

很多公司都可提供RTOS,最好選擇一個能配合在一起工作的處理器和RTOS,然后在其上添加應(yīng)用代碼。如果沒有真正的RTOS,某些控制器則用一個“框架”,可在其上構(gòu)造應(yīng)用程序。我們后面將介紹這種框架以及如何在上面構(gòu)建應(yīng)用。

在PC上實現(xiàn)USB具有非常豐富的可用資源,包括高達(dá)512MB的存儲器、20-60GB的硬盤以及2GHz或更快的微處理器。此外,多年來Windows、MAC OS以及Unix等操作系統(tǒng)也一直支持USB,而且世界上還有成千上萬的工程師在設(shè)計基于PC的USB應(yīng)用程序和設(shè)備驅(qū)動程序。而對嵌入式系統(tǒng)來說,通常只有不超過64K的存儲器,以及運行于12MHz~33MHz的處理器,且沒有硬盤。由于USB對嵌入式系統(tǒng)相對較新,因此可能只有為數(shù)不多的工程師擁有這方面的經(jīng)驗。

控制器與框架

下面我們以賽普拉斯EZ-Host為例介紹嵌入式系統(tǒng)USB控制器與框架結(jié)構(gòu)。EZ-Host有兩個“串行接口引擎”,每個引擎包含兩個USB端口,因此無需使用額外硬件EZ-Host便可控制四個USB設(shè)備。

EZ-Host器件具有固件結(jié)構(gòu),可管理大多數(shù)USB主機的詳細(xì)請求。該結(jié)構(gòu)另一個特點是支持網(wǎng)絡(luò)集線器。鍵盤/集線器組合在一起常常帶來這樣的問題,即它究竟是帶有集線器的鍵盤還是帶有鍵盤的集線器?答案應(yīng)該是帶有鍵盤的集線器。因此要了解集線器后面的鍵盤,還需要提供集線器支持。幸好,這里的框架代碼包含了對集線器的支持。

EZ-Host框架包含所有實現(xiàn)USB主機功能所必需的固件,包括任務(wù)調(diào)度、設(shè)備枚舉、帶寬分配以及功率管理。另外應(yīng)用程序作為固件的一部分,控制專用USB設(shè)備并將其數(shù)據(jù)傳遞給最終應(yīng)用。

框架的核心是TD處理器。TD處理器的運行基于一種稱為“任務(wù)描述器(TD)”的數(shù)據(jù)結(jié)構(gòu),使用其信息與USB硬件尤其是“串行接口引擎(SIE)”進(jìn)行通信。需要注意的是每個SIE控制兩個端口,而且每個SIE具有一個TD處理器。EZ-Host框架使用了多種數(shù)據(jù)結(jié)構(gòu)實現(xiàn)其操作,這些結(jié)構(gòu)包括TD和USB請求模塊(URB)。

任務(wù)描述器是傳遞給硬件的數(shù)據(jù)結(jié)構(gòu),包含特定硬件接口(如SIE)和端口編號的數(shù)據(jù)字段、終點數(shù)、收發(fā)數(shù)據(jù)緩沖器長度、數(shù)據(jù)包ID編碼以及URB結(jié)構(gòu)指示器。

URB含有TD所需的邏輯信息,該邏輯信息包括USB設(shè)備緩沖器、安裝軟件包以及USB設(shè)備結(jié)構(gòu)指示器。

進(jìn)行USB事務(wù)處理時,URB帶有事務(wù)處理分配及其裝入的數(shù)據(jù)結(jié)構(gòu),而后URB提交給TD處理器,TD處理器再將URB加入TD列表??臻e時,TD處理器處理TD列表,安排傳輸時序,并將設(shè)定好的TD傳送給EZ-Host硬件進(jìn)行處理。

為了執(zhí)行控制轉(zhuǎn)移,可以使用框架函數(shù)send_request(),send_request()函數(shù)將分配一個傳遞給TD處理器的URB結(jié)構(gòu)。URB應(yīng)該包含有關(guān)設(shè)置狀態(tài)的信息,并且借助參數(shù)傳遞給send_request()。URB需要的信息包括:

* 請求類型:表明USB請求類型的字節(jié),該字節(jié)包含表示傳輸方向、傳輸類型以及傳輸接受方的位。

* 請求:11種標(biāo)準(zhǔn)USB請求中的一種,這些請求包括:Clear_Feature、Get_Configuration、Get_Descriptor、Get_Interface、Get_Status、Set_Address、Set_Configuration、Set_Descriptor、Set_Feature、Set_Interface、Synch_Frame。

* 值:特殊請求字段。

* 索引:特殊請求字段。

* 長度:相關(guān)數(shù)據(jù)緩沖器的大小

載入用于URB的設(shè)置信息之后,便可將其它設(shè)備信息裝入URB,如地址、速度、終點數(shù)以及傳輸方向,還有表示傳輸類型的字節(jié)和“回調(diào)”函數(shù)指示器。利用回調(diào)函數(shù)可以在框架內(nèi)進(jìn)行某些并行操作,也可在硬件處理USB操作的同時執(zhí)行其它任務(wù)。TD需要USB傳輸類型信息,這樣框架就可以安排正確的傳輸類型時序。此外,與批量或中斷傳輸相反,框架一次只允許進(jìn)行一個控制傳輸操作。

裝入所有URB信息之后,URB便被提交給TD處理器。TD處理器是框架的組成部分,它與硬件直接通信,處理有關(guān)傳輸?shù)牡图壴敿?xì)資料。TD完成任務(wù)后,TD處理器將程序控制權(quán)由原始調(diào)用指定的“回調(diào)”函數(shù)轉(zhuǎn)給send_request()函數(shù)。

圖2顯示了調(diào)用帶回調(diào)函數(shù)的send_request()。這里我們使用控制傳輸以獲得某鍵盤的國家代碼,在get_country_code()函數(shù)中可看到send_request()的調(diào)用,注意send_request()調(diào)用中的最后一個參數(shù)是回調(diào)函數(shù)。在TD處理器確定硬件完成處理后執(zhí)行該函數(shù),此時回調(diào)函數(shù)將獲得返回的數(shù)據(jù)緩沖器,將其與HID描述器結(jié)構(gòu)相匹配,并存取與國家代碼對應(yīng)的字節(jié),然后URB被釋放。

EZ-Host框架值得注意的最后一個特點是設(shè)備驅(qū)動程序的使用。在執(zhí)行過程中,設(shè)備驅(qū)動程序?qū)?zhí)行三個功能,即停止、啟動和運行。啟動某設(shè)備驅(qū)動程序便是運行它的run()函數(shù),該函數(shù)對某些數(shù)值進(jìn)行初始化,并分配一個用于數(shù)據(jù)傳輸?shù)闹貜?fù)出現(xiàn)的URB。對于鼠標(biāo)或鍵盤,該URB將每隔10毫秒發(fā)生一次。數(shù)據(jù)傳輸完成后,TD處理器將控制轉(zhuǎn)交給interrupt_in_complete()函數(shù),通過檢查URB可得知數(shù)據(jù)是來自鍵盤還是來自鼠標(biāo),該回調(diào)函數(shù)負(fù)責(zé)將鍵盤或鼠標(biāo)數(shù)據(jù)發(fā)送至應(yīng)用層。

當(dāng)某驅(qū)動程序停止時,其重復(fù)出現(xiàn)的URB將從TD列表中除去并釋放出空間,然后傳送一個消息至應(yīng)用層,去掉相關(guān)設(shè)備。如果停止的驅(qū)動程序相關(guān)設(shè)備是集線器,則與該集線器相連的所有設(shè)備也要去除,且驅(qū)動程序同時停止。當(dāng)然,如果去除的設(shè)備中還有集線器,則與該集線器相連的設(shè)備將以同樣方式去除。

在驅(qū)動程序運行期間,系統(tǒng)可執(zhí)行各種任務(wù)。對于集線器設(shè)備驅(qū)動程序,要檢查集線器的端口,以了解是否有設(shè)備插入和去除。這里鍵盤和鼠標(biāo)驅(qū)動程序運行函數(shù)不起任何作用。

框架數(shù)據(jù)流

框架代碼執(zhí)行過程是這樣的:上電復(fù)位、微處理器對所有寄存器和計數(shù)器以及設(shè)備結(jié)構(gòu)進(jìn)行初始化,然后進(jìn)入如下的循環(huán):

1.檢查主機USB端口是否存在狀態(tài)改變(設(shè)備插入或去除)。

2.檢查TD處理器,并獲得兩個SIE上運行的所有TD狀態(tài)信息。

3.查看運行設(shè)備驅(qū)動程序列表并執(zhí)行每個程序的運行函數(shù)。

檢查主機USB端口以了解狀態(tài)變化需要檢查變量的改變,如果發(fā)生變化,可通過端口變化中斷處理程序設(shè)定變量。如果端口發(fā)生改變,將執(zhí)行枚舉代碼進(jìn)行處理。

通過集線器至主機的中斷傳輸完成相連集線器變化值檢查,如果發(fā)生設(shè)備添加或去除,它們將像上面那樣枚舉出來。發(fā)現(xiàn)新設(shè)備時,需要找到設(shè)備驅(qū)動程序然后裝入。根據(jù)設(shè)備尋找設(shè)備驅(qū)動程序的方法有很多種,框架代碼將首先嘗試將某驅(qū)動程序與某設(shè)備的供應(yīng)商ID以及產(chǎn)品ID進(jìn)行匹配,但只有存在特定的制造商且特定設(shè)備在特定驅(qū)動程序中運行這種方法才有效。如果沒有實現(xiàn)匹配,框架代碼會嘗試對設(shè)備的種類和子類進(jìn)行匹配,這可以利用更普通的驅(qū)動程序與設(shè)備匹配。

設(shè)備插入和去除檢查還有兩項額外的任務(wù)。如果連接的設(shè)備是集線器,則必須對其端口進(jìn)行檢查,以查看它們是否帶有設(shè)備。如果去除的設(shè)備是集線器,那么所有與之連接的設(shè)備也必須去除。

通過中斷傳輸還可以檢查來自相連鍵盤和鼠標(biāo)設(shè)備的新數(shù)據(jù),這些傳輸每10毫秒種發(fā)生一次,由TD處理器安排時序。任務(wù)完成后,TD處理器將傳輸控制轉(zhuǎn)給回調(diào)函數(shù),這時可提取鍵盤和鼠標(biāo)數(shù)據(jù),并送至應(yīng)用層。

構(gòu)建應(yīng)用

現(xiàn)在介紹如何構(gòu)建一個簡單的控制鍵盤和鼠標(biāo)的嵌入式USB設(shè)計,該方案使用基于處理器的USB主機控制器,處理器的代碼包含框架和應(yīng)用固件。首先要做的是確定希望支持設(shè)備的數(shù)量和類型,確定設(shè)備數(shù)量后,可據(jù)此分配URB和驅(qū)動程序空間,通過修改名為fwxcfg.h的“個性化”文件完成URB分配。

每個鍵盤、鼠標(biāo)或集線器均需要一個URB來處理傳輸中重復(fù)出現(xiàn)的中斷。此外,在枚舉和其它USB控制傳輸過程中,URB被分配并隨后釋放。一個較好的經(jīng)驗是為系統(tǒng)支持的每個設(shè)備分配兩個URB,一個用于傳輸中重復(fù)出現(xiàn)的中斷,另一個則用于任何可能的控制傳輸,這些傳輸可能發(fā)生在設(shè)備枚舉或設(shè)備狀態(tài)檢查過程中。雖然每次只能處理一個控制傳輸,但框架可將其它傳輸排隊,系統(tǒng)支持的URB數(shù)量應(yīng)該等于所支持設(shè)備數(shù)量的兩倍。

接下來,需要為鍵盤和鼠標(biāo)創(chuàng)建驅(qū)動程序。由于這些設(shè)備的USB功能非常相近,所以兩個設(shè)備可以使用一個驅(qū)動程序。該驅(qū)動程序可稱為hid_driver(用于人機界面設(shè)備的驅(qū)動程序)。下一步是在驅(qū)動程序內(nèi)添加開始、停止以及運行函數(shù),以及查找驅(qū)動程序的設(shè)備種類編碼,還需要將驅(qū)動程序函數(shù)的名稱添加進(jìn)文件drvrlist.h。包含集線器和hid driver的驅(qū)動程序聲明如下: #define FWX_DRIVER_LIST {&hid_driver, &hubclass_driver}

hid_driver啟動函數(shù)將分配傳輸中重復(fù)出現(xiàn)的中斷,以獲得鍵盤和鼠標(biāo)數(shù)據(jù)。該函數(shù)內(nèi)的編碼將獲取數(shù)據(jù)并將數(shù)據(jù)傳給編碼應(yīng)用層;停止函數(shù)將釋放重復(fù)出現(xiàn)的中斷傳輸,并通知應(yīng)用層設(shè)備已被去除;運行函數(shù)用來檢查來自應(yīng)用代碼的輸入指令。

然后需要為枚舉通報函數(shù)添加一些代碼,枚舉通報函數(shù)是枚舉代碼使用的回調(diào)函數(shù),用于報告設(shè)備枚舉狀態(tài)并處理可能的枚舉錯誤。該代碼可將新的枚舉設(shè)備信息傳給應(yīng)用層。

在這里對集線器提供支持很容易,不需要添加任何代碼,也不需要編寫驅(qū)動程序,因為框架已包含驅(qū)動程序。所要做的是更改fwxcfg.h中的語句,即將

#undef FWX_INCLUDE_HUB_SUPPORT

改為

#define FWX_INCLUDE_HUB_SUPPORT

并將文件hubclass.c添加進(jìn)項目形成文件,其余事務(wù)由框架處理。

本文小結(jié)

盡管與PC相比,USB主機系統(tǒng)在計算資源和經(jīng)驗方面存在不足,但開發(fā)人員仍然可以較為簡單地將USB功能加入到嵌入式系統(tǒng)中?,F(xiàn)有多種用于實現(xiàn)這種功能的USB主機IC可供選擇,用戶可購買或自行開發(fā)USB主機堆棧和實時操作系統(tǒng)。

另外本文論述如何僅僅使用一個附加IC且不使用第三方軟件來實現(xiàn)USB嵌入式主機設(shè)計,USB嵌入式主機框架可處理所有低級技術(shù)細(xì)節(jié)。EZ-Host USB主機能夠在不進(jìn)行額外編碼情況下支持HID設(shè)備和集線器,該系統(tǒng)目前最多可支持8個設(shè)備和兩個集線器,并可方便地實現(xiàn)更多設(shè)備和更多級支持。當(dāng)前代碼大小大約為22K字節(jié),設(shè)計人員所需做的僅僅是為整個系統(tǒng)添加專用代碼。

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當(dāng)下,工業(yè)電機作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護(hù)是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉