范超 趙琳 李真
摘要:該文設計一種基于USB的視頻傳輸系統(tǒng)。首先對USB接口的工作原理進行簡要介紹,在此基礎上進行基于PDIUSBD12芯片的USB總線設計,并使用FPGA進行系統(tǒng)控制實現與PC機的信息交互。
關鍵詞:視頻傳輸;FPGA;USB
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2017)14-0216-02
1系統(tǒng)硬件總體架構
本系統(tǒng)采用P89C52控制芯片和PDIUSBD12接口芯片完成FPGA與PC之間的數據傳輸,數據傳輸部分主要包括FPGA與USB之間的數據交換和USB與PC之間的數據交換,系統(tǒng)總體通信結構如圖1所示。
如圖1所示,FPGA通過USB接口與PC進行通信,USB接口由微控制器P89C52和PDIUSBD12接口芯片組成,P89C52通過P2口與FPGA做并行數據通路。FPGA通過寫選通信號控制P89C52讀取數據,需要讀取數據時FPGA給P89C52寫選通信號有效,P89C52讀取FPGA內部FIFO中的數據,數據讀取完成后FPGA寫選通信號變?yōu)闊o效。
USB接口為主從模式,USB與主機的數據傳輸均需由主機端發(fā)起。接口控制芯片響應主機的讀數請求,一旦收到主機的讀數請求,接口控制芯片將數據緩沖區(qū)中的數據寫入PDI-SUBD12接口芯片的端口1。PDISUBD12和89C52單片機之間的連接如圖1所示(圖中部分信號未列出)。
2系統(tǒng)軟件總體設計
系統(tǒng)軟件主要由固件程序,驅動程序,和PC端應用程序組成,其中固件程序是完成數據傳輸功能的核心,固件程序運行于P89C52支持USB協(xié)議。
固件程序主要由以下三部分組成:
1)初始化單片機和所有的外圍電路;
2)主循環(huán);
3)中斷服務程序。
圖2為主程序流程圖,如圖所示,系統(tǒng)上電后接口控制器(P89C52)首先進行初始化,然后向主機發(fā)出連接USB命令,主機收到接口控制器發(fā)送的連接請求后讀取設備描述符,并根據設備描述符,啟動相應的設備驅動程序,完成USB總線連接。然后主程序進入循環(huán),運行控制子程序,數據傳輸功能由中斷服務程序完成。
根據USB協(xié)議,USB數據傳輸均由主機發(fā)起,主機首先向PDIUSBD12發(fā)送令牌包,PDIUSBD12接收到主機發(fā)送的令牌包后向接口控制器發(fā)中斷,接口控制器響應中斷進入中斷服務程序后,首先讀PDIUSBD12的中斷寄存器,判斷USB令牌包的類型,然后執(zhí)行相應的操作。
中斷服務程序在整個程序體中非常重要,主要負責修改中斷變量聯合體和填充控制結構體的值,以便主循環(huán)能根據標志變量聯合體中的標志變量的變化來執(zhí)行具體的程序。對于總線復位和掛起改變,程序只修改其對應的標志位,但對于其它標志變化,如控制輸入輸出、端點輸A/輸出還需要執(zhí)行相應的程序,以完成數據傳輸。PDIUSBD12收到數據包后向接口控制器發(fā)送中斷請求,接口控制器響應中斷,在中斷服務程序中讀取PDIUSBD12內部緩沖區(qū)的數據,同時清空PDIUSBD12的內部緩沖區(qū),并修改相應的標志位。圖3為中斷服務程序的框圖。
接口控制器通過向PDIUSBD12發(fā)送命令和數據實現與PDIUSBD12的通信。PDIUSBD12有初始化命令字、數據流命令字和通用命令字三種命令字。接口控制器首先向PDI-USBD12發(fā)送命令字,根據不同命令字的要求再發(fā)送或讀出數據。本系統(tǒng)將每種命令字設計為命令函數,通過函數調用實現各個命令字的發(fā)送。
當接口控制器給PDIUSBD12的端點緩沖區(qū)發(fā)數據時應首先判斷緩沖區(qū)是否為空,否則如果主機還沒有將上一個包的數據從PDIUSBD12讀走,接口控制器又將另一個包寫進PDI-USBD12的緩沖區(qū)時會覆蓋掉以前的數據。判斷緩沖區(qū)是否為空的程序如下。
3結論
本設計方案已經經過了硬件驗證,達到了預定的設計要求,實現了大數據量的實時傳輸且具有良好的靈活性和擴展性。