基于ARM-Linux的數(shù)據(jù)采集和網(wǎng)絡(luò)傳輸系統(tǒng)設(shè)計
8片MAX1308由兩片Altera公司的Cyclone II系列FPGA芯片控制,每片F(xiàn)PGA內(nèi)部分為兩個模塊,一個為AD轉(zhuǎn)換控制模塊,另一個為FIFO存儲模塊。最終兩個FIFO存儲器分別掛在S3C2440芯片的BANK3和BANK5上,通過數(shù)據(jù)總線,ARM處理器可以讀取FIFO內(nèi)的數(shù)據(jù)。ARM與FPGA(FIFO)接口電路如圖4所示。
其中的FIFO由Quartus II提供的IP核手動配置,自動生成。FIFO的輸出通過一組三態(tài)門與ARM的數(shù)據(jù)總線相連,三態(tài)門的EN端分別由nGC S3和nGCS5控制,同時nGCS3和nGCS5通過反相器分別與兩個FIFO的rdreq端相連,這樣ARM通過這兩個片選信號可同時打開FIFO的輸出通道以及讀使能信號rdreq。nOE信號通過反相器分別與兩個FIFO的rdclk端相連,來提供FIFO的讀時鐘信號。
3 軟件設(shè)計
3.1 AD控制部分
MAX1308采用內(nèi)部時鐘的采樣時序圖如下圖5所示。其中雙向并行接口DO~D7用來設(shè)置8位配置寄存器,以激活和禁止相應(yīng)的采樣通道。內(nèi)部時鐘模式下,啟動一次轉(zhuǎn)換,需在采樣時間(tACQ)內(nèi)將CONVST置為低電平,此時T/H捕獲信號,在CONVST上升沿轉(zhuǎn)換開始。一旦能夠讀取轉(zhuǎn)換結(jié)果,轉(zhuǎn)換結(jié)束信號()將給出一個低電平脈沖。當(dāng)最后一個通道的轉(zhuǎn)換結(jié)果可以被讀取時,最后轉(zhuǎn)換結(jié)束信號()跳變到低電平。
FPGA內(nèi)部按照上述時序邏輯實現(xiàn)采集模塊后,再連接到FIFO模塊上,然后通過一組三態(tài)門掛接到ARM數(shù)據(jù)總線上。
3.2 Linux設(shè)備驅(qū)動
設(shè)備驅(qū)動程序在Linux內(nèi)核中扮演著特殊的角色,它使某個特定硬件響應(yīng)一個定義良好的內(nèi)部編程接口,這些接口完全隱藏了設(shè)備的工作細節(jié)。用戶的操作通過一組標(biāo)準(zhǔn)化的調(diào)用執(zhí)行,而這些調(diào)用獨立于特定的驅(qū)動程序。將這些調(diào)用映射到作用于實際硬件的設(shè)備特有操作上,則是設(shè)備驅(qū)動程序的任務(wù)。
3.2.1 FIFO設(shè)備驅(qū)動
用戶空間驅(qū)動程序具有很多優(yōu)點,比如可以和整個C庫連接,可以使用通常的調(diào)試器調(diào)試驅(qū)動程序代碼,而不用費力地調(diào)試正在運行的內(nèi)核等。
該驅(qū)動程序是通過mmap函數(shù)將外設(shè)FIFO存儲器映射到用戶空間的一段內(nèi)存中,進而對其進行操作。映射一個設(shè)備意味著將用戶空間的一段內(nèi)存與設(shè)備內(nèi)存關(guān)聯(lián)起來。mmap函數(shù)定義如下:
#include
void*mmap(void*addr,size_t len,int prot,int flag,int filedes,off_t off);
此函數(shù)將在進程的虛擬地址空間(地址起始為addr,長度為len字節(jié))和與文件描述符fd關(guān)聯(lián)的文件(偏移量為off,長度為len字節(jié))之間建立映射。映射后系統(tǒng)對設(shè)備的讀寫操作就等同于對用戶內(nèi)存的讀寫。
程序中需要對S3C2440的存儲器控制寄存器進行配置,主要是BANKCON3、BANKCON5和BWSCON 3個寄存器,使BANK3和BANK5數(shù)據(jù)總線寬度為16位,WAIT等待信號無效,合理配置讀寫信號周期。這些同樣是通過存儲映射的方式實現(xiàn)。
3.2.2 DM9000網(wǎng)絡(luò)設(shè)備驅(qū)動
Linux 2.6.30.4內(nèi)核中的網(wǎng)卡驅(qū)動相當(dāng)完善,其中包含DM9000的驅(qū)動,所以隨著內(nèi)核的移植,該驅(qū)動就可以直接使用了。
3.3 Socket網(wǎng)絡(luò)應(yīng)用程序
Linux OS之所以得到廣泛應(yīng)用的一個主要原因是其卓越的網(wǎng)絡(luò)應(yīng)用。Socket是一種實現(xiàn)網(wǎng)絡(luò)不同主機進程間通信的一種機制。
為了數(shù)據(jù)的可靠傳輸,我們選擇基于面向連接的TCP通信協(xié)議進行應(yīng)用層的開發(fā),面向連接的Socket通信流程如圖7所示。
眾所周知,使用多進程的服務(wù)器模型有利于程序的健壯性。下位機作為服務(wù)器端,設(shè)置listen()偵聽客戶端的連接請求,針對每個Soc ket連接請求,利用fork()函數(shù)產(chǎn)生一個子進程處理到來的連接,在子進程中完成客戶指令的接收與判斷、數(shù)據(jù)的處理與發(fā)送等,并關(guān)閉服務(wù)器偵聽,在父進程中關(guān)閉客戶端的連接,采用多進程思想,解決多客戶端問題。上位機應(yīng)用程序為字符界面,將接收到的數(shù)據(jù)以文件的形式保持起來。
4 系統(tǒng)測試實驗
用SG1110數(shù)字合成信號發(fā)生器給采集板輸入一個頻率為4 kHz,峰峰值為8.6 V的正弦波信號,如圖8(a)所示,在單通道采集的模式下將采集的一段數(shù)據(jù)傳送給網(wǎng)絡(luò)上的客戶端,并將此數(shù)據(jù)用MATLAB程序畫圖如圖8(b)所示。
由上圖可以看出,還原后的圖像為一正弦波,每個周期的采樣點數(shù)約為160個,采樣頻率接近640 kHz,符合預(yù)期結(jié)果。
5 結(jié)論
嵌入式遠程數(shù)據(jù)采集系統(tǒng)是一種新的將分散信息集中處理的有效方法,對工業(yè)控制的數(shù)據(jù)集中處理、環(huán)境監(jiān)控等有非常重要的應(yīng)用價值。該系統(tǒng)的創(chuàng)新點是在用戶空間實現(xiàn)了FIFO設(shè)備驅(qū)動,最大的特點是實現(xiàn)了多達64通道的模擬數(shù)據(jù)采集,實現(xiàn)了多數(shù)據(jù)源采集的要求。系統(tǒng)的便攜化程度高,實用性和智能性強,潛在的經(jīng)濟效益巨大。
評論