介紹 過去usb僅應(yīng)用于個人計算機其在嵌入式系統(tǒng)領(lǐng)域的巨大潛力尚未開發(fā)usb在嵌入式系統(tǒng)中的應(yīng)用包括kvm開關(guān)數(shù)碼相機pda打印機機頂盒及移動電話。 什么是嵌入式系統(tǒng)嵌入式系統(tǒng)被定義為硬件和固件--獨立的或作為更大型系統(tǒng)的一部分--通常帶有某種操作系統(tǒng)操作系統(tǒng)可以是windows cevxworks或由“自編代碼”構(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)實現(xiàn)基于pc的usb需要以上所有領(lǐng)域的專門技術(shù)。 在usb嵌入式系統(tǒng)中其主要組成部分與pc系統(tǒng)類似這些組成部分為嵌入式主機控制器芯片帶ohci堆棧的實時操作系統(tǒng)(rtos)以及專用驅(qū)動程序。 現(xiàn)有很多可供選擇的主機控制器芯片有些帶有處理器有些則以寄存器為基礎(chǔ)此處組成部分設(shè)備的選擇將會影響如下兩個層面。 很多公司可提供rtos最好選擇一個處理器和與之配合工作的rtos然后在其上添加應(yīng)用代碼如果沒有真正的rtos某些控制器帶有可構(gòu)造應(yīng)用的“框架”以下介紹這種框架的示例以及如何在其上構(gòu)造應(yīng)用。 在pc上實現(xiàn)usb時pc具有豐富的可用資源其中包括高達(dá)512mb字節(jié)的存儲器20-60gb的硬盤以及2ghz或速度更快的微處理器此外五年多來windowsmac os以及unix等操作系統(tǒng)一直支持usb世界上有數(shù)以百計或數(shù)以千計的工程師在設(shè)計基于pc的usb應(yīng)用程序和設(shè)備驅(qū)動程序。 而另一方面嵌入式系統(tǒng)通常只有不超過64k的存儲器以及運行于12mhz - 33mhz范圍內(nèi)的處理器沒有硬盤由于usb對于嵌入式系統(tǒng)相對較新因此可能只有為數(shù)不多的工程師擁有這方面的經(jīng)驗。 賽普拉斯ez-host控制器 賽普拉斯ez-host器件擁有兩個“串行接口引擎”每個引擎包含兩個usb端口因此無需使用額外的硬件ez-host便可控制四個usb設(shè)備。 ez-host器件具有固件結(jié)構(gòu)可管理大多數(shù)usb主機的詳細(xì)要求該結(jié)構(gòu)的另一個特點是支持網(wǎng)絡(luò)集線器鍵盤/集線器組合部件常常出現(xiàn)這樣的問題是帶有集線器的鍵盤還是帶有鍵盤的集線器答案是帶有鍵盤的集線器因此要了解位于集線器后的鍵盤需要提供集線器支持幸好框架代碼包含對集線器的支持。 以下章節(jié)將介紹框架和某些框架操作示例以及如何將其與應(yīng)用代碼接口。 框架概述 ez-host框架包含所有實現(xiàn)usb主機功能所必需的固件其中包含任務(wù)時序設(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列表空閑時td處理器處理td列表安排傳輸時序并將設(shè)定好的td傳送給ez-host硬件進(jìn)行處理。 圖1所示為基本的usb控制傳輸該圖表為td處理器處理usb傳輸?shù)氖纠?br>
圖1usb控制傳輸 為了執(zhí)行控制轉(zhuǎn)移可以使用框架函數(shù)send_request( )send_request( )函數(shù)將分配一個傳遞給td處理器的urb結(jié)構(gòu)?! rb應(yīng)該包含有關(guān)設(shè)置狀態(tài)的信息并且借助參數(shù)傳遞給send_request( )urb需要如下信息。 請求類型 - 表示usb請求類型的字節(jié)該字節(jié)包含表示傳輸方向傳輸類型以及傳輸接受者的位 請求 - 11種標(biāo)準(zhǔn)usb請求之一這些請求包括 clear_f