摘 要: 介紹了USB設(shè)備控制器" title="設(shè)備控制器">設(shè)備控制器的基本功能和原理,提出了一款基于6502MCU的通用的帶HUB的全速USB設(shè)備控制器的體系結(jié)構(gòu),并完成了整個(gè)芯片的設(shè)計(jì),而且通過(guò)了FPGA驗(yàn)證。這款芯片可以用來(lái)開(kāi)發(fā)帶HUB的全速USB設(shè)備、全速USB設(shè)備或全速USB HUB。
關(guān)鍵詞: USB HUB SIE 轉(zhuǎn)發(fā)器 FPGA
近年來(lái),USB技術(shù)已經(jīng)成為計(jì)算機(jī)領(lǐng)域發(fā)展最快的技術(shù)之一,得到了廣泛的應(yīng)用。早在1998年,由于USB1.1規(guī)范的推出以及Windows98加強(qiáng)了對(duì)USB的支持,USB就得到了飛速的發(fā)展和普及,各種USB設(shè)備不斷涌現(xiàn)。2000年,USB2.0規(guī)范推出之后,USB一改只能適用于中低速設(shè)備的局面,在高速傳輸領(lǐng)域也占領(lǐng)了大量的市場(chǎng)份額。2001年推出的USB-OTG解決了大量USB設(shè)備之間的直接互連問(wèn)題,因此USB規(guī)范將得到更加迅速的發(fā)展。
根據(jù)USB規(guī)范,USB系統(tǒng)的拓?fù)浣Y(jié)構(gòu)呈金字塔狀,集線器(HUB)是金字塔中不可或缺的部件,是主機(jī)與設(shè)備之間建立連接的橋梁。根據(jù)USB2.0規(guī)范,全速USB HUB可以連接低速、全速和高速下行設(shè)備(高速設(shè)備降為全速運(yùn)行)。
本文提出一款基于6502 MCU的通用的帶HUB的全速USB設(shè)備控制器的體系結(jié)構(gòu),并完成整個(gè)芯片的設(shè)計(jì)。這款芯片可以用來(lái)開(kāi)發(fā)帶HUB的全速USB設(shè)備、全速USB設(shè)備和全速USB HUB。
1 系統(tǒng)設(shè)計(jì)
常見(jiàn)的USB設(shè)備控制器的功能結(jié)構(gòu)框圖如圖1所示。收發(fā)器" title="收發(fā)器">收發(fā)器用于實(shí)現(xiàn)物理層的USB規(guī)范,它包含一個(gè)接收器和一個(gè)發(fā)送器,接收器用于接收和判決總線D+、D-的信號(hào),發(fā)送器用于驅(qū)動(dòng)D+、D-的信號(hào)。串行接口引擎(SIE)主要用于解析協(xié)議層的USB規(guī)范,如時(shí)鐘提取、NRZI編碼/解碼、比特填充/抽取、CRC校驗(yàn)、PID檢測(cè)/產(chǎn)生、串并/并串轉(zhuǎn)換等。功能控制器主要用于處理功能層的USB規(guī)范。緩沖區(qū)是功能控制器與SIE互相通信的橋梁,通常SIE把總線上接收到的數(shù)據(jù)存放在緩沖區(qū)中,供功能控制器讀取并解析;同時(shí),功能控制器又會(huì)把需要發(fā)送的數(shù)據(jù)存放在緩沖區(qū)中,供SIE讀取并發(fā)送。
集成HUB的USB設(shè)備控制器又稱為復(fù)合設(shè)備控制器,它在本質(zhì)上是兩個(gè)USB設(shè)備,在系統(tǒng)中擁有兩個(gè)不同的設(shè)備地址。因?yàn)閁SB是分時(shí)復(fù)用的串行總線,在正常情況下,任何時(shí)候主機(jī)都只能與系統(tǒng)中的某一個(gè)設(shè)備進(jìn)行通信,所以復(fù)合設(shè)備控制器也可以把設(shè)備控制器和HUB控制器的很多部件合二為一,分時(shí)復(fù)用。
本文提出的集成HUB的全速USB設(shè)備控制器的設(shè)計(jì)方案如圖2所示。該控制器支持一個(gè)上行端口和四個(gè)下行端口,并實(shí)現(xiàn)了USB鍵盤(pán)的功能。SIE主要負(fù)責(zé)物理層和協(xié)議層的協(xié)議解析,MCU主要負(fù)責(zé)設(shè)備層的協(xié)議解析,緩沖區(qū)是SIE和MCU之間通信的橋梁,SIE把接收到的數(shù)據(jù)包存放在緩沖區(qū)中供MCU讀取,MCU把需要發(fā)送的數(shù)據(jù)存放在緩沖區(qū)中供SIE讀取。數(shù)據(jù)轉(zhuǎn)發(fā)功能主要由HUB 轉(zhuǎn)發(fā)器實(shí)現(xiàn)。
2 SIE設(shè)計(jì)
在USB HUB內(nèi)部需要有一個(gè)全速SIE用來(lái)處理USB規(guī)范第八章規(guī)定的大部分協(xié)議,它的主要功能包括:
·包的識(shí)別與組織;
·時(shí)鐘與數(shù)據(jù)分離;
·NRZI編碼和解碼;
·比特填充和提?。?BR> ·CRC校驗(yàn)碼的識(shí)別和產(chǎn)生;
·地址檢測(cè);
·PID檢測(cè)和產(chǎn)生;
·串/并轉(zhuǎn)換和并/串轉(zhuǎn)換。
在設(shè)計(jì)SIE的時(shí)候,根據(jù)它的功能又將其分成幾個(gè)不同的模塊,如圖3所示。PHY模塊主要完成數(shù)據(jù)的串/并轉(zhuǎn)換和并/串轉(zhuǎn)換、比特填充和提取、NRZI編碼和解碼、時(shí)鐘與數(shù)據(jù)的分離等功能,此模塊內(nèi)部數(shù)據(jù)主要以串行狀態(tài)存在。PL模塊負(fù)責(zé)數(shù)據(jù)包的解析與組織、PID檢測(cè)和產(chǎn)生、CRC檢驗(yàn)碼的識(shí)別和產(chǎn)生、地址檢測(cè)等功能。FUNCTION模塊完成SIE與MCU的接口邏輯功能。
3 轉(zhuǎn)發(fā)器設(shè)計(jì)
轉(zhuǎn)發(fā)器是HUB實(shí)現(xiàn)數(shù)據(jù)轉(zhuǎn)發(fā)功能的核心模塊。轉(zhuǎn)發(fā)器實(shí)現(xiàn)的功能主要有:數(shù)據(jù)轉(zhuǎn)發(fā)、幀同步、掛起喚醒處理、總線沖突檢測(cè)與解決、往低速下行端口發(fā)送Keep-alive等。
在設(shè)計(jì)轉(zhuǎn)發(fā)器的時(shí)候,根據(jù)數(shù)據(jù)的流向?qū)D(zhuǎn)發(fā)器進(jìn)行了進(jìn)一步的模塊細(xì)分,如圖4所示。hub_up模塊負(fù)責(zé)接收來(lái)自上行端口的信號(hào),并檢測(cè)出SOP和EOP;同時(shí)轉(zhuǎn)發(fā)來(lái)自內(nèi)部端口和下行端口的信號(hào)。hub_dp模塊包含四個(gè)子模塊,支持四個(gè)下行端口,負(fù)責(zé)接收來(lái)自下行端口的信號(hào),并檢測(cè)出SOP和EOP;同時(shí)往下行設(shè)備轉(zhuǎn)發(fā)合法的下行數(shù)據(jù)。rpt_engine模塊中有一個(gè)重要的連接狀態(tài)機(jī),其狀態(tài)轉(zhuǎn)換如圖5所示,它以數(shù)據(jù)包為單位控制上行端口和下行端口之間的連接的建立和拆除,同時(shí)控制集線器正確地掛起和喚醒。
?
在圖5所示的連接狀態(tài)機(jī)中,狀態(tài)跳轉(zhuǎn)主要通過(guò)SOP(包開(kāi)始)和EOP(包結(jié)束)信號(hào)實(shí)現(xiàn),所以SOP和EOP信號(hào)直接影響狀態(tài)機(jī)的正確跳轉(zhuǎn),從而影響了轉(zhuǎn)發(fā)器的穩(wěn)定性。檢測(cè)SOP信號(hào)時(shí)要考慮兩個(gè)重要的因素:首先,SOP信號(hào)要產(chǎn)生得盡可能快,從而可以較快地打開(kāi)數(shù)據(jù)通道,減小數(shù)據(jù)流中SYNC的損失;其次,檢測(cè)與本地時(shí)鐘異步的數(shù)據(jù)流而產(chǎn)生的SOP信號(hào)要與本地時(shí)鐘同步,否則會(huì)使寄存器建立時(shí)間和保持時(shí)間得不到滿足。檢測(cè)EOP信號(hào)時(shí)也要考慮兩個(gè)因素:首先,要排除長(zhǎng)度不夠的SE0的干擾和SE0狀態(tài)向J狀態(tài)跳變的抖動(dòng)干擾;其次,EOP信號(hào)也要與本地時(shí)鐘同步。
全速HUB的上行端口始終是一個(gè)全速連接,但是它的下行端口可能是全速連接也可能是低速連接。低速數(shù)據(jù)經(jīng)過(guò)上行端口時(shí),雖然它的速率是低速的,但是它的極性卻是全速的。全速數(shù)據(jù)的極性與低速數(shù)據(jù)的極性是相反的,所以轉(zhuǎn)發(fā)低速數(shù)據(jù)時(shí)需要先對(duì)數(shù)據(jù)的極性進(jìn)行轉(zhuǎn)換。HUB在轉(zhuǎn)發(fā)數(shù)據(jù)的時(shí)候需要遵循以下原則:來(lái)自上行端口的低速數(shù)據(jù)廣播給所有處于允許狀態(tài)的下行設(shè)備(包括全速設(shè)備和低速設(shè)備);來(lái)自上行端口的全速數(shù)據(jù)轉(zhuǎn)發(fā)給所有處于允許狀態(tài)的全速下行設(shè)備。
4 固件" title="固件">固件設(shè)計(jì)
本文提出的USB設(shè)備控制器是一個(gè)軟硬件結(jié)合的系統(tǒng),即整個(gè)系統(tǒng)由MCU、SIE、轉(zhuǎn)發(fā)器等硬件和運(yùn)行于MCU中的固件組成。
系統(tǒng)的設(shè)計(jì)原則是:凡是固件能夠完成的任務(wù)盡量由固件來(lái)實(shí)現(xiàn),硬件的主要工作是對(duì)協(xié)議層的解析,解析完之后會(huì)設(shè)置某些控制寄存器,有時(shí)會(huì)產(chǎn)生中斷,固件通過(guò)查詢這些寄存器執(zhí)行相應(yīng)的操作。
為了驗(yàn)證整個(gè)系統(tǒng),通過(guò)編寫(xiě)固件實(shí)現(xiàn)集成HUB的USB鍵盤(pán)的功能。
5 對(duì)于異步信號(hào)的處理
USB屬于異步總線,本地時(shí)鐘和主機(jī)時(shí)鐘是由兩個(gè)不同的晶振產(chǎn)生的,所以SIE必須采用適當(dāng)?shù)姆椒▽?shí)現(xiàn)位同步" title="位同步">位同步。一個(gè)典型的位同步方法就是采用一種特定結(jié)構(gòu)的數(shù)字鎖相環(huán)[1]。其原理是:分別用本地48MHz時(shí)鐘的正負(fù)沿采樣接收到的12MHz數(shù)據(jù)流,再用采樣后的信號(hào)控制狀態(tài)機(jī)的跳轉(zhuǎn)并產(chǎn)生12MHz的位接收時(shí)鐘(它的有效沿位于12MHz數(shù)據(jù)流每個(gè)比特位的中間),然后用新產(chǎn)生的時(shí)鐘去采樣12MHz的數(shù)據(jù)流從而實(shí)現(xiàn)位同步。
整個(gè)系統(tǒng)中采用的是異步復(fù)位" title="異步復(fù)位">異步復(fù)位。異步復(fù)位的好處是可以保證系統(tǒng)在初始狀態(tài)時(shí)處于已知的狀態(tài),對(duì)于有三態(tài)總線的系統(tǒng)來(lái)說(shuō),這是非常重要的[2]。異步復(fù)位的處理非常重要,關(guān)系到系統(tǒng)的穩(wěn)定性。對(duì)于異步復(fù)位信號(hào)來(lái)說(shuō),重要的不是什么時(shí)候復(fù)位而是什么時(shí)候復(fù)位結(jié)束,異步復(fù)位有兩個(gè)關(guān)鍵的參數(shù)恢復(fù)時(shí)間和遷移時(shí)間,如圖6所示[3]。如果以上兩個(gè)參數(shù)不滿足,就會(huì)產(chǎn)生亞穩(wěn)態(tài)[4]。為了解決這個(gè)問(wèn)題,設(shè)計(jì)了如圖7所示的復(fù)位電路。
在該電路中,復(fù)位的產(chǎn)生是不受時(shí)鐘控制的,但復(fù)位結(jié)束是受時(shí)鐘控制的。之所以要用兩個(gè)級(jí)聯(lián)的觸發(fā)器,是為了避免第一級(jí)觸發(fā)器有可能產(chǎn)生的亞穩(wěn)態(tài)傳給整個(gè)芯片的復(fù)位信號(hào)reset。在這個(gè)電路中不存在恢復(fù)時(shí)間的問(wèn)題,因?yàn)閺?fù)位結(jié)束肯定在時(shí)鐘沿的后面。遷移時(shí)間的問(wèn)題也可以解決,只要Tclk_q (clock to Q)+ Tpd(復(fù)位信號(hào)的傳輸延時(shí)) > Trem(觸發(fā)器的遷移時(shí)間)即可。對(duì)于上電復(fù)位來(lái)說(shuō)還要進(jìn)行進(jìn)一步的處理,要保證復(fù)位時(shí)間足夠長(zhǎng),因?yàn)殡娫捶€(wěn)定需要一定的時(shí)間。
6 設(shè)備的低功耗設(shè)計(jì)
對(duì)于USB設(shè)備來(lái)說(shuō),當(dāng)總線上超過(guò)3ms沒(méi)有總線活動(dòng)時(shí),設(shè)備就要自動(dòng)進(jìn)入休眠狀態(tài),此時(shí)從總線上獲得的電流不能超過(guò)500μA[5]。為了滿足此要求,設(shè)計(jì)了如圖8所示的設(shè)備喚醒和休眠電路。
當(dāng)設(shè)備需要休眠時(shí),給出一個(gè)sleep信號(hào)控制晶體振蕩器(OSC)停止振蕩,整個(gè)設(shè)備進(jìn)入節(jié)電模式。對(duì)于CMOS電路來(lái)說(shuō),時(shí)鐘停止振蕩以后所消耗的功率極小,當(dāng)有總線活動(dòng)時(shí),收發(fā)器會(huì)產(chǎn)生總線活動(dòng)標(biāo)志信號(hào)wakeup,wakeup信號(hào)首先控制振蕩器重新開(kāi)始振蕩,然后和clkDelay信號(hào)一塊控制設(shè)備的時(shí)鐘(Clock),晶振穩(wěn)定后則輸出時(shí)鐘信號(hào)。復(fù)位時(shí)不對(duì)時(shí)鐘信號(hào)進(jìn)行控制。
7 FPGA實(shí)現(xiàn)和系統(tǒng)驗(yàn)證
系統(tǒng)進(jìn)行實(shí)現(xiàn)和驗(yàn)證時(shí),串行接口引擎和轉(zhuǎn)發(fā)器采用Verilog進(jìn)行RTL描述,然后采用Xilinx公司的XC2S200PQ208 FPGA實(shí)現(xiàn)。緩沖區(qū)和RAM由FPGA內(nèi)部集成的RAM實(shí)現(xiàn),收發(fā)器采用Philips公司的PDIUSBP11A,MCU采用MICETEK公司的65C02仿真器。
整個(gè)系統(tǒng)經(jīng)驗(yàn)證后,工作正常,內(nèi)置鍵盤(pán)可以正常工作,在下行端口插入低速USB設(shè)備和全速USB設(shè)備都可以工作。圖9是用立肯科技公司的USBMobile測(cè)試儀對(duì)FPGA系統(tǒng)進(jìn)行測(cè)試的結(jié)果的一部分。
參考文獻(xiàn)
1 Designing a Robust USB Serial Interface Engine(SIE). USB-IF.http://www.usb.org/developers/whitepapers/
2 Michael Keating, Pierre Bricaud. Reuse Methodology Manual for System-on-a-Chip Designs. Kluwer Academic Publishers,2000
3 Design Compiler Manual. Synopsys Corp., 2003
4 Mike Stein.跨越鴻溝:同步世界中的異步信號(hào).EDN電子設(shè)計(jì)技術(shù),2004 (7)
5 Universal Serial Bus Specification 1.1. Compaq, Intel, Mi-crosoft, NEC,1998-09-23