采用 ARM9 處理器內(nèi)核的評估套件到貨后,項(xiàng)目重新開始。但是,讓這塊電路板運(yùn)行起來的過程又印證了一個(gè)道理,即不確定性會(huì)產(chǎn)生錯(cuò)誤的假設(shè)。這個(gè)過程要求我們安裝 Windows CE Platform Builder 5.0、ActiveSync 3.7、Embedded Visual C++ 4.0 sp4,以及用于臺式工作站上 Platform Builder 的 AT91RM9200EK BSP。為 AT91RM9200EK 目標(biāo)建立一個(gè) CE 圖像是一個(gè)簡單但卻要經(jīng)過很多步驟的過程。
評估板采用一個(gè)三步過程裝載 Windows CE,因?yàn)樗罅?不能常駐板上。第一步是將來自串行數(shù)據(jù)閃存的引導(dǎo)裝入程序裝入 SRAM,并執(zhí)行它。在通過串行連接建立并配置好引導(dǎo)裝入程序以后,引導(dǎo)裝入程序?qū)?Windows CE 圖像通過一個(gè)以太網(wǎng)連接裝入 SDRAM,并起動(dòng)它。最后,在 SDRAM 中執(zhí)行 Windows CE 圖像。
在安裝帶有引導(dǎo)裝入程序的串行數(shù)據(jù)閃存卡時(shí),出現(xiàn)了讓我們困惑的事情。我們按照電路板的說明將卡插入評估板底部的槽中,然后引導(dǎo)電路板。但這樣做了以后,串行口卻出現(xiàn)了意外的情況。此時(shí),我們并沒有看到裝入程序,而是沒完沒了地重復(fù)一個(gè)字符 C。問題的原因在于 “電路板底部” 這句話,更糟的是說明書沒有電路板示意圖。我們最終在電路板背面發(fā)現(xiàn)了另一個(gè)插槽,它與電路板前面的插槽位置相同。將數(shù)據(jù)卡插到電路板背面的槽內(nèi),我們就能夠建立正常的串行調(diào)試會(huì)話了。
我們可以配置裝入程序,通過以太網(wǎng)初始化 Windows CE 圖像的下載工作,但是,下載看來并不正常。最終,我們確認(rèn)隨評估板提供的以太網(wǎng)電纜是交叉式連接的,我們是將評估板連接到路由器上,而不是直接連接到工作站。如果我們能早點(diǎn)注意到電纜頭上的紅色標(biāo)記就好了,當(dāng)然工具包能提供兩種以太網(wǎng)電纜也可以避免這個(gè)困境。如果工作站專門與目標(biāo)電路板溝通,交叉連接的電纜就沒有任何問題。但在本項(xiàng)目中,一臺工作站要作很多事情,因此要將其連接到網(wǎng)絡(luò)上。
碰到麻煩和損失一些項(xiàng)目時(shí)間的另一原因,涉及到要在 Windows CE 下通過 USB 端口建立一個(gè) ActiveSync 連接。但是,這已經(jīng)不是第一個(gè)在 ActiveSync 連接上遇到麻煩的項(xiàng)目了(參考文獻(xiàn) 2)。
USBoIP
項(xiàng)目進(jìn)入正軌后,我們發(fā)現(xiàn)了一家提供 USB 服務(wù)器的公司 Keyspan 有一款產(chǎn)品(型號是 US-4A),它可以通過以太局域網(wǎng)將 USB 設(shè)備接入 Mac 或 PC。Keyspan 的產(chǎn)品是以一個(gè)嵌入式微控制器和 Cypress 的 USB EZ 主控芯片為基礎(chǔ)的。USB 服務(wù)器的方法與我們的項(xiàng)目目標(biāo)相當(dāng)一致。Keyspan 公司的副總裁與首席技術(shù)官 Eric Welch 為我們提供技術(shù)支持,幫助我們了解項(xiàng)目的底層詳情。我們也找到了其他一些公司,如 Icron,它提供一個(gè)采用 Freescale 處理器的 USB 電纜替代方案(見附文“替換電纜”)。
要在臺式機(jī)與 USB 服務(wù)器之間通過網(wǎng)絡(luò)傳輸 USB 數(shù)據(jù),主控系統(tǒng)和 USB 服務(wù)器上的軟件必須按普通 USB 連接進(jìn)行修改。USB 服務(wù)器轉(zhuǎn)過來起到 USB 設(shè)備的主控制器作用。為避免混淆,我們用 Keyspan 的術(shù)語“主客戶機(jī)”來表示臺式機(jī)上的主控制器,因?yàn)樗鼘?shí)際上是與 USB 服務(wù)器通信,而不是與 USB 設(shè)備通信。另外,我們采納了 Keyspan 的術(shù)語“NHCI”(網(wǎng)絡(luò)主控制器接口),用它代替 USB 規(guī)范中定義的 OHCI(開放式主控制器接口)或 EHCI(增強(qiáng)型主控制器接口)。
在主客戶機(jī)一端,軟件會(huì)遍查連接到 USB 服務(wù)器上的各個(gè)設(shè)備,看它們是否已在本地插入,這樣設(shè)備管理器會(huì)裝入相應(yīng)的類或供應(yīng)商為該設(shè)備提供的驅(qū)動(dòng)程序。這些驅(qū)動(dòng)程序?qū)⑴c微軟的 USB 棧進(jìn)行交互,因此 NHCI 主控軟件也必須仿真這個(gè)接口。于是,客戶端的軟件有兩個(gè)任務(wù):當(dāng)設(shè)備被連接時(shí)通知設(shè)備管理器;仿真微軟的 USB 棧通信 API。
當(dāng)類或供應(yīng)商驅(qū)動(dòng)程序請求遠(yuǎn)程連接的 USB 設(shè)備時(shí),NHCI 協(xié)議將請求打包后,通過 TCP/IP 發(fā)送。主客戶機(jī)軟件的最終段在網(wǎng)絡(luò)上探測 USB 服務(wù)器,使之對用戶可見。這里有一個(gè)實(shí)現(xiàn)細(xì)則,即網(wǎng)絡(luò)部分是否應(yīng)該與 USB 棧的仿真隔離開來,如雙總線仿真器驅(qū)動(dòng)程序。舉例來說,微軟的驅(qū)動(dòng)程序開發(fā)工具包中有一個(gè)“烤面包”實(shí)例,它演示了如何編寫一個(gè)內(nèi)核總線仿真器驅(qū)動(dòng)程序,它向設(shè)備管理器報(bào)告子設(shè)備的情況,并管理所有即插即用電源請求。NHCI主客戶機(jī)端軟件仿真本地 USB,與微軟 USB 棧沒有任何關(guān)系,而是代替它來工作。除了主客戶機(jī)上的 USB 棧以外,USB 服務(wù)器也含有部分的 USB 主控棧,因?yàn)閷ζ浔镜剡B接的設(shè)備來說,它是一個(gè)主控制器。本地 USB 棧允許服務(wù)器完成普通的輪詢工作,否則主控系統(tǒng)會(huì)通過網(wǎng)絡(luò)進(jìn)行發(fā)送。USB 服務(wù)器提供集線器支持,因而可以管理本地帶寬,獨(dú)立處理集線器下游的設(shè)備,即它可以將這些下游設(shè)備連接到不同的主客戶機(jī) ,以支持串行共享。
主客戶機(jī)上的 NHCI 軟件需要對 USB 系統(tǒng)軟件的其他部分作修改。由于一個(gè) USB 上的所有設(shè)備都共享總線帶寬,主控制器要做傳輸管理,并為每個(gè)設(shè)備分配帶寬。但是,來自 USB 服務(wù)器的數(shù)據(jù)不會(huì)與任何本地 USB 共享帶寬,因?yàn)閿?shù)據(jù)與信息是通過網(wǎng)絡(luò)傳送的。網(wǎng)絡(luò)傳輸?shù)难舆t要高于本地 USB。因此,底層驅(qū)動(dòng)程序需要有比較寬松的時(shí)序要求。只要類驅(qū)動(dòng)器不需要嚴(yán)格的時(shí)間限制,這種方法也是可以用的。有些情況下,通過網(wǎng)絡(luò)控制 USB 設(shè)備可能無法完成,或者與用戶期望的方式不相符。對無線連接的傳輸延遲問題來說,對底層時(shí)序?qū)捤傻囊笃鹬陵P(guān)重要的作用。
共享
本項(xiàng)目的概念與各種無線 USB 規(guī)格和產(chǎn)品有類似之處,目的是為了替換 USB 主控與設(shè)備之間的點(diǎn)對點(diǎn)連線。但有一點(diǎn)這些方案都沒有涉及,即讓多個(gè)主控制器連續(xù)地在網(wǎng)絡(luò)上共享 USB 設(shè)備。
用 USB 服務(wù)器模型在一個(gè)網(wǎng)絡(luò)連接上擴(kuò)展 USB 可提供這種能力,這是 USB 所沒有的。Keyspan公司 的 Welch 說:“我們把串行共享模型看作 USB 在網(wǎng)絡(luò)上的抑制器應(yīng)用。它可以實(shí)現(xiàn)所有功能的多方共享,例如一臺多功能打印機(jī)上的傳真、掃描儀和內(nèi)存卡接口。你可以用市場上既有的 USB 設(shè)備獲得這種功能,而不必等待重新設(shè)計(jì)一款產(chǎn)品。”
最近推出的無線 USB 規(guī)范也解決了用無線網(wǎng)絡(luò)功能替代 USB 設(shè)備與主控之間連接的問題(參考文獻(xiàn) 3)。在這一點(diǎn)上,該規(guī)范只關(guān)注連線的替換,而沒有考慮通過網(wǎng)絡(luò)連接時(shí)多設(shè)備串行共享的擴(kuò)展問題。該規(guī)范表示,USB 會(huì)話將能夠與主控計(jì)算機(jī)上的其他設(shè)備共享超寬帶射頻頻段,而規(guī)范把支持這種帶寬共享的任務(wù)放在了無線 USB 主控端上。如果主控端必須考慮與其他設(shè)備共享帶寬,那么為什么不利用無線網(wǎng)絡(luò)連接這個(gè)很好的機(jī)會(huì),在同一網(wǎng)絡(luò)上與其他主控計(jì)算機(jī)共享設(shè)備和帶寬呢?
USB 接口已證明自己是一個(gè)有用且成功的電氣與邏輯協(xié)議。設(shè)計(jì)師也用它增加了很多接口功能,如與主控計(jì)算機(jī)的無線連網(wǎng),無需用戶打開計(jì)算機(jī)外殼或者關(guān)閉計(jì)算機(jī)。本親自動(dòng)手項(xiàng)目驗(yàn)證了 USB 設(shè)備連接與共享的擴(kuò)展能力,并且無需重新設(shè)計(jì)制造,無需等待未來的 USB 設(shè)備就可直接發(fā)揮連接性功能。
參考文獻(xiàn)
1. Cravotta, Robert, "Gaming as serious business," EDN, Feb 7, 2002, pg 48.
2. Cravotta, Robert, "Forge ahead?," EDN, March 6, 2003, pg 50.
3. USB Implementers Forum, Wireless Universal Serial Bus Specification, Revision 1.0, 2005, www.USB.org.
USB 術(shù)語
要開發(fā)和支持 USB(通用串行總線)設(shè)備,就需要理解 USB 2.0 規(guī)范以及與之相關(guān)的 OHCI(開放式主控制器接口)規(guī)范的內(nèi)容(參考文獻(xiàn) A 與 B)。我們亦參考了 Jan Axelson 關(guān)于該項(xiàng)目的著作(參考文獻(xiàn) C)。下面就是出自這些參考書的術(shù)語解釋,它們可能會(huì)幫助讀者熟悉 USB 術(shù)語。
USB 是一種輪詢式電纜總線,它支持主控計(jì)算機(jī)與同時(shí)接入多個(gè)外設(shè)之間的數(shù)據(jù)交換。任何 USB 系統(tǒng)只有一個(gè)主控端。主計(jì)算機(jī)系統(tǒng)上的 USB 接口是主控制器,或 USB 主控端。主控制器的實(shí)現(xiàn)可以是硬件、固件或軟件的組合。它初始化所有數(shù)據(jù)傳輸,因而所連接的外設(shè)可以通過一個(gè)由主控端安排、基于令牌的協(xié)議來共享 USB 帶寬?偩支持熱插拔外設(shè),用戶可以在主控端和其它外設(shè)處于工作狀態(tài)時(shí)插入、配置、使用和拔下外設(shè)。USB 2.0 支持三種總線傳輸速度:高速 480 Mbps、全速 12 Mbps 和低速 1.5 Mbps。
USB 設(shè)備的一個(gè)功能是為系統(tǒng)提供一種能力,一個(gè)物理設(shè)備能擁有一個(gè)以上的功能。USB設(shè)備可分為多個(gè)設(shè)備類,如集線器、人機(jī)接口、打印機(jī)、掃描儀或海量存儲設(shè)備。USB 設(shè)備必須保維自標(biāo)識和一般配置的信息,還必須經(jīng)常顯示與所定義的 USB 設(shè)備狀態(tài)相一致的狀態(tài)。集線器設(shè)備類是一種可提供 USB 設(shè)備接入點(diǎn)的 USB 設(shè)備。
USB設(shè)備與 USB 主控端連接成一種多層星狀拓?fù)浣Y(jié)構(gòu)?偩的每個(gè)線段都是主控端與一個(gè)集線器或一個(gè)功能,或者是連接到其他集線器或功能的一個(gè)點(diǎn)對點(diǎn)連接。各個(gè)集線器均位于每個(gè)星狀結(jié)構(gòu)的中心。主控系統(tǒng)整合有一個(gè)根集線器,提供一個(gè)或多個(gè)接入點(diǎn)。集線器保維狀態(tài)位,報(bào)告每個(gè)端口上 USB 設(shè)備的連接與否情況。主控端通過查詢集線器恢復(fù)這些狀態(tài)位。在插入時(shí),主控端會(huì)起動(dòng)該端口,并在默認(rèn)地址上通過設(shè)備的控制流水線尋址該 USB 設(shè)備。用于主控端和設(shè)備端的 USB 電纜連接器各不相同,并有密鑰保護(hù),使用戶不會(huì)插入錯(cuò)誤的設(shè)備。這種限制很重要,因?yàn)?USB 主控端必須滿足的要求要多于 USB 設(shè)備,包括為每臺設(shè)備提供電源和地線,即一個(gè)額定 5V電壓和最高500 mA 電流。每個(gè)電纜段可以長達(dá) 5m,并且在主控端和設(shè)備之間最多可以級聯(lián)五個(gè)集線器,這樣外設(shè)距主控端最遠(yuǎn)可達(dá) 30m。如果要將外設(shè)距離擴(kuò)展到 30m 以上,則必須用其它接口的長距電纜,例如本動(dòng)手項(xiàng)目就使用了以太網(wǎng)連接。
在主機(jī)和設(shè)備端點(diǎn)上,源與目標(biāo)之間的 USB 數(shù)據(jù)傳輸模型是一個(gè)管線。數(shù)據(jù)流管線沒有 USB 定義的結(jié)構(gòu),而消息數(shù)據(jù)管線則有。管線有相應(yīng)的數(shù)據(jù)帶寬、傳輸服務(wù)類型,以及端點(diǎn)特性,如定向和緩沖區(qū)大小。大多數(shù)管線在用戶配置好 USB 設(shè)備后就存在了。一旦用戶為設(shè)備供電,就存在一個(gè)消息管線,即默認(rèn)控制管線,它提供對設(shè)備的配置、狀態(tài)和控制信息的訪問。
總線枚舉(Bus enumeration)功能是識別連接到總線上的設(shè)備,并為該設(shè)備分配獨(dú)特的地址。由于 USB 允許在任何時(shí)候接入、拔出 USB 設(shè)備,因此總線枚舉對 USB 系統(tǒng)軟件是一個(gè)不間斷的活動(dòng)?偩枚舉也包括對設(shè)備更換的檢測與處理。
參考文獻(xiàn)
1. USB Implementers Forum, Universal Serial Bus Specification, Revision 2.0, April 27, 2000, http://www.usb.org/developers/docs/usb_20_02212005.zip.
2. USB Implementers Forum, Open Host Controller Interface Specification for USB, Release 1.0a, 1999, http://h18000.www1.hp.com/productinfo/development/openhci.html.
3. Axelson, Jan, USB Complete, Third Edition, Lakeview Research, 2005.
替換電纜
Icron 方案不僅使 USB(通用串行總線)設(shè)備能夠在網(wǎng)絡(luò)上運(yùn)行,而且其目的還在于用專用無線接口替換 USB 電纜。Icron 的無線架構(gòu)采用了本地與遠(yuǎn)程 ExtremeUSB 子系統(tǒng)加密卡(Lex 和 Rex dongle),將 USB 設(shè)備連接到主系統(tǒng)上(圖 A)。主 USB 系統(tǒng)軟件不用修改,因?yàn)?Lex 和 Rex 會(huì)處理時(shí)序的適應(yīng)問題。

Turnaround Timer(回轉(zhuǎn)定時(shí)器)參數(shù)限制了主控端或設(shè)備端對請求或告知收到消息





