一種新型高速數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
固件程序即為寫入U(xiǎn)SB單片機(jī)中的程序,它是設(shè)備運(yùn)行的控制中樞.Cypress公司提供了固件架構(gòu),用戶可以利用這一架構(gòu)簡化固件開發(fā)。固件設(shè)計(jì)架構(gòu)是由Keil C51編譯器與其整合開發(fā)工具編寫和構(gòu)建的.在程序開始時(shí),固件架構(gòu)會(huì)執(zhí)行下列步驟:
1) 設(shè)置所有內(nèi)部狀態(tài)變量的初始值。
2) 調(diào)用用戶的初始設(shè)置函數(shù)TD_Init( ),待返回后,固件架構(gòu)就會(huì)將USB接口設(shè)置為未配置的狀態(tài)。
3) 在1s的時(shí)間間隔內(nèi),開始重新進(jìn)行設(shè)備列舉,直到設(shè)置封包收到端點(diǎn)0為止。
4) 當(dāng)SETUP封包被檢測到后,固件架構(gòu)就會(huì)啟動(dòng)工作分配器,而這個(gè)工作分配器就會(huì)按順序重復(fù)地執(zhí)行下面的工作:
A: 調(diào)用用戶函數(shù)TD_Poll( )。
B: 是否決定標(biāo)準(zhǔn)設(shè)備請求是未定(或等待決定)的。如果已決定,它將會(huì)分析所收到的命令請求,并且加以響應(yīng)。
C: 是否決定USB核心已經(jīng)報(bào)告了USB中止(Suspend)事件。如果已決定,它會(huì)調(diào)用用戶函數(shù)TD_Suspend()。
若取得成功的返回,則測試回復(fù)(Resume)事件。反之,如果未檢測到,將會(huì)把微處理器放人中止模式中。當(dāng)回復(fù)事件被檢測到時(shí),將調(diào)用用戶函數(shù)TD_Resume( ),并且連續(xù)地跳回至步驟C。
D: 若從TD_Suspend()函數(shù)中未收到成功的返回,再連續(xù)地跳至步驟C。
實(shí)際上Cypress公司提供的這個(gè)固件框架已經(jīng)能夠使USB芯片正常的工作,但是,它并不能滿足本系統(tǒng)的需要。需要添加自己的控制代碼來控制USB芯片,使之能夠完成需要的工作。
框架程序中為提供了兩個(gè)函數(shù)TD_Init( ),TD_Poll( ),根據(jù)上面的分析發(fā)現(xiàn),這兩個(gè)函數(shù)分別完成了系統(tǒng)的初始化工作和系統(tǒng)的用戶期望工作。在此采集系統(tǒng)中,只需要修改這兩個(gè)函數(shù),添加自己的功能函數(shù),即可完成系統(tǒng)需要的功能。
在TD_Init( )中,需要添加自己的代碼來完成系統(tǒng)的初始化,因?yàn)橄到y(tǒng)采用了2端點(diǎn)和6端點(diǎn)的批量讀寫功能,所以,將2端點(diǎn)配置單緩沖區(qū)512字節(jié),兩倍緩沖區(qū),作為In端點(diǎn),將6端點(diǎn)配置為單緩沖區(qū)512字節(jié),兩倍緩沖區(qū),作為Out端點(diǎn),配置系統(tǒng)為異步Slave FIFO 模式。
在TD_Poll( )中,通過檢測2端點(diǎn)和6端點(diǎn)緩沖區(qū)數(shù)據(jù)的狀態(tài),來及時(shí)的讀取這兩個(gè)緩沖區(qū)中的數(shù)據(jù),然后調(diào)用自己定義的函數(shù)DecodeInst( ), ImplementInst( )來完成對(duì)于控制指令的譯碼和執(zhí)行工作。
驅(qū)動(dòng)程序
基于EZ-USB FX2的二次枚舉的特性,需要編制兩個(gè)驅(qū)動(dòng)程序:一個(gè)驅(qū)動(dòng)程序loader.sys,它將在主機(jī)上編寫好的固件程序在主機(jī)系統(tǒng)啟動(dòng)時(shí)下載至FX2的RAM中;另一個(gè)驅(qū)動(dòng)程序USBBULK.sys為實(shí)際安裝的驅(qū)動(dòng)程序。另外,為實(shí)現(xiàn)在系統(tǒng)啟動(dòng)時(shí),自動(dòng)安裝兩次驅(qū)動(dòng)程序,還需編寫自己的ezloader.inf文件實(shí)現(xiàn)。loader.sys需要自己編寫生成,USBBULK.sys可使用CYPRESS公司的通用驅(qū)動(dòng)程序。
用戶程序
用戶程序是系統(tǒng)與用戶的接口,它通過通用驅(qū)動(dòng)程序完成對(duì)外設(shè)的控制和通信。在編寫用戶程序時(shí),首先要建立與外設(shè)的連接,然后才能實(shí)施數(shù)據(jù)的傳輸。啟動(dòng)采樣后,為了保證不丟失數(shù)據(jù),用戶程序應(yīng)建立一個(gè)新的工作線程專門獲取外設(shè)傳來的數(shù)據(jù)。程序中主要用到兩個(gè)API函數(shù):CreateFile()和DeviceIoControl()。CreateFile()取得設(shè)備句后,DeviceIoControl()根據(jù)該句柄完成數(shù)據(jù)傳輸。
系統(tǒng)通過DeviceIoControl()完成的工作如下:
數(shù)據(jù)批量讀,數(shù)據(jù)批量寫。
結(jié)語
為了驗(yàn)證本系統(tǒng)采集數(shù)據(jù)的準(zhǔn)確性,利用信號(hào)源產(chǎn)生的正弦波信號(hào)對(duì)系統(tǒng)進(jìn)行驗(yàn)證。測試結(jié)果如圖3所示。
圖3 測試結(jié)果
通過實(shí)際測量,該系統(tǒng)測量數(shù)據(jù)與實(shí)際情況完全符合,單通道采樣速率最高可達(dá)到10Mbps。
整個(gè)采集系統(tǒng)由USB2.0數(shù)據(jù)傳輸、FPGA、邏輯電路、和計(jì)算機(jī)等組成,通過對(duì)該系統(tǒng)的硬件電路設(shè)計(jì)和軟件編程分析,以及實(shí)際測量結(jié)果的比較,證明了該系統(tǒng)的可行性。由于采用高速USB2.0接口,本系統(tǒng)具有即插即用、高速采集等特點(diǎn),具有很好的擴(kuò)展性。該采集系統(tǒng)已經(jīng)在雷達(dá)接收機(jī)的測試系統(tǒng)中得到應(yīng)用。
參考文獻(xiàn):
1. 李玉國,李剛,林凌,基于ADuC841的USB接13數(shù)據(jù)采集系統(tǒng)設(shè)計(jì),電子產(chǎn)品世界,2006,11:100-104
2. 王羽中,潘明海,基于USB2.0的多通道數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn),電子測量技術(shù),2007,30(6):83-86
3. 金達(dá),闕沛文.當(dāng)前計(jì)算機(jī)技術(shù)發(fā)展對(duì)基于PC機(jī)自動(dòng)測試系統(tǒng)的影響,計(jì)算機(jī)自動(dòng)測量與控制,1999,8(1):5—7.
4. 朱正平,寧百齊,袁洪,肖山竹.基于USB2.0接口芯片F(xiàn)X2的高速效據(jù)采集的設(shè)計(jì)實(shí)現(xiàn),微計(jì)算機(jī)應(yīng)用,2006, (3):328— 331
評(píng)論