過去USB僅應用於個人計算機,而在嵌入式系統領域的巨大潛力還沒有開發出來,USB在嵌入式系統中的應用包括KVM開關、數位相機、PDA、印表機、機頂盒以及行動電話等。本文將介紹在嵌入式系統中應用USB時其主機控制器的設計。
本文引用地址:http://www.eepw.com.cn/article/152226.htm嵌入式系統被定義為硬體和固件(獨立的或作為更大型系統的一部分)通常帶有某種作業系統,作業系統可以是Windows CE、VxWorks或其它由「自編代碼」構成的更簡單系統。根據這樣的定義,可以認為任何帶有處理器的電子裝置均可以作為USB嵌入式主機。
嵌入式系統設計挑戰
在基於PC的系統中,USB操作一般需要三種部件,分別是通常作為PCI子系統的主機控制器、USB堆棧以及USB類驅動器。
主機控制器是集成主板晶片組的一部分,USB堆棧則包含主板晶片及通用主機控制器接口(UCHI)和開放主機控制器接口(OHCI)驅動程序以及USB驅動程序(usbd.sys),在PC上實現USB需要上述領域的專門技術。
在嵌入式USB系統中,其主要組成部分與PC系統類似,如嵌入式主機控制器晶片、帶OHCI堆棧的實時作業系統(RTOS)以及專用驅動程序。現有很多可供選擇的主機控制器晶片,有些帶有處理器,有些則是基於寄存器的,對器件的選擇將影響到其下面兩層。
很多公司都可提供RTOS,最好選擇一個能配合在一起工作的處理器和RTOS,然後在其上添加應用代碼。如果沒有真正的RTOS,某些控制器則用一個「框架」,可在其上構造應用程式。我們後面將介紹這種框架以及如何在上面構建應用。
在PC上實現USB具有非常豐富的可用資源,包括高達512MB的存儲器、20-60GB的硬碟以及2GHz或更快的微處理器。此外,多年來Windows、MAC OS以及Unix等作業系統也一直支持USB,而且世界上還有成千上萬的工程師在設計基於PC的USB應用程式和設備驅動程序。而對嵌入式系統來說,通常只有不超過64K的存儲器,以及運行於12MHz~33MHz的處理器,且沒有硬碟。由於USB對嵌入式系統相對較新,因此可能只有為數不多的工程師擁有這方面的經驗。
控制器與框架
下面我們以賽普拉斯EZ-Host為例介紹嵌入式系統USB控制器與框架結構。EZ-Host有兩個「串行接口引擎」,每個引擎包含兩個USB埠,因此無需使用額外硬體EZ-Host便可控制四個USB設備。
EZ-Host器件具有固件結構,可管理大多數USB主機的詳細請求。該結構另一個特點是支持網絡集線器。鍵盤/集線器組合在一起常常帶來這樣的問題,即它究竟是帶有集線器的鍵盤還是帶有鍵盤的集線器?答案應該是帶有鍵盤的集線器。因此要了解集線器後面的鍵盤,還需要提供集線器支持。幸好,這裡的框架代碼包含了對集線器的支持。
EZ-Host框架包含所有實現USB主機功能所必需的固件,包括任務調度、設備枚舉、帶寬分配以及功率管理。另外應用程式作為固件的一部分,控制專用USB設備並將其數據傳遞給最終應用。
框架的核心是TD處理器。TD處理器的運行基於一種稱為「任務描述器(TD)」的數據結構,使用其信息與USB硬體尤其是「串行接口引擎(SIE)」進行通信。需要注意的是每個SIE控制兩個埠,而且每個SIE具有一個TD處理器。EZ-Host框架使用了多種數據結構實現其操作,這些結構包括TD和USB請求模塊(URB)。
任務描述器是傳遞給硬體的數據結構,包含特定硬體接口(如SIE)和埠編號的數據欄位、終點數、收發數據緩衝器長度、數據包ID編碼以及URB結構指示器。
URB含有TD所需的邏輯信息,該邏輯信息包括USB設備緩衝器、安裝軟體包以及USB設備結構指示器。
進行USB事務處理時,URB帶有事務處理分配及其裝入的數據結構,而後URB提交給TD處理器,TD處理器再將URB加入TD列表。空閒時,TD處理器處理TD列表,安排傳輸時序,並將設定好的TD傳送給EZ-Host硬體進行處理。