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