<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 深度解讀基于USB接口VSAT基帶數(shù)據(jù)采集系統(tǒng)設(shè)計

          深度解讀基于USB接口VSAT基帶數(shù)據(jù)采集系統(tǒng)設(shè)計

          作者: 時間:2018-08-03 來源:網(wǎng)絡(luò) 收藏

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

          本文引用地址:http://www.ex-cimer.com/article/201808/385294.htm

          3 軟件設(shè)計

          本系統(tǒng)軟件設(shè)計部分包括固件、驅(qū)動程序和應(yīng)用程序的設(shè)計。

          3.1 USB設(shè)備固件程序設(shè)計

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

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

          1)ez-usb.lib

          是EZ USB函數(shù)庫對象程序代碼。

          2)usbjmptb.obj

          定義了FX2中INT2和INT4的中斷跳轉(zhuǎn)表。

          3)dscr.a51

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

          4)fw.c

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

          5)periph.c

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

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

          3.2 驅(qū)動程序設(shè)計

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

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

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

          3.3 用戶程序設(shè)計

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

          4 結(jié)束語

          本文結(jié)合實際工程的需要,提出了基于數(shù)據(jù)采集的設(shè)計方案,并給出了硬件系統(tǒng)及軟件設(shè)計方法,在USAT通信的實際應(yīng)用中,該系統(tǒng)與后端軟件結(jié)合,很容易實現(xiàn)對VSAT數(shù)據(jù)的分析與處理,可廣泛應(yīng)用于VSAT通信系統(tǒng)中。


          上一頁 1 2 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();