USB端口找到新居,落戶嵌入式系統(tǒng)
2004年5月B版
安裝過PC的人員都知道,通用串行接口(USB)具有與即插即用相似的性能。因而,將USB端口移植到嵌入式系統(tǒng)是一種方便的控制外部設(shè)備的辦法。畢竟USB只有兩條信號線和兩條電源連接線,設(shè)計一個USB端口不會有什么困難吧。這一任務(wù)說起來簡單,對設(shè)計者卻有不少困難。不過,供應(yīng)商可以提供從板卡到軟件的一切幫助。
在一個嵌入式系統(tǒng)上添加USB端口的最簡單的辦法是采用基于Windows的計算機(jī)。很多單板機(jī)(圖1)提供了內(nèi)置的USB端口,并且運(yùn)行Windows 軟件。許多USB外設(shè)都裝有現(xiàn)成可用的Windows驅(qū)動器。當(dāng)你需要采用實(shí)時操作系統(tǒng)(RTOS)時,任務(wù)就會變得困難起來。若干家公司提供了能夠簡化USB端口設(shè)計的芯片和軟件,還可以獲得在片上系統(tǒng)添加端口的知識產(chǎn)權(quán)(IP)許可證。
USB設(shè)備可以扮演主控或外設(shè)的雙重角色。外設(shè)無需太高的智能度,但主USB端口卻要求具備處理能力和控制軟件。USB(OTG)規(guī)范考慮到讓某些外設(shè)可以具備有限的主控功能,這樣USB設(shè)備能在沒有PC基主控器的情況下實(shí)現(xiàn)通信。
最新標(biāo)準(zhǔn)(USB 2.0)提供的總線速率是1.5Mbit/s(低速)、12Mbit/s(全速)和480Mbit/s(高速)。可惜,很多用戶認(rèn)為標(biāo)有“USB 2.0”字樣的設(shè)備一直在480Mbit/s的速率工作。但很多遵循USB 2.0的設(shè)備是在較慢的傳輸速率下工作。
在規(guī)劃一個嵌入式應(yīng)用時,你要確切知道使用什么USB設(shè)備——打印機(jī)、海量存儲單元還是I/O控制器。然后,決定你需要多少端口,是否需要主控、外設(shè)還是兩種端口都要。大多數(shù)嵌入式應(yīng)用并不需要外設(shè)端口。
你在評估端口配置時,應(yīng)該決定你的數(shù)據(jù)率需求。例如,雖然一個應(yīng)用可以平均10Mbit/s的速率進(jìn)行數(shù)據(jù)傳輸,但也可能需要以更高的速率傳輸突發(fā)性數(shù)據(jù)。請記住,要實(shí)現(xiàn)更高的數(shù)據(jù)傳輸,就需要在USB連接的兩端采用更大的緩沖區(qū)。你可能需要將性能要求稍微降低一些以減少設(shè)計所需的昂貴緩沖。
如果你對數(shù)據(jù)率沒有把握,可以從USB主控芯片廠商那里購買開發(fā)板,然后在PC上對你的應(yīng)用進(jìn)行模擬。主控芯片供應(yīng)廠商包括TransDimensions,Cypress半導(dǎo)體,NEC和Philips半導(dǎo)體公司。以TransDimension為例,它提供2端口和3端口的主控芯片和軟件。另外,很多公司也出售作為USB外設(shè)控制器的芯片。
主控制器芯片的支持軟件有多種,從支持Philips ISP1561的基于Windows的驅(qū)動器,到支持TransDimension器件的多種RTOS軟件。Cypress提供用于EZ主控IC的Linux和VxWorks驅(qū)動器。所有的USB主控端口都需要一個“堆?!?,它的簡單含義是軟件的分層布置,如圖2所示。各層形成從底部物理層(連線和芯片)一直到頂部應(yīng)用軟件層的結(jié)構(gòu)。
在物理層,芯片和IP廠商已經(jīng)采用了標(biāo)準(zhǔn)的軟件-接口連接,它們可以簡化嵌入式設(shè)計中主控器的運(yùn)用。這樣,堆棧往往遵循如下標(biāo)準(zhǔn):開放式主控制器接口(OHCI)、通用主控制器接口(UHCI),或者更新的為USB2.0規(guī)范開發(fā)的增強(qiáng)型主控制器接口EHCI。這些規(guī)范描述了主控制器所用的寄存器級操作。通過這些標(biāo)準(zhǔn)的采用,芯片制造商提供了驅(qū)動器軟件的通用接口。OHCI、UHCI和EHCI規(guī)范明確了主控制器寄存器和驅(qū)動器軟件之間的互操作。
通常,硬件抽象層,或者包裝層將堆棧和驅(qū)動器與特定微處理器的具體實(shí)現(xiàn)細(xì)節(jié)屏蔽開來。設(shè)計者可以獲得包裝層的源代碼,因此能對它進(jìn)行修改,以便適應(yīng)所選定的具體微處理器和RTOS。如果你不想深入了解這一層的軟件細(xì)節(jié),可以由供應(yīng)商對包裝層進(jìn)行定制開發(fā)。你可能會發(fā)現(xiàn),啟動項(xiàng)目時即采用兼容的微處理器、堆棧、RTOS和USB主控制器將使開發(fā)變得更為容易。
除了堆棧,開發(fā)者還將需要控制外設(shè)的驅(qū)動器。雖然Windows、Windows CE和Linux可以調(diào)用用于多種外設(shè)的、種類極為豐富的驅(qū)動程序,但你還是會發(fā)現(xiàn)其他操作系統(tǒng)沒有提供同樣的多種選擇。IC廠商們提供了USB級驅(qū)動器,它們可以提供控制同類器件所需的一組最小的函數(shù)集。各類器件包括打印機(jī)、照相機(jī)、人機(jī)接口、海量存儲設(shè)備、通信器件等等。例如,打印機(jī)類的驅(qū)動可以獲知打印機(jī)的狀態(tài)、打印機(jī)初始化、發(fā)出并接收打印機(jī)數(shù)據(jù)、以及打印機(jī)復(fù)位。
這樣一來,你就很可能找出一種與特定RTOS和處理器一起工作的打印機(jī)類驅(qū)動器。不過,打印機(jī)制造商可以在該類驅(qū)動器的基礎(chǔ)上獲得功能更強(qiáng)的驅(qū)動器,這些驅(qū)動器通常稱為同類軟件庫。但是,如果你計劃控制一個定制的I/O設(shè)備,還要準(zhǔn)備編寫自己的驅(qū)動器。
雖然,一臺PC無論用戶需要與否都可以存儲成百上千的USB設(shè)備驅(qū)動器,但嵌入式系統(tǒng)卻不具備此般靈活性。所以,你可能只采用那些能確保與你的系統(tǒng)一起工作的外設(shè)。由于很多嵌入式應(yīng)用的磁盤空間有限,而只配備幾種常用器件的驅(qū)動器。記住,如果你不能確定與嵌入式系統(tǒng)相連的器件的話,得到的就不是一個好設(shè)計。在你考慮軟件和驅(qū)動器時,請?jiān)敿?xì)規(guī)定與USB端口通信的設(shè)備的具體情況。
在某些情況下,對小尺寸、高可靠性或者大批量生產(chǎn)的器件的需求會將一個嵌入式系統(tǒng)從電路板 “擠壓”成為一塊芯片。因此,工程師們必須獲得知識產(chǎn)權(quán)的許可證,將其集成到ASIC或者FPGA中。若干公司以IP形式提供USB主控控制器。Mentor Graphics公司提供一種全速USB控制器Inventra,它可以用作一個主控或者外設(shè)。Synopsys公司提供DesignWare核,它有多種類型的USB端口。最后,ARC公司提供若干種USB設(shè)計的許可證。各家公司以VHDL或Verilog代碼的形式提供其USB核。
幸運(yùn)的是,USB核帶有標(biāo)準(zhǔn)的硬件接口,如ARC公司為其微處理器開發(fā)先進(jìn)高速總線(AHB),它可以用于多種其它的處理器核。IP廠商還可以支持由虛擬插座接口聯(lián)盟(Virtual Socket Interface Alliance)制定的外圍虛擬部件接口(PVCI)標(biāo)準(zhǔn)。如果你決定去獲取USB IP的許可證,務(wù)必確保它適合所選定的RTOS。IP許可證廠商可提供一系列兼容的軟件產(chǎn)品和開發(fā)工具。另外,IP廠商自己可在軟件方面提供幫助。
可惜,USB設(shè)計考慮的范圍遠(yuǎn)非本文所能完全覆蓋。建議讀者閱讀其它相關(guān)書刊和資料。■
評論