引言
USB接口" title="USB接口">USB接口(Universal Serial Bus)是一種通用的高速串行接口,。它最主要的特點(diǎn)是它的高速傳輸特性,。USB1.1理論速度極限可以達(dá)到12Mb/s,USB2.0可達(dá)到 480Mb/s,。這樣,,它可以很好解決大數(shù)據(jù)量的數(shù)據(jù)在嵌入式" title="嵌入式">嵌入式系統(tǒng)與PC機(jī)之間的互傳問題;同時,,它支持熱插拔,,并且最多同時支持127個外設(shè),非常適合嵌入式系統(tǒng)的應(yīng)用,。
本次設(shè)計是在一個已有的DSP" title="DSP">DSP圖像采集嵌入式系統(tǒng)的基礎(chǔ)上,,為它配接上一個USB1.1的接口,以達(dá)到DSP圖像采集系統(tǒng)高速地將圖像數(shù)據(jù)回傳到PC機(jī)中的目的,。設(shè)計的要求主要有:
?、僭谠衅脚_提供的接口基礎(chǔ)上,加入一個低成本,、高速度的USB接口,;
②通過USB接口,,實現(xiàn)PC機(jī)對DSP圖像采集系統(tǒng)的操作與控制,;
③實現(xiàn)圖像數(shù)據(jù)在DSP攝像系統(tǒng)與PC機(jī)之間高速的雙向傳輸,。
基于以上幾點(diǎn)可以看出,,本方案最主要的特點(diǎn)是成本低廉且傳輸速度高,。
1 硬件方案選擇與設(shè)計
1.1 方案選擇
對于基于DSP平臺的USB接口設(shè)計,經(jīng)過綜合考慮了幾種方案之后決定,,采用一個不帶MCU內(nèi)核的USB接口芯片PDIUSBD" title="PDIUSBD">PDIUSBD12(成本非常低,,一片PDIUSBD12的價格僅為20元),再加上簡單的外圍電路和時序調(diào)整電路,。
這種芯片僅僅完成USB底層的數(shù)據(jù)鏈路級交換,,并提供給本地微控制器一個并行的接口,但是它并不完成協(xié)議層的工作,。協(xié)議層的工作需要對微控制器編程,,控制USB接口芯片來實現(xiàn)USB協(xié)議。所以,,開發(fā)難度相對來說大一些,,要做的編程工作也多一點(diǎn)。但是這套方案的成本非常低,,而且由于直接用DSP作為微控制器,,沒有原單片機(jī)的瓶頸限制,所以可以實現(xiàn)很高的數(shù)據(jù)傳輸速率,。該系統(tǒng)的原理框圖如圖1所示,。
由于PDIUSBD12的并行接口時序較慢,只能達(dá)到2MB/s,。這個速度相對于DSP來說比較低,,而且有些地方不是簡單地在程序中加入延時就可以調(diào)整,所以需要一個時序調(diào)整電路來完成它們之間的配合,。
1.2 PDIUSBD12芯片
PDIUSBD12芯片是由Philips公司推出的一種USB1.1接口芯片,。它可以工作在5V或者3.3V的工作電壓下;具有8位數(shù)據(jù)總線,,且有完全自治的DMA傳輸操作,。它還具有可控制的軟件連接(SoftConnect)功能,可以保證在微控制器可靠完成初始化之后再連接上USB總線,。另外,,它還有一個LED驅(qū)動腳,,可以外接LED來監(jiān)測USB的枚舉過程和數(shù)據(jù)傳輸過程,。當(dāng)USB接口枚舉完成,并且成功配置以后,,LED將會一直點(diǎn)亮,;而在枚舉過程以及USB數(shù)據(jù)通信過程中,LED只是有節(jié)奏地閃爍,。
PDIUSBD12只占用微控制器的兩個地址資源,。也就是說,,它只有一根地址線。其中一個地址用來向芯片中寫命令,,另外一個地址用來向燕片中寫數(shù)據(jù)或者從芯片中讀取數(shù)據(jù),。
PDIUSBD12一共有三組端點(diǎn):端點(diǎn)0完成控制傳輸;端點(diǎn)1可以配置成中斷傳輸,;端點(diǎn)2是主要的數(shù)據(jù)傳輸端點(diǎn),。它有64B的緩沖區(qū),如果加上它的雙緩沖機(jī)制,,就有128B的緩沖區(qū),;它可以配置成批量傳輸模式,或者同步傳輸模式,。
總的來說,,PDIUSBD12是一款性能優(yōu)異,價格相對軟低的USB接口芯片,。
1.3 時序芯片
為了降低成本,、簡化電路,本方案不使用DMA傳輸方式,,而以TI公司的TMS320C2XX" title="TMS320C2XX">TMS320C2XX作為微控制器(使用20MHz晶振),。它的并口速度非常高,遠(yuǎn)遠(yuǎn)高于PDIUSBD12所要求的最高限制2MB/s,。此處是硬件設(shè)計最關(guān)鍵的地方,。
經(jīng)過詳細(xì)的時序分析發(fā)現(xiàn),大部分問題可以通過在DSP固件設(shè)計的加入延時,,或者設(shè)置DSP的WSGR寄存器來解決,。但是有一個問題,必須在硬件上加以解決,。圖2是DSP(TMS320C2XX)的寫時序,。
圖2中,參數(shù)th(W-D)是指在WE信號變高(無效)以后,,所寫的數(shù)據(jù)將仍然保持有效的時間,。這個值最小為3ns,最大為14ns,,所以所寫的數(shù)據(jù)在WE信號無效以后還會維持有效,,大約3~14ns(實際的延時介于這兩個值之間)。
圖3是PDIUSBD12所要求的寫時序,。圖中,,參量tWDH是與DSP (TMS320C2XX)參量th(W-D)相對應(yīng)的另外一個參量。這個參量反映了PDIUSBD12要求微控制器在向其中寫數(shù)據(jù)時,,所寫的數(shù)據(jù)在WR信號無效之后,,要繼續(xù)保持有效的時間,。這個參量最小值為10ns。也就是說,,PDIUSBD12要求所寫的數(shù)據(jù)最少要保持有效10ns(在WR無效之后),。
由此可以看出,DSP(TMS320C2XX)的寫時序不能可靠地保證滿足 PDIUSBD12的要求,,而且這個問題無法通過軟件加延時的方法來解決,,必須通過硬件來處理。經(jīng)過分析對比,,最后決定采用一個很簡單但是后來事實證明非常有效的方法來調(diào)整它們之間的時序,。那就是在DSP(TMS320C2XX)與PDIUSBD12的總線之間加一個雙向緩沖器-74LS245。這個芯片可以在它們的時序之間引入一個延時,。雖然這個延時并不可靠,、但是由于DSP(TMS320C2XX)本身會在WR無效后,繼續(xù)保持?jǐn)?shù)據(jù)有效一段時間(前面已講過),,這要僅僅需要將延時適當(dāng)延長一點(diǎn)就可以了,。74LS245所造成的延時典型值為15ns,最小也為8ns,。這樣,,加上原來DSP寫時序的延時,就可以滿足PDIUSBD12所要求的寫時序了,。
另外由于加入74LS245所造成的對其它接口時序的影響,,可以通過設(shè)置DSP(TMS320C2XX)的WSGR寄存器來消除,所以這個方案是可行的,。(事實上,,后來制造好的電路也證明了這個方案是完全可行的)
對其余時序上的配合,經(jīng)過仔細(xì)的計算與核對證明,,也是完全可行的,。在硬件上,哂方案還采用了一片GAL(16V8)來實現(xiàn)對PDIUSBD12芯片的片選,,以及實現(xiàn)對它的軟件和手動復(fù)位,。硬件總體框圖如圖4所示。
2 軟件設(shè)計
2.1 固件設(shè)計
由于采用的是不帶MCU內(nèi)核的USB接口芯片,,所以關(guān)于USB1.1協(xié)議規(guī)范的實現(xiàn)都必須靠DSP(TMS320C2XX)控制PDIUSBD12芯片來完成,。固件的主要設(shè)計任務(wù)是:在DSP(TMS320C2XX)的平臺上編寫程序,以完成 USB1.1規(guī)范所要求的標(biāo)準(zhǔn)請求及用戶根據(jù)產(chǎn)品需要自己定義的請求,。
為了不影響程序的執(zhí)行效率,,本方案采用中斷方式完成固件的編寫;同時,,為了保證程序的模塊化及良好的可移植性,,在設(shè)計中采用分層結(jié)構(gòu)進(jìn)行固件的編寫,如圖5所示,。
最下層是硬件接口層,,完成硬件上PDIUSBD12與DSP(TMS320C2XX)的對接。主要是DSP(TMS320C2XX)向PDIUSBD12中寫入數(shù)據(jù)或者命令,,以及從中讀取數(shù)據(jù),。
中間層主要有兩個模塊,用來完成PDIUSBD12的命令接口和中斷處理子程序,。命令接口是指按照PDIUSBD12的命令格式,,完成DSP對它的控制。它的基本命令格式是:DSP先向其中的命令地址寫入某一條命令,,接著從它的數(shù)據(jù)地址寫入或者讀出一系列的數(shù)據(jù),。中斷處理子程序是判斷中斷的產(chǎn)生源,然后跳轉(zhuǎn)到相應(yīng)的處理子程序,。這些子程序不做過多的處理,,而僅僅是將命令數(shù)據(jù)讀出然后置標(biāo)志位,或者是將某些數(shù)據(jù)送出,。
最上層是主循環(huán)程序,,以及對于USB1.1標(biāo)準(zhǔn)協(xié)議請求(這些請求主要是在USB1.1協(xié)議規(guī)范的第九章中定義的)和用戶自定義請求的處理程序。主循環(huán)的主要工作是檢查標(biāo)志位,。如果標(biāo)志位被置位,,則調(diào)用處理子程序,判斷是標(biāo)準(zhǔn)請求還是用戶自定義請求,,然后調(diào)用相應(yīng)的處理程序加以處理,,完成請求。
這樣分層的好處是:主循環(huán)程序在檢查標(biāo)志位以外的時間可以進(jìn)行其它工作,,提高固件的運(yùn)行效率,。
編程過程中,由于涉及了一些嚴(yán)格的接口時序配合問題,,所以,,整個固件的編寫工作全部采用DSP(TMS320C2XX)的匯編語言;用的是CC2000編程開發(fā)工具,。
2.2 PC機(jī)軟件的設(shè)計
PC機(jī)的驅(qū)動程序由Philips公司提供,。然后,用VC++6.0,,通過調(diào)用API函數(shù),,編寫PC的應(yīng)用程序。這樣即可實現(xiàn)PC機(jī)對DSP(TMS320C2XX)攝像系統(tǒng)的攝像控制以及圖像的傳輸,。
主要使用的API函數(shù)是DeviceIOControl(),、ReadFile(),、 WriteFile()。其中DeviceIOControl()用于PC(主機(jī))向DSP圖像采集系統(tǒng)發(fā)送請求,;ReadFile()和 WriteFile()分別用于從圖像采集系統(tǒng)中讀出數(shù)據(jù)以及向圖像采集系統(tǒng)中寫入數(shù)據(jù),。
在設(shè)計過程中必須注意的問題是:由于USB接口是主-從方式的接口,它的一切傳輸過程都必須通過主機(jī)向外設(shè)發(fā)送請求后才可以開始,,所以在使用ReadFile(),、WriteFile()讀寫數(shù)據(jù)之前,必須先通過 DeviceIOControl()向圖像采集系統(tǒng)發(fā)送請求,。
3 結(jié)果及分析
設(shè)計方案完成后,,在最后的測試當(dāng)中,通過USB1.1接口,,PC機(jī)與DSP系統(tǒng)的通信速率最高達(dá)到了580KB/s(4.6Mb/s)以上,。這個速率指的是有效數(shù)據(jù)傳輸速率,不包括數(shù)據(jù)傳輸聯(lián)絡(luò)的頭信息部分,,所以這個速率還是比較令人滿意的?,F(xiàn)在,傳輸一張幅面為352×288像素的黑白圖片(大小為99KB),,耗時不到1s,。如果實現(xiàn)動態(tài)的拍攝及顯示,那么,,整個系統(tǒng)每秒可以拍攝并完成顯示 3~4幅不經(jīng)壓縮的幅畫為352×288像素大小的黑白圖片,。
測試結(jié)果表明,該系統(tǒng)運(yùn)行可靠(已將程序燒寫進(jìn)片內(nèi)Flash中),,各項性能指標(biāo)都已達(dá)到了最初的設(shè)計要求,,能夠很好地實現(xiàn)圖像數(shù)據(jù)在PC機(jī)與DSP之間高速的雙向傳輸。并且,,這套USB接口方案只采用了1片PDIUSBD12接口芯片和1片 74LS245,,器件成本只有20元左右,這個成本是比較低的,。同時,,由于采用了DSP作為控制器,所以它的通信速率可以很高,;因此,,可以說本方案達(dá)到了低成本,高速率的USB1.1接口設(shè)計要求,。