0 引言
一個(gè)典型的水下圖像傳輸系統(tǒng)采用DSP(數(shù)字信號(hào)處理器)作為實(shí)時(shí)圖像處理的核心單元,并用PC機(jī)建立良好的人機(jī)界面,以完成圖像的采集和顯示。因此,PC上位機(jī)與DSP間需進(jìn)行一種高效、快速的數(shù)據(jù)傳輸。目前PC機(jī)和DSP常采用RS-232串口通信方式實(shí)現(xiàn)數(shù)據(jù)交換,其通信協(xié)議簡(jiǎn)單,但在大數(shù)據(jù)量的圖像信息傳輸中,很難滿(mǎn)足系統(tǒng)的實(shí)時(shí)性要求。此外,PC機(jī)本身串口資源也十分有限。而USB(通用串行總線(xiàn))作為一種快速且有彈性的新式接口,可以滿(mǎn)足多數(shù)情況下大數(shù)據(jù)量實(shí)時(shí)交換的要求。
本文提出一種基于USB接口的圖像傳輸系統(tǒng)方案,介紹DSP和上位機(jī)間的USB接口設(shè)計(jì),利用TI公司的DSP芯片TMS320VC5502和Cypress公司Ez-USB SX系列芯片CY7C68001,完成USB接口擴(kuò)展的軟硬件設(shè)計(jì),實(shí)現(xiàn)DSP與上位機(jī)間的高速數(shù)據(jù)傳輸。
1系統(tǒng)整體方案
系統(tǒng)整體結(jié)構(gòu)如圖1所示。
在發(fā)送端,PC機(jī)將待發(fā)送圖像轉(zhuǎn)換為數(shù)據(jù)比特流送到USB總線(xiàn)上,同時(shí),在主機(jī)屏幕上顯示原圖像。圖像數(shù)據(jù)經(jīng)DSP和外圍電路的處理后送人信道。接收機(jī)對(duì)接收信號(hào)進(jìn)行處理后,通過(guò)USB總線(xiàn)把圖像數(shù)據(jù)傳回上位機(jī)并顯示接收?qǐng)D像。其中,DSP和上位機(jī)間的USB接口設(shè)計(jì)是本文的重點(diǎn)。
2硬件設(shè)計(jì)
USB接口擴(kuò)展的硬件設(shè)計(jì)如圖2所示
TMS320VC5502是一款定點(diǎn)16位芯片,作為T(mén)I公司TMS320C5000 DSP平臺(tái)上性?xún)r(jià)比最佳的新型產(chǎn)品,其運(yùn)算速度高達(dá)600億次乘加運(yùn)算每秒。它具有1條32 bit的程序讀總線(xiàn)和5條16 bit的數(shù)據(jù)總線(xiàn),片上集成有ROM(16 k×16 bit)、DARAM(32 k×16 bit)等存儲(chǔ)器和豐富的外設(shè)資源,可滿(mǎn)足大數(shù)據(jù)量的圖像處理要求。此外,芯片低功耗(不到200 mW)的特點(diǎn)使它可以應(yīng)用到水下圖像傳輸系統(tǒng)中。
由于DSP的I/O口資源有限,系統(tǒng)采用FP-GA芯片EPF10k10A完成地址譯碼。它具有66個(gè)用戶(hù)IO口,將DSP的部分地址線(xiàn)連接到FPGA的IO口并配置為輸入端口,通過(guò)FPGA程序模擬譯碼器邏輯,可以產(chǎn)生Flash存儲(chǔ)器、SDRAM、USB、UART等所有與DSP通信的模塊片選信號(hào),從而實(shí)現(xiàn)DSP的I/O口擴(kuò)展。
USB通信協(xié)議較復(fù)雜,因此,本系統(tǒng)采用Cypress公司的CY7C68001芯片實(shí)現(xiàn)USB2.0接口,該芯片集成了USB2.0收發(fā)器和SIE(串行接口引擎),分別完成物理層和鏈路層的數(shù)據(jù)通信管理,USB的應(yīng)用層協(xié)議由TMS320VC5502編程實(shí)現(xiàn)。
CY7C68001芯片支持高速(480 Mbit/s)或全速(12 Mbit/s)USB數(shù)據(jù)傳輸;內(nèi)部有4個(gè)端點(diǎn)(End-point)共享4 kB的FIFO,每個(gè)端點(diǎn)對(duì)應(yīng)的FIFO空間大小及FIFO狀態(tài)可編程;芯片還具有智能SIE功能,可在不借助微處理器中斷的前提下完成枚舉。
CY7C68001具有16根數(shù)據(jù)總線(xiàn)FD[15:0],3根地址線(xiàn)FIFOADR[2:0]用于選通命令接口或指定的FIFO。此外,/INT信號(hào)表明CY7C68001有中斷事件發(fā)生,或通知DSP對(duì)CY7C68001的讀操作結(jié)束;READY信號(hào)表明CY7C68001處于可讀寫(xiě)狀態(tài)。
3軟件編程
3.1主機(jī)端程序
USB協(xié)議中包含控制型(contro1)、等時(shí)型(Isoch-ronous)、中斷型(Interrupt)和批量型(Bulk)4種基本的數(shù)據(jù)傳輸類(lèi)型。其中,批量傳輸特別適合大數(shù)據(jù)量的傳輸,在沒(méi)有帶寬和間隔時(shí)間要求時(shí),可以保證快速準(zhǔn)確的傳輸。因此,本系統(tǒng)采用批量傳輸方式進(jìn)行PC機(jī)與DSP間的圖像數(shù)據(jù)傳輸。
主機(jī)端軟件包括3個(gè)部分:
a)CY7C68001的驅(qū)動(dòng)程序,用于實(shí)現(xiàn)USB設(shè)備的發(fā)現(xiàn)、配置和關(guān)閉,實(shí)現(xiàn)數(shù)據(jù)傳送接口與控制等功能。結(jié)合EZ-USB的GPD(通用設(shè)備驅(qū)動(dòng)程序),在Windows WDM DDK環(huán)境下編譯生成驅(qū)動(dòng)程序的系統(tǒng)文件(.sys)。
b)安裝USB時(shí)的信息文件(.inf),用于將驅(qū)動(dòng)程序綁定到特定設(shè)備的Verdor ID(VID)和Product ID(PID)。當(dāng)USB設(shè)備插入計(jì)算機(jī)時(shí),計(jì)算機(jī)檢測(cè)到設(shè)備插入后自動(dòng)發(fā)出查詢(xún)請(qǐng)求;USB設(shè)備回應(yīng)該請(qǐng)求,并送出設(shè)備的VID/PID。計(jì)算機(jī)根據(jù)這兩個(gè)ID裝載相應(yīng)設(shè)備驅(qū)動(dòng)程序,完成枚舉。
c)系統(tǒng)上位機(jī)(PC)處理程序,采用Microsoft Vis-ual C++軟件編寫(xiě),通過(guò)對(duì)界面上控件的操作產(chǎn)生消息,使CPU執(zhí)行相應(yīng)的動(dòng)作。以發(fā)送端為例,主機(jī)程序流程如圖3所示。
驅(qū)動(dòng)程序與應(yīng)用程序的接口函數(shù)定義如下:
[align=left] 對(duì)用戶(hù)而言,所有應(yīng)用程序均通過(guò)IO控制來(lái)訪問(wèn)EZ-USB GPD。以上接口函數(shù)主要調(diào)用兩個(gè)Win32API函數(shù):首先通過(guò)CreatFile()連接USB設(shè)備并獲取訪問(wèn)設(shè)備驅(qū)動(dòng)程序的句柄;再調(diào)用DeviceIoControl()提交I/O控制碼(IOCTL),向驅(qū)動(dòng)程序發(fā)送相應(yīng)命令,并為CreatFile()返回的設(shè)備句柄設(shè)置I/O緩沖區(qū)。部分源代碼如下:
[/align]
3.2 DSP端程序
USB主機(jī)與設(shè)備間的數(shù)據(jù)傳輸是通過(guò)設(shè)備中的端點(diǎn)(Endpoint)進(jìn)行的。這些端點(diǎn)通過(guò)端點(diǎn)號(hào)和輸入輸出方向來(lái)進(jìn)行標(biāo)識(shí),并為數(shù)據(jù)傳輸分配固定FIFO存儲(chǔ)區(qū)。本系統(tǒng)在初始化時(shí)將CY7C68001的4個(gè)端點(diǎn)配置為批量傳輸類(lèi)型。其中,F(xiàn)IF02、FIF04為輸出端點(diǎn),用于接收上位機(jī)傳來(lái)的數(shù)據(jù);FIF06、FIF08為輸入端點(diǎn),用于存放待發(fā)送的數(shù)據(jù)。各個(gè)FIFO設(shè)置為異步工作模式。
DSP經(jīng)初始化后打開(kāi)USB外部中斷,向CY7C68001寫(xiě)入描述符表,等待其枚舉中斷。枚舉成功后,DSP對(duì)CY7C68001進(jìn)行其他配置并清空FIFO,然后等待主機(jī)發(fā)送用戶(hù)請(qǐng)求并進(jìn)行相應(yīng)處理。
程序流程如圖4所示。程序在TI CCS 2.2集成開(kāi)發(fā)環(huán)境下進(jìn)行編譯并調(diào)試通過(guò)
3.2.1 USB的初始化
在每個(gè)USB設(shè)備的內(nèi)部都有一個(gè)設(shè)備描述符(descriptor)表,它包含了設(shè)備的全部要求和特性。通過(guò)主機(jī)與設(shè)備間的控制傳輸來(lái)辨識(shí)并配置新連接上的USB設(shè)備的過(guò)程稱(chēng)為設(shè)備枚舉(enumeration)。CY7C68001芯片內(nèi)有一個(gè)大小為500字節(jié)的描述符RAM,用于存放描述符表,內(nèi)部寄存器DESC用于存放描述符表的長(zhǎng)度。
CY7C68001的枚舉方式有EEPROM自舉和通過(guò)DSP自舉(默認(rèn))2種。本系統(tǒng)采用默認(rèn)方式,先由DSP向DESC寄存器寫(xiě)入2字節(jié)的描述符表長(zhǎng)度,再通過(guò)命令口將描述符表按字節(jié)寫(xiě)入描述符RAM。描述符表寫(xiě)入后,DSP等待CY7C68001的枚舉成功中斷。枚舉成功后,CY7C68001完成對(duì)各端點(diǎn)的配置。
3.2.2 CY7C68001的寄存器讀寫(xiě)
DSP采用二次尋址方式對(duì)CY7C68001寄存器進(jìn)行讀寫(xiě),即首先通過(guò)命令口將要尋址的寄存器子地址和操作類(lèi)型(讀/寫(xiě))寫(xiě)入,然后通過(guò)命令口將數(shù)據(jù)讀出或?qū)懭?。具體步驟可參考CY7C68001芯片手冊(cè)。
3.2.3 CY7C68001的中斷
SX2共有以下6個(gè)中斷源:
SETUP:SX2收到無(wú)法自動(dòng)處理的上位機(jī)請(qǐng)求;
EPOBUF:端點(diǎn)0的緩沖區(qū)處于可讀/寫(xiě)狀態(tài);
FLAGS:OUT端點(diǎn)FIFO轉(zhuǎn)為非空狀態(tài);
ENUMOK:SX2枚舉成功;
BUSACTIVITY:總線(xiàn)掛起/恢復(fù);
READY:從低功耗通過(guò)WAKEUP引腳被喚醒。
當(dāng)有中斷事件發(fā)生時(shí),CY7C68001通過(guò)INT信號(hào)觸發(fā):DSP中斷。DSP在USB的ISR(中斷服務(wù)子程序)中通過(guò)讀命令口來(lái)判斷中斷源,并設(shè)置相應(yīng)中斷標(biāo)志。若為SETUP中斷,即SX2收到無(wú)法自動(dòng)處理的用戶(hù)請(qǐng)求(如用戶(hù)定義的批量讀/寫(xiě)),則在隨后的中斷處理中,ISR從命令口依次讀入8個(gè)字節(jié),存入用戶(hù)命令緩沖區(qū)中,再由主程序解析執(zhí)行。
4結(jié)束語(yǔ)
本系統(tǒng)利用USB2.0接口芯片CY7C68001實(shí)現(xiàn)上位機(jī)和DSP的高速圖像數(shù)據(jù)傳輸,為水下圖像傳輸系統(tǒng)建立良好的人機(jī)界面,用戶(hù)利用PC機(jī)將待發(fā)送的圖像送入發(fā)送機(jī)的DSP,接收機(jī)的DSP將收到的圖像數(shù)據(jù)送回PC機(jī)并顯示,用戶(hù)可對(duì)發(fā)送和接收到的圖像進(jìn)行直觀對(duì)比。