1 綜述 移動數據交換和存儲,是近年來IT行業的熱點。如今,各式各樣的移動存儲有如雨后春筍般出現。從最早的存儲量為幾K、能存儲用戶個人信息的USB小鑰匙,到容量可與PC硬盤媲美的USB活動硬盤,再到以Flash作為存儲介質的真正能夠“移動”起來的USB閃盤和優盤,直到今天大量的PC外設和多媒體家電中大量使用的數據存儲器……可見,數據交換的可移動性和便捷性是整個數字化時代大廈的根基。移動數據交換刺激了IT業的發展,便利了人們的生活。 與此同時,我們還應注意到這樣一個問題:移動數據交換業,是伴隨著通用串行總線(Universal Serial Bus,簡稱為USB)的成熟而興起的。USB既是數據交換的媒介,又是其核心。可以這樣說,沒有USB,就不會有移動數據業務如此迅猛地發展。 2 為什么要開發嵌入式的USB主機? 從USB問世,到協議規范2.0版本,USB在不斷自我完善,并走向成熟。從普通計算機用戶,計算機工程師,到硬件芯片生產廠商,都已經完全認可了USB。廠商對于USB的硬件和軟件支持的也越來越完備,現在開發一 個USB外設產品,所需要投入的成本和時間大大降低了,幾年前是沒有辦法做到這一點的。但是,隨著USB應用領域的逐漸擴大,人們對于USB的期望也越來越高,希望USB能應用在各種計算機領域中,尤其是在移動數據領域中,希望能通過PDA等移動設備直接和USB外設通信,使得USB能應用在沒有PC的領域中。 非PC應用領域? 這正是USB一個致命的弱點。USB的拓撲結構中居于核心地位的是Host(也稱為主機),任何一次USB的數據傳輸都必須由主機來發起和控制,所有的USB外設都只能和主機建立連接,任何兩個外設之間或是兩個主機之間無法直接通信。而目前,大量的扮演主機角色的是個人電腦PC。因此,我們目前所買到和使用的USB移動設備,都是USB的外設(device),比如USB的移動硬盤、比如USB接口的數碼相機等等。所有這些設備都只能在PC上使用,只能通過PC來進行相互的文件和數據交換。沒有了PC,這些設備就“失靈”了(指數據交換的功能)。 因此,“如何將USB應用到嵌入式領域?如何實現USB點對點的通信?”等問題,開始進入了USB開發者的討論議程。正是在這種新的需求之下,USB 主機的嵌入式應用成了USB領域新的興奮點。 正是在這種背景下,業界和用戶的需求呼喚USB主機實現嵌入式化,也就是開發和設計嵌入式的USB主機。 3 嵌入式USB主機在數據存儲和交換中的應用 我們來看一幅圖,如圖1所示,這里有3個我們日常生活中可能碰到的場景: ● 朋友的移動硬盤上有一些好聽得MP3歌曲,我想直接通過我的MP3播放器拷貝過來; ● 想換掉手機,買個PDA,手機里的電話本想直接復制到PDA中; ● 出門在外,用數碼相機照了很多漂亮的風景,想在身邊的打印機上直接打印出來; …… 這樣的場景我們可能早已夢想著能夠實現。圖中的每一個設備都是一個USB的外設,現在的技術條件下,我們只能通過PC作為數碼文件的“交換器”。比如第3中場景,我們首先是把數碼相機連接到PC上,并且安裝相應的驅動程序和用戶界面,把數碼相機存儲盤上的內容復制到PC硬盤上。然后,把USB打印機連接到PC。最后,再把照片打印出來。整個過程,很是復雜,更是不方便。 因此,有了嵌入式的USB主機,那么圖1所示的場景將不再是夢想!這里,需要做的就是在MP3播放器、數碼相機里嵌入USB主機模塊,使其由傳統的USB外設成為USB主機,這樣,這些嵌入式的主機就可以直接和移動硬盤、打印機等USB的外設連接,實現特定的功能。那么,而當我們需要再次把數碼相機等連接到PC上時,就需要讓其恢復USB外設的功能。 可以預見,嵌入式USB 主機最大的市場和增長點在于移動家電,比如PDA與USB記憶棒傳遞數據、MP3之間傳遞歌曲、數碼相機連接打印機。因此,具有很強的應用背景和市場前景。 4 以嵌入式USB主機作為核心的USB On-The-Go USB On-The-Go,顧名思義,是USB應用在便攜式移動設備領域中,因此,我們姑且將其翻譯為“便攜式USB”(或者“移動USB”),簡記成USB OTG。符合USB OTG的設備完全拋開了PC,既可以作為Host,也可以作為外設,而與另一個OTG設備直接實現點對點(Pear to Pear)通信。因此,這類OTG設備也被稱為是雙角色設備(Dual-Role Device,簡稱為DRD),并能夠根據接入設備的特性和數據傳輸過程中的情況,自動切換為Host或是外設。 可見,USB OTG正是符合了圖1所示的場景需求。 我們注意到,USB OTG雖然是具備了更強大的功能,但是其核心仍然是嵌入式USB主機,只不過需要加入一個能夠自動切換角色的功能。而這個新功能的實現,就要借助于USB OTG接口芯片的物理層來實現。而且,在很多場合下,不需要實現USB外設的功能,只需要實現USB主機功能。比如一個工業數據采集的領域中,我們需要使用USB優盤作為數據存儲的載體,那么就要在項目中實現一個嵌入式的USB主機來采集數據,并且把數據存儲到優盤中。這里,這個USB主機就不必實現外設的功能,因為其根本不用連接到PC。而且,很多USB方案的提供商,在設計USB OTG時,就是設計一個嵌入式的USB主機,然后通過軟件實現角色切換的功能。 可以說,嵌入式USB主機,是整個USB系統發展的未來和趨勢。 5 設計嵌入式USB主機 傳統意義的USB開發,僅僅是對USB外設的開發,USB底層驅動程序和USB主控制器驅動程序都由Windows等操作系統提供,有關這些驅動程序的細節過程都蒙著一層神秘的面紗。所以,要設計USB 主機,就須設計這兩部分驅動程序,Windows源碼不公開,這些細節資料就無從得到。 因此,設計就要遵循USB主機的協議規范。可以閱覽參考文獻。具體的設計就要包括固件Firmware和硬件兩大部分。 硬件上首先要選擇USB主機的接口芯片。現在比較成熟的有Cypress公司的SL811HS和Philips公司的ISP1161。并且選用一款合適的MCU和MPU來控制。那么這款MCU的選用需要比較講究。因為,整個USB協議框架是非常復雜的。那么這就需要MCU具有足夠的RAM,用以處理大量的數據緩沖區、大量的變量、數據存儲等等。一般8KB的RAM是最最基本的要求,而且越大越好,當然,小到2K,也可以實現基本功能,但是已經非常捉襟見肘了。其次系統要有大量的程序存儲區,一般Flash的需求大概在10~60KB左右。之所以有如此大的范圍,這是因為USB定義很多的類,用以支持不同類型的USB外設。每一類就有其不同的驅動程序,因此,設計的嵌入式USB主機支持的類越多,那么需要的程序空間就越大。有個例子就是,要實現Mass Storage類就需要10K所有的Flash空間。 固件方面,就是要實現完整的USB主機協議類,包括設備的上電檢測、設備重起、分配地址、讀取設備的各種描述符等基本的操作,更重要的是要實現每一類USB設備的協議棧。簡單來說,每一類設備的協議棧,就是一個特定的驅動程序,傳統的做法,我們是在PC上使用WDM來編制驅動程序。這里,在我們的嵌入式系統的開發環境里,我們就要像開發嵌入式的軟件一樣,可以用C語言、可以用匯編語言等來實現。限于篇幅所限,這里,無法進一步展開。筆者將在以后進一步展開討論。 筆者目前就已經設計出了一款USB主機的演示系統,選用的USB主機接口芯片是Cypress公司的SL811HS,MCU選用的是Motorola公司的16位單片機MC68HC912D60A。整個USB主機系統支持的是USB的Mass Storage類,也就是海量存儲類,這一類是USB專門為支持磁盤存儲功能設計的。因此,現在的結果是,這個嵌入式的USB主機能夠具有同裝有Windows 2000操作系統的PC一樣的功能,能夠直接對USB的移動存儲設備進行讀取,能夠自動識別設備并把設備配置為標準的磁盤驅動器,因此能夠直接進行文件的讀取、格式化等一系列操作。為了通用,選用了朗科公司的USB優盤作為外設。目前整個系統可以直接對優盤進行操作,讀取優盤中的文件、寫文件到優盤中,等等。 6 嵌入式USB主機的其他應用前景分析 1. 以嵌入式USB主機做為核心的數據采集系統,可以應用在大量工業和民用領域中,比如城市輕軌鐵路的數據采集黑匣子中。中國幅員遼闊,鐵路線縱橫馳騁,如果每輛機車上都安裝一套這樣的“黑匣子”系統,那么需求量將是非常大的,同時將帶來很大的經濟效益和市場前景。 2. 嵌入式USB 主機作為USB的延伸,國外處于剛剛起步的階段,僅有不多的半導體公司提供接口芯片,還沒有完整的嵌入式USB 主機產品上市。廠家和USB論壇所能提供的Demo也限于依靠嵌入式操作系統WinCE和Linux等。國內的研究也剛開始起步。因此,項目研究具有一定的領先和前瞻性。 3. 在開發USB 主機,編寫底層驅動程序的同時,注意整個系統的可移植性,使得有關USB通信的各個任務模塊化,盡量編寫API。這樣,就可以在不同的操作系統、不同的主控制器CPU上盡量方便的實現USB 主機的功能。這就可以為日后嵌入式USB 主機的產品化和進一步研究打好基礎。這個工作有待進一步完善。 |