基于DSP和專用接口芯片的USB實(shí)現(xiàn)方案
自1994年11月提出通用串行總線(USB)以來(lái),USB以其傳輸速率高、支持熱插拔、易于擴(kuò)展的突出優(yōu)勢(shì),發(fā)展速度驚人,迅速席卷電子產(chǎn)品世界。在市場(chǎng)需求的強(qiáng)力驅(qū)動(dòng)下,從1998年開(kāi)始,USB接口進(jìn)入測(cè)量?jī)x器領(lǐng)域,并逐步被許多著名儀器公司接納。在測(cè)量?jī)x器中擴(kuò)展USB接口已經(jīng)成為一種發(fā)展趨勢(shì)。針對(duì)不同的測(cè)量?jī)x器,尋求一種普遍適用的USB接口解決方案,對(duì)于測(cè)量?jī)x器的開(kāi)發(fā)設(shè)計(jì)有十分重要的意義。
本文引用地址:http://www.ex-cimer.com/article/264104.htm方案選擇
開(kāi)發(fā)USB設(shè)備一般有三種方式:一種是使用帶USB接口的專用微控制器(MCU),這類(lèi)MCU有自己的系統(tǒng)結(jié)構(gòu)和指令,從底層專用于USB控制,比如Cypress公司的CY7C63xxx和CY7C64013,這類(lèi)MCU的開(kāi)發(fā)需要用專用工具,且性能有限;第二種方式是使用帶USB接口的通用MCU,這類(lèi)MCU只是基于一般芯片內(nèi)核增加了USB接口,比如Intel公司的8x931、8x930以及Cypress公司的EZUSB等,這類(lèi) MCU的開(kāi)發(fā)語(yǔ)言和開(kāi)發(fā)工具都和一般MCU相似,因而較易入手,但其缺點(diǎn)是成本較高;第三種方式是使用純粹的USB接口芯片,通過(guò)外加MCU對(duì)其控制。如 Philips公司的PDIUSBD12、ISP1581以及National公司的USBN9602、南京沁恒公司的CH372、CH375等。這類(lèi) USB接口芯片價(jià)格較低、接口方便、靈活性高,針對(duì)不同的硬件環(huán)境可以配合多種MCU使用,如單片機(jī)、DSP、FPGA都可以。綜合各方面因素考慮,本設(shè)計(jì)選用第三種方式,即采用專用USB接口芯片為測(cè)量?jī)x器擴(kuò)展USB接口。
硬件設(shè)計(jì)
USB控制器
USB控制器通過(guò)控制USB接口芯片實(shí)現(xiàn)協(xié)議處理和數(shù)據(jù)交換。在本設(shè)計(jì)中選用DSP芯片TMS320VC33作為微控制器,這主要是基于兩方面的考慮:一是其運(yùn)算速度較快,指令周期僅為13nS,可以最大限度地發(fā)揮USB接口芯片的潛力;二是該DSP芯片性價(jià)比高,且具有浮點(diǎn)運(yùn)算功能,擴(kuò)展浮點(diǎn)精度可達(dá)40位。
USB接口芯片
USB接口芯片用以完成USB通信底層的數(shù)據(jù)鏈路級(jí)交換,并對(duì)本地微控制器提供一個(gè)并行接口。
本文選用PHILIPS公司的PDIUSBD12作為USB接口芯片。該芯片可與任何微控制器實(shí)現(xiàn)高速并行接口(2Mb/s),允許使用現(xiàn)存的體系結(jié)構(gòu)并使固件投資減到最小。這種靈活性減少了開(kāi)發(fā)時(shí)間、風(fēng)險(xiǎn)和成本,是開(kāi)發(fā)高效低成本的USB外圍設(shè)備的一種快捷途徑。
PDIUSBD12一共有三組端點(diǎn):端點(diǎn)0完成控制傳輸;端點(diǎn)1可以配置成中斷傳輸;端點(diǎn)2有128B的緩沖區(qū),是主要的數(shù)據(jù)傳輸端點(diǎn)。
接口電路
采用單獨(dú)地址/數(shù)據(jù)總線配置,即用DSP的某地址線控制PDIUSBD12的A0引腳,實(shí)現(xiàn)命令數(shù)據(jù)的選擇。A0=1表示傳送命令,A0=0表示傳送數(shù)據(jù)。片選(CS )及掛起(SUSPEND)信號(hào)分別由DSP的I/O口控制。讀寫(xiě)選通信號(hào)WR 、RD 可以用DSP的R/W引腳及其取反后控制。但這樣需要在電路中增加反相器,為了節(jié)約器件從而縮小電路體積,可以另外選擇一個(gè)I/O口控制 PDIUSBD12的讀選通RD。本設(shè)計(jì)中選用PAGE1,通過(guò)對(duì)不同地址的訪問(wèn)來(lái)區(qū)分對(duì)PDIUSBD12的讀寫(xiě)操作。這樣PDIUSBD12只占用微控制器的三個(gè)地址資源,其一用來(lái)向PDIUSBD12寫(xiě)命令,其二用來(lái)向PDIUSBD12寫(xiě)數(shù)據(jù),另外一個(gè)用來(lái)從PDIUSBD12讀數(shù)據(jù)。對(duì)DSP而言,PDIUSBD12就相當(dāng)于一個(gè)有8位數(shù)據(jù)總線和3個(gè)地址的存儲(chǔ)器件。
設(shè)備采用自供電方式,需要將EOT 通過(guò)一個(gè)10k?的電阻接至USB電纜的VCC(+5V)端,并加1M?下拉電阻,借此檢測(cè)USB設(shè)備是否已經(jīng)連接到USB口。
軟件設(shè)計(jì)
USB軟件設(shè)計(jì)包括固件(firmware)程序、PC端的驅(qū)動(dòng)程序和應(yīng)用程序。其中固件程序要求編寫(xiě)者對(duì)復(fù)雜的USB通信協(xié)議有深刻的理解,編程難度較高,在本論文中將詳細(xì)介紹。
固件編程
固件程序是寫(xiě)入MCU內(nèi)的程序,使MCU可以完全按照USB協(xié)議,識(shí)別接收到的信息包類(lèi)型,對(duì)包的內(nèi)容、意義進(jìn)行分析,并按照要求完成相應(yīng)的動(dòng)作。通過(guò)這些不同類(lèi)型包的傳遞,完成MCU與接口芯片的命令及數(shù)據(jù)交換,進(jìn)而實(shí)現(xiàn)主機(jī)與設(shè)備間的通信。
固件程序設(shè)計(jì)成中斷驅(qū)動(dòng)模式,采用模塊化設(shè)計(jì)。
主循環(huán)
主循環(huán)中主要完成DSP的寄存器及端口初始化,向PDIUSBD12發(fā)送設(shè)置模式命令,接通SoftConnect。判斷是否接收到建立包(setup package),若收到則調(diào)用標(biāo)準(zhǔn)請(qǐng)求處理程序進(jìn)行處理,若收到主機(jī)請(qǐng)求信號(hào),則調(diào)用數(shù)據(jù)發(fā)送程序發(fā)送數(shù)據(jù)。
中斷處理程序
中斷處理程序是整個(gè)固件程序設(shè)計(jì)的重點(diǎn)。將DSP設(shè)置為下降沿觸發(fā),當(dāng)PDIUSBD12接收到主機(jī)發(fā)送的信息包時(shí),觸發(fā)DSP進(jìn)入中斷。首先通過(guò)讀取PDIUSBD12的中斷寄存器判斷所發(fā)生中斷的類(lèi)型,然后根據(jù)具體的中斷類(lèi)型進(jìn)入相應(yīng)的處理子程序。
標(biāo)準(zhǔn)請(qǐng)求處理程序
USB協(xié)議中規(guī)定了11條所有USB設(shè)備都必須支持的標(biāo)準(zhǔn)請(qǐng)求,這些請(qǐng)求都是通過(guò)端點(diǎn)0發(fā)送的。標(biāo)準(zhǔn)請(qǐng)求處理程序?qū)χ鳈C(jī)發(fā)出的標(biāo)準(zhǔn)請(qǐng)求進(jìn)行響應(yīng),獲取設(shè)備的性能及狀態(tài),并給設(shè)備分配地址且進(jìn)行相應(yīng)配置,最終完成枚舉過(guò)程。
硬件接口及PDIUSBD12命令操作程序
硬件接口程序集成了DSP對(duì)PDIUSBD12的讀寫(xiě)操作,是整個(gè)固件程序中最底層也是使用最頻繁的部分,將它獨(dú)立成一個(gè)模塊編寫(xiě)極大地方便了程序在不同硬件平臺(tái)上的移植。值得注意的是:PDIUSBD12要求數(shù)據(jù)線上的數(shù)據(jù)建立時(shí)間和保持時(shí)間必須大于40nS,因此編程時(shí)需要插入至少4個(gè)軟件等待狀態(tài)。另外,因?yàn)镻DIUSBD12的最小讀寫(xiě)周期為500nS,所以在每次對(duì)其進(jìn)行讀寫(xiě)操作后必須增加適當(dāng)?shù)难訒r(shí)。
數(shù)據(jù)發(fā)送及接收程序
當(dāng)用戶通過(guò)主機(jī)端應(yīng)用程序向設(shè)備索要數(shù)據(jù)時(shí),DSP調(diào)用數(shù)據(jù)發(fā)送子程序完成數(shù)據(jù)發(fā)送,針對(duì)發(fā)送數(shù)據(jù)量的大小,可以選擇使用端點(diǎn)1或者端點(diǎn)2完成。對(duì)于主機(jī)發(fā)送數(shù)據(jù)的接收,在端點(diǎn)0及端點(diǎn)1的IN中斷子程序中即可完成。發(fā)送數(shù)據(jù)子程序如下:
調(diào)試
固件程序?qū)r(shí)間敏感,所以編程時(shí)要特別注意時(shí)序問(wèn)題。由于USB枚舉過(guò)程很快,如果連續(xù)三次接收不到應(yīng)答包就結(jié)束枚舉,所以調(diào)試時(shí)要注意不能采用CCS的單步調(diào)試,可以采用斷點(diǎn)調(diào)試。調(diào)試過(guò)程之初經(jīng)常會(huì)遇到的一種狀況是指示燈閃爍三次以后熄滅,這說(shuō)明主機(jī)檢測(cè)到了設(shè)備連接,但無(wú)法和設(shè)備進(jìn)行對(duì)話來(lái)了解設(shè)備的信息。這表明固件程序還沒(méi)有開(kāi)始正常工作,需仔細(xì)檢查程序中的錯(cuò)誤之處。
評(píng)論