張秀娟,梁波
(山東科技大學(xué),青島266510)
張秀娟(教授)、梁波(碩士研究生),研究方向?yàn)橛?jì)算機(jī)應(yīng)用技術(shù)、嵌入式系統(tǒng)及應(yīng)用。
隨著USB通信技術(shù)的不斷發(fā)展,USB接口得到了廣泛的應(yīng)用。單一功能的USB設(shè)備,如USB鍵盤(pán)、USB鼠標(biāo)、USB調(diào)制解調(diào)器等,已經(jīng)不能滿(mǎn)足人們對(duì)USB設(shè)備功能的要求。多功能的USB設(shè)備正不斷涌現(xiàn)出來(lái),常見(jiàn)的有帶話(huà)筒的USB攝像頭、USB可視電話(huà)等[1]。因此,研究多功能USB設(shè)備對(duì)于滿(mǎn)足人們對(duì)新型USB設(shè)備的需求是十分必要的。
多功能USB設(shè)備通常是通過(guò)單個(gè)或多個(gè) USB控制器連接不同類(lèi)型的設(shè)備來(lái)實(shí)現(xiàn)的。而在一個(gè)USB接口上實(shí)現(xiàn)多個(gè)設(shè)備有兩種方法:一種是復(fù)合設(shè)備(Compound Device),一種是組合設(shè)備(Composite Device)[2]。圖1和圖2分別給出了復(fù)合設(shè)備和組合設(shè)備的結(jié)構(gòu)模型。
實(shí)際上,USB設(shè)備應(yīng)該被視為不同的功能。多個(gè)功能可以被封裝在一起形成一個(gè)物理設(shè)備。所以復(fù)合設(shè)備其實(shí)就是幾個(gè)設(shè)備通過(guò)一個(gè)USB Hub形成的單一設(shè)備,復(fù)合設(shè)備內(nèi)的Hub和與Hub相連的各個(gè)功能會(huì)分配各自的設(shè)備地址。組合設(shè)備也就是具有多個(gè)接口的設(shè)備,每個(gè)接口代表一個(gè)獨(dú)立的設(shè)備,但是組合設(shè)備只有一個(gè)設(shè)備地址[3]。
圖1 復(fù)合設(shè)備結(jié)構(gòu)模型
圖2 組合設(shè)備結(jié)構(gòu)模型
采用復(fù)合設(shè)備方法開(kāi)發(fā)多功能 USB設(shè)備時(shí),其開(kāi)發(fā)過(guò)程同開(kāi)發(fā)兩種不同類(lèi)型的 USB設(shè)備相同,開(kāi)發(fā)難度較低。本文重點(diǎn)介紹組合設(shè)備的設(shè)計(jì)方法,并舉例加以實(shí)現(xiàn)。
USB組合設(shè)備是指具有多個(gè)接口且接口間相互獨(dú)立的USB設(shè)備。一個(gè)USB設(shè)備只有一個(gè)設(shè)備地址,可以將不同的功能與不同的接口對(duì)應(yīng),來(lái)開(kāi)發(fā)多功能USB設(shè)備。
組合設(shè)備采用一個(gè)USB控制芯片,同時(shí)接A設(shè)備和B設(shè)備。主機(jī)可以同時(shí)與A設(shè)備和B設(shè)備通信。
如圖3所示,以?xún)蓚€(gè)接口的組合設(shè)備為例,來(lái)說(shuō)明組合設(shè)備的描述符結(jié)構(gòu)。一個(gè)設(shè)備描述符下有一個(gè)配置描述符,一個(gè)配置描述符下可以有多個(gè)接口描述符,分別對(duì)應(yīng)不同的設(shè)備。每個(gè)接口描述符下又包含多個(gè)端點(diǎn)描述符。一個(gè)USB邏輯設(shè)備對(duì)USB系統(tǒng)來(lái)說(shuō)就是一個(gè)端點(diǎn)集合。端點(diǎn)可以根據(jù)它們實(shí)現(xiàn)的接口來(lái)分類(lèi)。所有的USB設(shè)備都需要實(shí)現(xiàn)一個(gè)缺省的控制方法。這種方法將端點(diǎn)0作為輸入端點(diǎn),同時(shí)也將端點(diǎn)0作為輸出端點(diǎn)。USB系統(tǒng)用這個(gè)缺省方法初始化及一般地使用邏輯設(shè)備(即設(shè)置此設(shè)備)。設(shè)備可以有除端點(diǎn)0以外的其他端點(diǎn),這取決于這些設(shè)備的實(shí)現(xiàn)。低速設(shè)備除端點(diǎn)0外,只能有2個(gè)額外的可選端點(diǎn)。而高速設(shè)備可具有的額外端點(diǎn)數(shù)僅受限于協(xié)議的定義。除缺省控制通道的缺省端點(diǎn)外,其他端點(diǎn)只有在設(shè)備被設(shè)置后才可使用。而且除端點(diǎn)0外,其他端點(diǎn)在不同接口間不能共享[4]。
組合設(shè)備使用一個(gè)USB控制芯片,通過(guò)控制不同的接口與不同的設(shè)備進(jìn)行通信,解決了主機(jī)與組合設(shè)備內(nèi)各個(gè)設(shè)備數(shù)據(jù)流的區(qū)分問(wèn)題。
圖3 組合設(shè)備描述符結(jié)構(gòu)
設(shè)備采用Holtek公司的8位USB多媒體鍵盤(pán)編碼器HT82K95E作為本系統(tǒng)的核心。鼠標(biāo)、鍵盤(pán)等 HID類(lèi)設(shè)備為低速設(shè)備,所以該設(shè)備要能同時(shí)實(shí)現(xiàn)鼠標(biāo)和鍵盤(pán)數(shù)據(jù)同PC機(jī)的雙向傳輸,MCU首先必須具有低速的USB接口,并且支持3個(gè)端點(diǎn)(包括端點(diǎn)0)[5]。綜合考慮,選用了HT82K95E作為本系統(tǒng)的主控芯片。由于鼠標(biāo)和鍵盤(pán)均屬于低速設(shè)備,所以應(yīng)在USB信號(hào)線(xiàn)上加1.5 kΩ的上拉電阻[4]。
USB接口部分原理圖如圖4所示。MCU的復(fù)位電路采用由R1和C1組成的RC積分電路來(lái)實(shí)現(xiàn)上電復(fù)位功能。上電瞬間,由于電容電壓不能突變,所以復(fù)位引腳為低電平,然后電容開(kāi)始緩慢充電,復(fù)位引腳電位開(kāi)始升高,最后變?yōu)楦唠娖?完成芯片的上電復(fù)位。HT82K95E微控制器內(nèi)部還包含一個(gè)低電壓復(fù)位電路(LVR)用于監(jiān)視設(shè)備的供電電壓。如果設(shè)備的供電電壓下降到0.9VLVR的范圍內(nèi)并且超過(guò)1 ms的時(shí)間,那么LVR就會(huì)自動(dòng)復(fù)位設(shè)備[6]。
應(yīng)當(dāng)注意的是,對(duì)于該設(shè)備的復(fù)位電路,還應(yīng)加一個(gè)BAT54SW二極管,接法如圖4中D1所示。如果不加D1,設(shè)備在第一次使用時(shí)能夠正常復(fù)位,但在以后的使用中卻無(wú)法正常復(fù)位,原因是電容中的電荷無(wú)法釋放掉,而D1可以通過(guò)整個(gè)電路快速釋放掉電容中的電荷[7]。
該組合設(shè)備采用HT82K95E USB控制芯片,通過(guò)對(duì)兩個(gè)接口的管理,實(shí)現(xiàn)了鼠標(biāo)和鍵盤(pán)的功能。
USB固件程序是USB設(shè)備功能的核心。對(duì)于HID設(shè)備,其主要的功能設(shè)計(jì)都是在固件程序中進(jìn)行的。這里采用Holtek C語(yǔ)言進(jìn)行帶鍵盤(pán)的鼠標(biāo)組合設(shè)備的開(kāi)發(fā)。
HT82K95E芯片的 ROM空間是按頁(yè)(page)來(lái)劃分的,1頁(yè)為256個(gè)字。這樣,整個(gè)ROM空間正好劃分為若干連續(xù)的頁(yè)。單片機(jī)ROM中的任何區(qū)域都可以用來(lái)查表[5]。在這里只介紹 Holtek C中的一種查表指令:TABRDL[m]。該指令用于查ROM中最后1頁(yè)的數(shù)據(jù)。HT82K95E具有表指針寄存器 TBHP,在使用TABRDL指令時(shí),TBHP默認(rèn)為最后1頁(yè)的首址高位。通過(guò)查表,表格的低位字節(jié)送入[m],高位字節(jié)送入TBLH寄存器。
在固件設(shè)計(jì)中,將描述符存儲(chǔ)在ROM的最后1頁(yè),當(dāng)主機(jī)請(qǐng)求設(shè)備的各種描述符時(shí),通過(guò)TABRDL指令將描述符從最后1頁(yè)取出,并傳送給主機(jī),完成設(shè)備的枚舉過(guò)程。該組合設(shè)備的描述符在下面給出。
設(shè)備描述符:
配置描述符:
圖4 USB接口部分原理圖
接口0描述符:
接口1描述符:
ASM_CONFIG_LEN為配置描述符的大小,其值為配置描述符、接口描述符、HID描述符和端點(diǎn)描述符的大小的總和。ASM_ENTITY_LEN_0為鼠標(biāo)報(bào)告描述符的大小,ASM_ENTITY_LEN_1為鍵盤(pán)報(bào)告描述符的大小[8]。描述符中其他各項(xiàng)的意義在本文中不作詳細(xì)解釋,通過(guò)使用周立功公司的 USB分析儀 USBAnalyser,可分析出該組合設(shè)備的枚舉過(guò)程流程,如圖5所示。
圖5 組合設(shè)備枚舉流程
本文簡(jiǎn)要分析了多功能USB設(shè)備兩種結(jié)構(gòu)模型的不同,重點(diǎn)介紹了組合設(shè)備的設(shè)計(jì)方法?;谠撛O(shè)計(jì)方法,采用Holtek的8位單片機(jī)HT82K95E芯片設(shè)計(jì)了一款鼠標(biāo)鍵盤(pán)組合設(shè)備。在開(kāi)發(fā)此組合設(shè)備的過(guò)程中,可以分別調(diào)試兩個(gè)接口,如果每個(gè)接口都可正確運(yùn)行,接著就可編寫(xiě)兩個(gè)接口的描述符,實(shí)現(xiàn)組合設(shè)備的功能。組合設(shè)備對(duì)USB控制器可提供的端點(diǎn)數(shù)量和這些端點(diǎn)所支持的傳輸類(lèi)型有所限制。USB控制器需較好的支持設(shè)備A和設(shè)備B間的傳輸協(xié)議。目前,不少芯片廠商也逐漸提供了組合設(shè)備的芯片方案。
[1]徐星,劉克剛.一種新型的多功能鼠標(biāo)的設(shè)計(jì)[J].電子技術(shù),2004(12):53-55.
[2]張念淮,江浩.USB總線(xiàn)接口開(kāi)發(fā)指南[M].北京:國(guó)防工業(yè)出版社,2001:15-206.
[3]薛園園.USB應(yīng)用開(kāi)發(fā)技術(shù)大全[M].北京:人民郵電出版社,2007:44-68.
[4]許永和.USB外圍設(shè)備設(shè)計(jì)與應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2002:30-217.
[5]盛群半導(dǎo)體有限公司.HT82K95E datasheet[EB/OL].[2009-09-15].http://www.holtek.com.cn.
[6]李齊雄,鄭顏雄,蔡孟昌.HOLTEK HT48系列單片機(jī)原理及應(yīng)用實(shí)例[M].北京:北京航空航天大學(xué)出版社,2005:50-185.
[7]田廣錕,范如東.高速電路PCB設(shè)計(jì)與EMC技術(shù)分析[M].北京:電子工業(yè)出版社,2008:3-132.
[8]尹勇,王洪成.單片機(jī)開(kāi)發(fā)環(huán)境μ Vision2使用指南及USB固件編程與調(diào)試[M].北京:北京航空航天大學(xué)出版社,2004:202-315.
單片機(jī)與嵌入式系統(tǒng)應(yīng)用2011年11期