基于USB2.0的高速圖像傳輸系統設計
USB接口器件采用Cypress公司的CY7C68033,其內部集成有USB2.0收發(fā)器、串行接口引擎(SIE)、增強型的8051內核和可編程控制的外圍接口(GPIF),可提供高速數據傳輸有效、方便的解決方案。CY7C68033的固件程序位于內部RAM中,由uSB或電子可擦寫(xiě)可編程只讀存儲器(EEP-ROM)下載;具有4個(gè)可以自由編程分配控制的端點(diǎn);8位或16位外部數據接口:內部具有4個(gè)集成的FIFO,對外有兩種接口模式,Master模式使用GPIF接口,Slave FIFO模式使用集成的FIFO供外部設備讀寫(xiě),很容易與外部的專(zhuān)用集成電路或DSP器件連接;內置增強型的8051內核時(shí)鐘最高可達48 MHz,其指令周期只需4個(gè)時(shí)鐘周期;具有2個(gè)通用異步收發(fā)器(UART)、3個(gè)定時(shí)計數器、擴展的中斷系統;內置2個(gè)I2C總線(xiàn)控制模塊。
2.2 USB接口設計
圖2是該高速圖像采集系統的USB接口電路連接圖。 本文引用地址:http://dyxdggzs.com/article/202556.htm
圖2中,CY7C68033的PA3~PA2引腳作為地址線(xiàn)與TMS320DM6437 DSP的HCNTL[1:0]相連,用于選擇HPI的寄存器與工作模式;FD[15:0]作為16位數據總線(xiàn)與HPl的數據總線(xiàn)HD[15:0]相連,用于交換數據;CTLx引腳為GPIF的輸出控制信號,RDYO引腳為GPIF的輸入控制信號。由于訪(fǎng)問(wèn)HPI寄存器需兩次半字傳輸,因此使用CY7C68033的CTL0引腳進(jìn)行控制。TMS320DM6437的HR/W接至CTL1,用來(lái)作為讀/寫(xiě)選擇標志;HDS1與CTL2相連,作為數據選通信號。HRDY與輸入信號線(xiàn)RDYO相連,用于查詢(xún)HPI接口狀態(tài),GPIF通過(guò)監測該信號以控制內部存取操作。TMS320DM6437的HINT與CY7C68033的INT0引腳相連,DSP復位時(shí)HINT引腳啟用,該引腳也用于DSP向CY7C68033發(fā)送外部中斷請求。另外,TMS320DM6437的HCS3引腳接地表示可對HPI進(jìn)行連續存取操作。
3 圖像采集系統軟件設計
當USB設備插入計算機時(shí),計算機和USB設備之間產(chǎn)生一個(gè)枚舉過(guò)程。計算機檢測到有設備插入。自動(dòng)發(fā)出查詢(xún)請求;USB設備回應該請求,發(fā)送出該設備的Vendor ID和Product ID;計算機根據這兩個(gè)ID裝載相應設備驅動(dòng)程序,完成枚舉過(guò)程。然后就可以傳輸數據,接收數據,即TMS320DM6437 DSP向PC機傳輸數據時(shí),首先向CY7C68033發(fā)送一硬件中斷信號,CY7C68033接收該中斷,并啟動(dòng)接收程序,通過(guò)HPI接口設置DSP的HPIC寄存器的HINT標志位,使DSP下一次仍通過(guò)該位發(fā)出中斷:然后通過(guò)端口6將固定長(cháng)度(512字節)的數據讀人FIFO:端口6讀取數據時(shí),為了保證較高的傳輸速度,CY7C68033中的CPU不能干預數據傳輸,當FIFO中的數據達到一定數量后,CY7C68033自動(dòng)將數據打包傳送給USB總線(xiàn);發(fā)送數據時(shí),它將數據包直接傳輸給CY7C68033,CY7C68033接收到數據后,按指定字節長(cháng)度將數據讀到發(fā)送端口2的FIFO中,然后自動(dòng)啟動(dòng)GPIF,將數據傳送給DSP,接下來(lái)CY7C68033通過(guò)HPI接口設置DSP的HPIC寄存器中的DSPINT位(將其置1),向DSP發(fā)送請求中斷,通知DSP有數據包。
USB設備的軟件開(kāi)發(fā)包括設備固件、設備驅動(dòng)程序以及應用程序3方面設計。
3.1 設備固件
設備固件設計是由主程序和中斷處理程序2部分組成,其中,主程序負責系統外設器件的互聯(lián)以及初始化設置USB端口等。系統上電時(shí),通過(guò)USB電纜將固件程序下載到CY7C68033的內部RAM,為了傳輸可靠,固件程序下載采用批量傳輸方式。由于系統要求快速持續傳輸大量數據,因此采用同步傳輸方式。
3.2 USB設備驅動(dòng)程序
USB設備驅動(dòng)程序設計一般采用Windows DDK(devicedriver kil)設計,但由于DDK的復雜性和調試難度,難以開(kāi)發(fā)穩定完善的USB驅動(dòng)程序。因此,這里選用NuMega公司的開(kāi)發(fā)軟件DriverWorks,它是以面向對象的思想完全封裝DDK的所有庫函數。
通過(guò)DriverWorks提供的類(lèi),編寫(xiě)大部分驅動(dòng)程序。最重要的是DriverWorks提供對USB總線(xiàn)的封裝,這樣大大簡(jiǎn)化對USB總線(xiàn)的操作接口。DriverWorks通過(guò)向導生成USB驅動(dòng)程序的框架,并利用KDriver、KPnpDevice、KpnpLowerDe-vice等類(lèi)簡(jiǎn)化WDM(Win32 driver module)驅動(dòng)程序編程,它們分別對應的封裝是WDM中的PD0、FD0、FiD0。每一個(gè)WDM驅動(dòng)程序都有一個(gè)入口函數AddDevice,當PC機監測到USB接口中接入新設備時(shí).立刻調用入口函數AddDevice并且創(chuàng )建設備的PD0,接著(zhù)將其保存到函數參數指針中。成員函數AddDevice同時(shí)創(chuàng )建另外一個(gè)設備對象FD0.它被KPnpDevice封裝。對WDM總線(xiàn)驅動(dòng)程序的上層接口通過(guò)KpnpLowerDevice類(lèi)實(shí)現FD0和PD0之間的連接,同時(shí)它也提供對PD0的操作接口。對USB客戶(hù)驅動(dòng)程序從KLow-erDevice類(lèi)派生出的KusbLowerDevice類(lèi)封裝USB的底層設備對象,通過(guò)其接口操作USB總線(xiàn)的驅動(dòng)程序。
評論