新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 深度解讀基于USB接口VSAT基帶數據采集系統設計

        深度解讀基于USB接口VSAT基帶數據采集系統設計

        作者: 時間:2018-08-03 來源:網絡 收藏

        CPLD控制采集外部數據的時鐘可同時作為CY7C68013的從FIFO模式的讀寫控制時鐘,即CY7C68013的接口時鐘連接到IFCLK引腳,FLAGA-FLAGD為FIFO標志引腳,用于映射FIFO的當前狀態,SLWR/SLRD是CY7C68013從FIFO的寫使能/讀允許信號,CPLD向CY7C68013從FIFO提供從FIFO輸出允許信號SLOE,僅在數據輸出時有效,FD[15:0]為16位雙向數據總線。FIFOADR[1:0]為端點FIFO選擇信號。

        本文引用地址:http://www.104case.com/article/201808/385294.htm

        3 軟件設計

        本系統軟件設計部分包括固件、驅動程序和應用程序的設計。

        3.1 USB設備固件程序設計

        固件程序是指運行在設備CPU中的程序,是整個程序設備的核心,可采用匯編語言和C語言設計,CyPress為用戶提供了一個固件程序框架,幫助用戶完成相當一部分USB協議相關的工作,用戶只需根據外設功能的具體要求,在相應的函數中填寫函數體。Cypress提供的這一框架程序簡化了用戶的固件程序設計。

        本系統固件開發所使用的編程語言為德國Keil公司的C51編譯器,集成開發環境為μVision2,該固件共包含以下5個文件:

        1)ez-usb.lib

        是EZ USB函數庫對象程序代碼。

        2)usbjmptb.obj

        定義了FX2中INT2和INT4的中斷跳轉表。

        3)dscr.a51

        包含描述符的表數據,包括設備描述符、設置描述符、接口描述符、端點描述符和字串描述符等,用來定義設備的ID號、端點的設置特性,主機就是通過讀取設備的描述符來獲取USB外設的功能特性,從而給設備加載相應的驅動程序并配置設備。

        4)fw.c

        是固件運行的主程序文件,負責處理主機發出的各種USB設備請求,該程序首先初始化所有的內部狀態變量,然后調用TD_Init函數進行初始化,并打開中斷。之后,固件程序開始列舉USB設備,直至在端點0上接收到SETUP令牌包時為止。一旦接收到STUP令牌,其將重復執行下面的任務分配過程:調用用戶函數TD_Poll,以完成用戶指定的任務;檢測是否有USB設備請求(SETUP令牌)如果有,則執行指令并作出相應的操作,如果沒有,則繼續向下執行,檢測USB核是否有USB掛起實踐,如果有USB掛起事件,則調用用戶程序TD_Suspend,交由用戶處理;當TD_Suspend返回為真時,USB核檢測是否重新開始事件,如果沒有USB掛起事件,則使處理器處于掛起狀態,當檢測有重新開始的事件,USB核調用用戶程序TD_Resume,并繼續執行本步驟,當TD_Suspend返回為假時,則繼續執行本步驟。

        5)periph.c

        包含各種用戶功能函數(如TD_Init、TD_Poll等)及其INT2中斷服務子程序的定義,它實現了本系統的主要功能。

        在本系統中,把端點2配置為批量傳輸、IN方向,封包大小為512字節,每微幀包含2個封包,數據傳輸速率為64Mbit/s為就可滿足實際需要,終端0作為默認的控制傳輸管道來處理USB事件。

        3.2 驅動程序設計

        FX2的設備驅動程序有兩種:一種用來在設備接入時從主機下載固件到RAM中,稱為固件下載驅動程序(ezloader.sys);另一種是在設備重新列舉后加載的設備驅動程序(ezusb.sys)。應用軟件通過該設備驅動程序與FX2通信。

        固件的程序代碼既可以通過外部E2PROM下載,也可以通過主機下載在本系統中選擇從主機下載,此時外接E2PROM中存放的是固件下載的PID/VID,且第1個字節是0xC0H,系統通過該PID/VID找到固件下載驅動程序(ezloader.sys)將相應的固件代碼下載到FX2的RAM中。ezloader.sys的生成是利用Cypress公司提供的固件下載驅動程序源代碼和用戶編譯成功的固件代碼。在Win2000 DDK中創建的,并根據E2PROM提供的PID/VID修改相應的.inf文件,在將固件下載RAM中后,系統清楚內存中的固件下載驅動程序,并進行重新列舉,讓C8051固件控制FX2,此時,系統獲得由C8051固件提供的PID/VID(與E2PROM中的不同),認為有新的USB設備接入,并據此加載相應的設備驅動程序。

        Ezusb.sys是本系統運行時所使用的主要驅動程序,它定義了幾個IOCTL代碼,其中:IOCTL_Ezusb_GET_DEVICE_DESCRIPTOR用于讀取USB設備描述符;IOCTL_Ezusb_GET_CONFIGURATION_DESCRIPTOR用于讀取USB設備的配置信息,IOCTL_Ezusb_BULK_READ用于主機讀取USB設備發出的塊數據,IOCTL_Ezusb_GET_CURRENT_FRAME_NUMBER,用于讀取USB傳輸過程中當前的幀序號。

        3.3 用戶程序設計

        應用程序開發中,可用VC++編制應用程序。所有的用戶程序是通過I/O控制調用來訪問EZ-USB的設備驅動程序的,可以把EZ-USB設備當成文件來操作,利用CreateFile得到EZ-USB句柄,通過得到的句柄,用一個Win32函數DeviceIoControl(),把IOCTL和相關的輸入輸出緩沖區提交給驅動程序,來進行控制傳輸,用ReadFile,WriteFile進行批量傳輸。當應用軟件退出時,用CloseHandle()關閉設備。

        4 結束語

        本文結合實際工程的需要,提出了基于數據采集的設計方案,并給出了硬件系統及軟件設計方法,在USAT通信的實際應用中,該系統與后端軟件結合,很容易實現對VSAT數據的分析與處理,可廣泛應用于VSAT通信系統中。


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 长武县| 金阳县| 洛扎县| 咸丰县| 长岛县| 长治市| 绵竹市| 广灵县| 郑州市| 宁乡县| 内丘县| 海林市| 依安县| 湛江市| 福贡县| 和政县| 宽城| 肥乡县| 汉阴县| 宁强县| 古蔺县| 垫江县| 桂阳县| 永嘉县| 大港区| 札达县| 娄底市| 阳原县| 大理市| 华安县| 隆林| 永丰县| 靖边县| 集贤县| 仁怀市| 兴安盟| 通州市| 利川市| 宾阳县| 重庆市| 阳原县|