歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

Linux揭開USB主機設計的神秘面紗

嵌入式Linux和普通Linux並無本質區別。PC上用到的硬件,嵌入式Linux幾乎都支持。Linux上各種硬件的驅動程序源代碼都可以得到,為用戶編寫自己專有硬件的驅動程序帶來很大方便。這裡我們就對在嵌入式Linux平台上進行USB主機控制器的軟、硬件設計做一個簡單介紹。主動識別USB目前,大部分的嵌入式產品都具有USB 接口功能,但實際指的是下位機的功能,不具備主動識別USB設備,更不能對其進行控制和讀寫等操作,這也是美中不足的地方。比如在一個工業數據采集的領域中,由於便攜式嵌入設備的存儲容量一般非常有限,經常需要使用USB優盤作為數據存儲的載體。這就要在項目中實現一個嵌入式的USB主機來采集數據,並且把數據存儲到優盤中。這裡,這個USB主機只需具有控制讀寫功能就行了,不必實現外設的功能,因為它根本不用連接到PC。用戶的需求呼喚USB主機實現嵌入式化,也就是開發和設計嵌入式的USB主機。移動數據交換和存儲,是近年來信息技術行業的熱點。如今,各式各樣的移動存儲設備有如雨後春筍般出現。它們從最早的存儲量為幾KB、能存儲用戶個人信息的USB小鑰匙,到容量可與PC硬盤媲美的USB活動硬盤,再到以Flash作為存儲介質的USB閃盤和優盤,直到今天大量的PC外設和多媒體家電中大量使用的數據存儲器。同時,我們也應注意到:移動數據交換業,是伴隨著通用串行總線(Universal Serial Bus,簡稱為USB)的成熟而興起的。USB既是數據交換的媒介,又是其核心。可以說,沒有USB,就不會有移動數據業務如此迅猛地發展。從USB問世,從1.1到協議規范2.0版本再到目前的USB OTG(On-The-Go),USB在不斷自我完善,並走向成熟。廠商對於USB的硬件和軟件支持的也越來越完備。現在開發一個USB外設產品,所需要投入的成本和時間大大降低了。隨著USB應用領域的逐漸擴大,對於USB的期望也越來越高。希望USB能應用在各種計算機領域中,尤其是在移動數據領域中;希望能通過PDA等移動設備直接和USB外設通信,使得USB能應用在沒有PC的領域中。USB的拓撲結構中居於核心地位的是Host(也稱為主機)。任何一次USB的數據傳輸都必須由主機來發起和控制,所有的USB外設都只能和主機建立連接,任何兩個外設之間或是兩個主機之間無法直接通信。而目前,大量的扮演主機角色的是個人電腦PC。因此,我們目前所買到和使用的USB移動設備,都是USB的外設,比如USB的移動硬盤、USB接口的數碼相機等。所有這些設備都只能在PC上使用,只能通過PC來進行相互的文件和數據交換。這正是USB的弱點。數碼相機和mp3播放器等類似的產品都是作為USB的外設。現在的技術條件下,我們只能通過PC作為數碼文件的中介。我們首先是把數碼相機連接到PC上,並且安裝相應的驅動程序和用戶界面,把數碼相機存儲盤上的內容復制到PC硬盤上。然後,把USB打印機連接到PC。最後,再把照片打印出來。整個過程,很復雜,更是不方便。有了嵌入式的USB主機,就不需要PC的介入。這裡,需要做的就是在MP3播放器、數碼相機裡嵌入USB主模塊,使其由傳統的USB外設成為USB主機。這樣,這些嵌入式的主機就可以直接和移動硬盤、打印機等USB的外設連接,實現所需的功能。USB 主機設計傳統意義的USB開發,僅僅是對USB外設的開發。USB底層驅動程序和USB主控制器驅動程序都由Windows等操作系統提供。有關這些驅動程序的細節過程都蒙著一層神秘的面紗。所以,要設計USB 主機,就須設計這兩部分驅動程序,Windows源碼不公開,這些細節資料就無從得到。但是,嵌入式Linux 操作系統具有得天獨厚的條件。當然,目前並不是所有版本的嵌入式Linux(如UCLinux)都支持USB設備。是否支持USB設備是由Linux核心決定的。因此,嵌入式Linux操作系統采用什麼版本的核心就成為是否支持USB設備的關鍵。一般而言,Release版的2.2.XX及以前的版本都不支持USB設備,2.4.XX及以後的版本都加入了對USB設備的支持。因此,在做開發之前應該將內核升級為2.4.10或以上版本。USB設備是通過USB總線連接到USB主機上。主機通過與設備相連的邏輯通道與設備進行通信。在通信過程中,USB主機充當數據流的源端或者目的端。在USB系統設計中,USB主機接口的設計一直是其難點所在。USB主機控制器完成了主機與設備之間的電氣和協議層的匹配,主要包括以下功能:串並轉換、幀起始、數據處理、協議使用、傳輸錯誤處理、遠程喚醒、根Hub、主機系統接口等。在嵌入式Linux平台上進行USB主機開發所需開發環境:1.開發主機:Linux系統,開發主機上還裝有目標系統上運行的uCLinux操作系統和應用軟件的所有源代碼,以及編譯、調試這些源代碼所需的工具軟件。2.目標系統:嵌入式Linux系統及其電路板。下面簡要介紹一下USB 主接口的軟硬件設計:USB Host接口的硬件設計 USB總線與計算機系統的接口部分就是主機控制器。它可以被看作一個硬件、固件和軟件的綜合體。USB主機與設備之間的通信最終都將通過USB主機控制器和USB設備的總線接口之間相連的電纜進行,任何一個輸出請求都是由主機控制器組織成包的形式發往總線的。USB總線中只有一個主機,它是USB樹形結構的根,通過一個根Hub來提供一個或多個連接點,從它分發連接著各個USB設備。USB主機控制器硬件接口設計的目的是在嵌入式Linux系統開發板上增加一個USB Host接口,使其能夠作為USB主機與各種USB Slave設備進行通訊。硬件上首先要選擇支持USB主機的接口芯片。現在比較成熟的有Cypress公司的SL811HS和Philips公司的ISP1161。並且選用一款合適的MCU和MPU來控制。這款MCU的選用比較講究。因為,整個USB協議框架是非常復雜的。那麼這就需要MCU具有足夠的RAM,用以處理大量的數據緩沖區、大量的變量、數據存儲等。8KB的RAM是最基本的要求,而且越大越好。其次系統要有大量的程序存儲區,一般Flash的需求大概在10KB~60KB左右。之所以有如此大的范圍,是因為USB定義很多的類,用以支持不同類型的USB外設。每一類就有其不同的驅動程序,因此,設計的嵌入式USB主機支持的類越多,那麼需要的程序空間就越大。例如,要實現Mass Storage類就需要10K所有的Flash空間。本人推薦USB Host接口芯片選用Scanlogic公司的SL811HS/T。這是市場上為數不多的,既能用作Host模式又能用作Slave模式的,具有標准微處理器總線接口USB控制芯片,它適合於非PC設備。在Host模式下,它支持嵌入式主機與USB外圍設備的通信;在Slave模式下,可以作為主機的一個外設。固件方面,就是要實現完整的USB主機協議類,包括設備的上電檢測、設備重起、分配地址、讀取設備的各種描述符等基本的操作,更重要的是要實現每一類USB設備的協議棧。簡單來說,每一類設備的協議棧就是一個特定的驅動程序。傳統的做法,我們是在PC上使用WDM來編制驅動程序。這裡,在嵌入式系統的開發環境裡就要像開發嵌入式的軟件一樣,可以用C語言、匯編語言等來實現。USB Host接口的軟件設計 在Linux操作系統中,驅動程序的加載方式為:1.將驅動程序作為可加載的模塊,在系統超級用戶(Root)權限下使用insmod命令動態加載,使之成為系統核心的一部分。對於USB設備而言,由於可熱插拔,一般采用模塊化的設備驅動程序。USB主機控制器驅動程序一般也采用這種方法。2.將設備驅動程序的源代碼加進系統核心,系統啟動後自動加載驅動。USB協議棧程序一般采用這種方法加入內核,進而產生一個叫做USB核心的子系統。這個子系統提供了許多數據結構、宏定義、功能函數和應用程序接口(API)來對硬件或設備進行支持。完成驅動程序後,要進行系統配置 ,通常步驟如下:1.編寫Makefile文件。2.增加設備文件。因為USB設備主要都是通過快速串行通訊來讀寫數據,故一般作為字符設備。3.在目標系統上插入驅動程序模塊到內核。編譯完成後,驅動程序作為一個模塊動態加入到uCLinux內核中。至此,USB主機控制器的軟件設計完成。這個嵌入式的USB主機能夠具有同裝有Windows 操作系統的PC一樣的功能;能夠直接對USB的移動存儲設備進行讀取;能夠自動識別設備並把設備配置為標准的磁盤驅動器;能夠直接進行文件的讀娶格式化等一系列操作。為了通用,可以選用朗科公司的USB優盤作為外設。目前整個系統可以直接對優盤進行操作,讀取優盤中的文件、寫文件到優盤中等。可以在嵌入式Linux平台上運行USB主機,作為嵌入式設備與USB Slave設備進行通信。小結我們對在嵌入式Linux平台上進行USB主機控制器的軟、硬件設計做了簡單的介紹。設計的重點和難點主要在於主機控制器芯片的驅動程序開發,但作為開放系統,在Linux上開發設備驅動程序有著其它嵌入式系統不可比擬的優勢,大量的開放源碼無疑可以加速開發的進程並使得其應用更加的廣泛。因此,USB作為一種新型的高速外設總線,在嵌入式Linux領域必定有著廣闊的應用前景。




 

httpg://www.Stcore.com   收集整理

 



Copyright © Linux教程網 All Rights Reserved