国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

多路并行ADS1282實(shí)時(shí)地震數(shù)據(jù)采集內(nèi)核驅(qū)動(dòng)設(shè)計(jì)

2019-09-19 06:082
測(cè)控技術(shù) 2019年2期
關(guān)鍵詞:數(shù)據(jù)文件應(yīng)用層實(shí)時(shí)性

2

(1.西南科技大學(xué) 信息工程學(xué)院,四川 綿陽 621010; 2.四川理工學(xué)院 人工智能重點(diǎn)實(shí)驗(yàn)室,四川 自貢 643000;3.成都理工大學(xué) 地質(zhì)災(zāi)害防治與地質(zhì)環(huán)境保護(hù)國家重點(diǎn)實(shí)驗(yàn),四川 成都 610059)

隨著地震勘探技術(shù)向高密度空間采樣和多波多分量數(shù)據(jù)采集方向發(fā)展[1],多路并行地震數(shù)據(jù)采集成為地震勘探的關(guān)鍵技術(shù)環(huán)節(jié)。傳統(tǒng)的地震數(shù)據(jù)采集站一般是野外工作的嵌入式系統(tǒng),無關(guān)具體平臺(tái),其采集驅(qū)動(dòng)實(shí)現(xiàn)方式一般分為裸機(jī)驅(qū)動(dòng)[2-3]、帶操作系統(tǒng)的應(yīng)用層驅(qū)動(dòng)[4-5]和操作系統(tǒng)之下的內(nèi)核驅(qū)動(dòng)[6-7]。但是裸機(jī)驅(qū)動(dòng)需要操作大量底層寄存器,不適用于大量地震數(shù)據(jù)采集的采集與傳輸,而應(yīng)用層驅(qū)動(dòng)又需依靠頻繁的API系統(tǒng)調(diào)用接口實(shí)現(xiàn)硬件控制,且控制實(shí)時(shí)性差。若單道數(shù)據(jù)采集的系統(tǒng)調(diào)用量過大,實(shí)時(shí)性低,占用大量CPU、內(nèi)存等資源,就會(huì)嚴(yán)重限制地震采集單元向多通道、大數(shù)據(jù)量的方向發(fā)展。

針對(duì)上述問題,在Linux 3.0.35內(nèi)核下,以總線設(shè)備驅(qū)動(dòng)模型為指導(dǎo)[8],提出一種單路SPI驅(qū)動(dòng)多路ADC并行采集的驅(qū)動(dòng),并在驅(qū)動(dòng)實(shí)現(xiàn)過程中簡(jiǎn)化系統(tǒng)調(diào)用,減小內(nèi)核和用戶空間的切換頻率,然后通過歸類并分離實(shí)現(xiàn)實(shí)時(shí)操作與非實(shí)時(shí)操作的改進(jìn)方式,增加數(shù)據(jù)采集單元的工作效率,提高其數(shù)據(jù)可靠性。

1 多路并行地震采集單元結(jié)構(gòu)介紹

地震采集站主要是用于地震資料的采集、存儲(chǔ)與傳輸[9]。本地震數(shù)據(jù)采集單元主要由前級(jí)MEMS檢波器組、濾波電路、多路獨(dú)立ADC并行采集單元、多路復(fù)用接口和Cortex-A9處理器及其外圍存儲(chǔ)單元構(gòu)成。圖1為地震數(shù)據(jù)采集單元的總體結(jié)構(gòu)。針對(duì)目前存在的實(shí)時(shí)性不高以及系統(tǒng)調(diào)用頻繁問題,本文的ADC數(shù)據(jù)采集驅(qū)動(dòng)主要由Cortex-A9處子框中的用戶空間實(shí)現(xiàn)轉(zhuǎn)到內(nèi)核空間實(shí)現(xiàn)。

圖1 地震數(shù)據(jù)采集單元的系統(tǒng)總體結(jié)構(gòu)

2 ADS1282地震數(shù)據(jù)采集內(nèi)核驅(qū)動(dòng)設(shè)計(jì)

2.1 內(nèi)核驅(qū)動(dòng)程序設(shè)計(jì)

在Linux內(nèi)核中,利用Linux內(nèi)核的SPI子系統(tǒng)總線掛接外設(shè)ADS1282單元[10]后,還需:① 在板級(jí)支持文件中填寫SPI口參數(shù)信息(如時(shí)鐘、電平模式等)和ADS1282與Cortex-A9的GPIO連接信息等,配置相關(guān)的網(wǎng)絡(luò)服務(wù)、編譯內(nèi)核映像uImage和BootLoader,制作文件系統(tǒng)燒寫系統(tǒng)并重啟;② 設(shè)備注冊(cè),將ADS1282外設(shè)單元抽象成字符設(shè)備掛載到SPI總線上,填充設(shè)備描述結(jié)構(gòu),申請(qǐng)?jiān)O(shè)備號(hào)、內(nèi)存等資源,使用cdev_init實(shí)現(xiàn)設(shè)備名和描述結(jié)構(gòu)的互聯(lián);③ 驅(qū)動(dòng)注冊(cè),注冊(cè)與設(shè)備同名的驅(qū)動(dòng)名,填充驅(qū)動(dòng)描述結(jié)構(gòu),申請(qǐng)中斷、異步通知、乒乓緩存等資源。

ADS1282地震數(shù)據(jù)采集驅(qū)動(dòng)的內(nèi)核實(shí)現(xiàn)流程如圖2所示。首先,初始化ADS1282外設(shè),按照SPI協(xié)議發(fā)送命令配置RESET、PWDN、SYNC、DIN引腳,讀SampleRate(采樣率S)和SecondPerFile(每ns寫1個(gè)地震文件)參數(shù),準(zhǔn)備進(jìn)入連續(xù)采集狀態(tài);然后,Linux中斷頂半部等待DRDY信號(hào)中斷,底半部利用SPI單字節(jié)讀寫函數(shù)依次將數(shù)據(jù)寫入乒乓緩存;最后,數(shù)據(jù)采集完成,創(chuàng)建內(nèi)核線程,直接調(diào)用具體的VFS文件系統(tǒng)讀寫函數(shù)實(shí)現(xiàn)乒乓緩存到地震數(shù)據(jù)文件中的拷貝,并采用異步信號(hào)(軟中斷)通知應(yīng)用程序數(shù)據(jù)寫文件完成。

圖2 ADS1282內(nèi)核驅(qū)動(dòng)實(shí)現(xiàn)流程框圖

2.2 內(nèi)核驅(qū)動(dòng)對(duì)應(yīng)的應(yīng)用測(cè)試程序

在用戶空間測(cè)試驅(qū)動(dòng)和設(shè)備能否正常工作。首先打開ADS1282設(shè)備;其次讀取配置文件中SampleRate和SecondPerFile參數(shù),并通過ioctl函數(shù)實(shí)現(xiàn)應(yīng)用程序?qū)?nèi)核參數(shù)的控制;最后阻塞等待異步通知,添加文件頭地震數(shù)據(jù)文件(包括采集站IP、采集時(shí)間戳等信息)。此外,應(yīng)用程序還提供了“停止采集”命令控制接口,用于用戶終止ADC連續(xù)采集。驅(qū)動(dòng)測(cè)試應(yīng)用程序流程圖如圖3所示。

3 ADS1282地震數(shù)據(jù)采集內(nèi)核驅(qū)動(dòng)的實(shí)時(shí)性優(yōu)化技術(shù)

3.1 系統(tǒng)調(diào)用的簡(jiǎn)化過程

系統(tǒng)調(diào)用把應(yīng)用程序的請(qǐng)求傳給內(nèi)核,調(diào)用相應(yīng)的內(nèi)核函數(shù)完成所需的處理,再將處理結(jié)果返回[11]。本文主要在GPIO中斷控制和寫地震數(shù)據(jù)文件部分實(shí)現(xiàn)了系統(tǒng)調(diào)用的簡(jiǎn)化。

圖3 驅(qū)動(dòng)測(cè)試應(yīng)用程序流程圖

針對(duì)常規(guī)的嵌入式應(yīng)用層驅(qū)動(dòng)不能如裸機(jī)般直接對(duì)GPIO進(jìn)行方向操作或是電平置高置低的問題,采用內(nèi)核中斷頂半部與底半部相結(jié)合[12]的方式減少了大量的系統(tǒng)調(diào)用。應(yīng)用程序只能通過文件I/O方式將待用的GPIO引腳從內(nèi)核導(dǎo)出,產(chǎn)生/sys/class/gpio/gpioN目錄,對(duì)其中value文件進(jìn)行讀寫實(shí)現(xiàn)gpio中斷控制、電平控制等。而本驅(qū)動(dòng)的DRDY引腳與Cortex-A9直連,中斷頂半部通過直接讀取DRDY硬件脈沖來簡(jiǎn)化文件I/O的系統(tǒng)調(diào)用,且避免了由于select函數(shù)輪詢value文件值延遲而造成的數(shù)據(jù)采集不實(shí)時(shí)問題。

針對(duì)寫地震數(shù)據(jù)文件部分存在大量系統(tǒng)調(diào)用的問題,為了實(shí)現(xiàn)內(nèi)核空間到用戶空間的數(shù)據(jù)拷貝,常用的方式是內(nèi)核使用copy_to_user函數(shù)結(jié)合應(yīng)用層write系統(tǒng)調(diào)用,優(yōu)化方式主要由內(nèi)核和用戶空間采用mmap內(nèi)存映射方式實(shí)現(xiàn)數(shù)據(jù)傳輸,但要頻繁進(jìn)行內(nèi)存映射與解映射。因此,本驅(qū)動(dòng)直接在數(shù)據(jù)采集完成后,在內(nèi)核中調(diào)用具體的VFS(虛擬文件系統(tǒng))讀寫函數(shù)ext3_file_operations結(jié)構(gòu)的do_sync_write函數(shù)直接將緩存數(shù)據(jù)寫入文件,實(shí)現(xiàn)寫文件的同時(shí)省略了從write到VFS讀寫函數(shù)的調(diào)用過程。

3.2 實(shí)時(shí)與非實(shí)時(shí)操作的分離

根據(jù)實(shí)時(shí)性對(duì)地震數(shù)據(jù)采集驅(qū)動(dòng)實(shí)現(xiàn)的必要操作歸類,硬實(shí)時(shí)部分主要是對(duì)DRDY控制與多路數(shù)據(jù)的快速緩存,軟實(shí)時(shí)操作包括將數(shù)據(jù)從緩存存入文件,加入系統(tǒng)時(shí)間戳,并用異步通知信號(hào)告知應(yīng)用程序數(shù)據(jù)寫文件完成,非實(shí)時(shí)操作主要是給數(shù)據(jù)文件添加IP地址等文件頭。

本驅(qū)動(dòng)在中斷頂半部函數(shù)中實(shí)現(xiàn)了對(duì)DRDY的實(shí)時(shí)硬件監(jiān)控,在底半部實(shí)現(xiàn)多路數(shù)據(jù)的乒乓緩存。由于地震數(shù)據(jù)的高精度時(shí)間同步要求,在單個(gè)文件采集開始或者完成時(shí)均須加上當(dāng)前的系統(tǒng)時(shí)間,涉及到引起阻塞或睡眠的函數(shù),因此不能直接在頂半部中緩存數(shù)據(jù)。而添加文件頭等非實(shí)時(shí)操作便由應(yīng)用程序在監(jiān)測(cè)到異步信號(hào)后再對(duì)數(shù)據(jù)文件進(jìn)行完善。由于異步通知的引入避免了應(yīng)用程序一直輪詢?cè)O(shè)備狀態(tài),更提高了本驅(qū)動(dòng)的實(shí)時(shí)性。

4 ADS1282內(nèi)核驅(qū)動(dòng)測(cè)試及分析

以i.mx6q[13]Cortex-A9處理器為例,搭載3路32位A/D芯片ADS1282,在Linux 3.0.35內(nèi)核下進(jìn)行了采集驅(qū)動(dòng)的實(shí)現(xiàn)。采集單元硬件連線如圖4所示。測(cè)試設(shè)置SPI主時(shí)鐘為2 MHz,采樣率SampleRate為4000 Hz,SecondPerFile為5 s,每個(gè)地震數(shù)據(jù)文件由3×20000個(gè)采樣點(diǎn)組成。

圖4 地震數(shù)據(jù)采集單元硬件連接圖

4.1 ADS1282內(nèi)核驅(qū)動(dòng)功能測(cè)試

測(cè)試單道ADS1282的數(shù)據(jù)采集功能,并采用Matlab讀取采集的地震數(shù)據(jù)文件,繪圖顯示波形曲線如圖5所示。

① 將ADS1282差分輸入端直接短接,測(cè)試采集板等效輸入噪聲水平及其幅頻曲線,如圖5(a)和圖5(b)所示;

② 輸入100 Hz 1 mV的標(biāo)準(zhǔn)正弦波信號(hào),測(cè)試ADS1282采集效果及其幅頻曲線,如圖5(c)和圖5(d)所示;

③ 輸入人工敲擊地震波信號(hào),測(cè)試ADS1282采集信號(hào)及其幅頻曲線,如圖5(e)和圖5(f)所示。

4.2 單次寫地震數(shù)據(jù)文件耗時(shí)測(cè)試

對(duì)比文件IO方式實(shí)現(xiàn)的應(yīng)用層驅(qū)動(dòng)與本內(nèi)核驅(qū)動(dòng)對(duì)單次寫地震數(shù)據(jù)文件的耗時(shí)情況,可繪制圖6所示兩種驅(qū)動(dòng)完成單次采集的耗時(shí)對(duì)比圖。

圖5 ADS1282內(nèi)核驅(qū)動(dòng)功能測(cè)試

圖6 兩種驅(qū)動(dòng)單次采集操作的耗時(shí)對(duì)比

實(shí)驗(yàn)采用內(nèi)核驅(qū)動(dòng)和應(yīng)用層驅(qū)動(dòng)分別采集100個(gè)數(shù)據(jù)文件。由圖6分析可知,相對(duì)于傳統(tǒng)的應(yīng)用層驅(qū)動(dòng),內(nèi)核驅(qū)動(dòng)確實(shí)減少了系統(tǒng)調(diào)用,同時(shí)提高了數(shù)據(jù)傳輸速度,完成同樣的采集、數(shù)據(jù)轉(zhuǎn)換、存儲(chǔ)操作,內(nèi)核驅(qū)動(dòng)相較于應(yīng)用程序用時(shí)少了約90 ms,效率更高。根據(jù)4000 Hz的采樣率計(jì)算,DRDY信號(hào)間隔約250 μs,多耗時(shí)90 ms意味著寫文件的操作會(huì)影響ADC采集,甚至?xí)G失有效地震信號(hào)。

4.3 系統(tǒng)調(diào)用分析

采用統(tǒng)計(jì)分析的方式,對(duì)系統(tǒng)調(diào)用的減少量進(jìn)行分析。實(shí)驗(yàn)采用應(yīng)用層驅(qū)動(dòng)和內(nèi)核驅(qū)動(dòng)各采集20000個(gè)采樣點(diǎn)時(shí)各類系統(tǒng)調(diào)用次數(shù)的總量,如表1所示。

根據(jù)統(tǒng)計(jì)結(jié)果分析,內(nèi)核驅(qū)動(dòng)程序和測(cè)試程序部分的系統(tǒng)調(diào)用主要集中在測(cè)試程序中打開設(shè)備,ioctl設(shè)備參數(shù)以及系統(tǒng)時(shí)鐘獲取部分,因此明顯比ADS1282應(yīng)用層驅(qū)動(dòng)減少了各類系統(tǒng)調(diào)用的次數(shù)。而應(yīng)用層驅(qū)動(dòng)的系統(tǒng)調(diào)用量主要集中在查詢與GPIO相連的DRDY_value文件和寫地震數(shù)據(jù)文件部分,因此,通過內(nèi)核驅(qū)動(dòng)直接調(diào)用具體的VFS寫函數(shù)而非在用戶空間調(diào)用write系統(tǒng)調(diào)用的方式便可實(shí)現(xiàn)系統(tǒng)調(diào)用量的大大降低,從而提高采集的實(shí)時(shí)性。

4.4 多路擴(kuò)展性分析

根據(jù)ADS1282手冊(cè)可知,其支持的SPI時(shí)鐘為2~16 MHz,讀寫1 bit數(shù)據(jù)耗時(shí)t為62.5 ns~0.5 μs,而采樣率為S,即DRDY信號(hào)間隔為1/S。查閱ADG804手冊(cè)可知,其開關(guān)快速切換時(shí)間小于25 ns,若忽略采集時(shí)通道間切換時(shí)間,則其通道可擴(kuò)展的理論最大道數(shù)N=1/(S·32·t)。以SPI時(shí)鐘2 MHz,采樣率4 kHz為例,其通道可擴(kuò)展數(shù)N=1/(4000×32×0.5×10-6),約15道。實(shí)測(cè)一個(gè)DRDY間隔(250 μs)內(nèi),采集3路數(shù)據(jù)加上3路通道切換耗時(shí)60~65 μs,則該地震數(shù)據(jù)采集單元可擴(kuò)展成12路ADC同時(shí)采集。

表1 兩種驅(qū)動(dòng)系統(tǒng)調(diào)用量統(tǒng)計(jì)

5 結(jié)束語

本文設(shè)計(jì)了一種基于Linux的ADC地震數(shù)據(jù)采集內(nèi)核驅(qū)動(dòng),支持外部3路ADS1282并行地震數(shù)據(jù)采集。通過在內(nèi)核驅(qū)動(dòng)實(shí)現(xiàn)過程中簡(jiǎn)化系統(tǒng)調(diào)用過程,歸類實(shí)時(shí)性與非實(shí)時(shí)性操作,解決了地震數(shù)據(jù)采集過程中應(yīng)用層驅(qū)動(dòng)存在系統(tǒng)調(diào)用頻繁、硬件控制實(shí)時(shí)性不高以及數(shù)據(jù)采集效率低下等問題。測(cè)試部分,在i.mx6q平臺(tái)上、Linux 3.0.35內(nèi)核下,首先完成了ADS1282內(nèi)核驅(qū)動(dòng)的功能測(cè)試,并給出了采集驅(qū)動(dòng)的功能測(cè)試;其次給出了驅(qū)動(dòng)寫數(shù)據(jù)文件的耗時(shí)測(cè)試,根據(jù)耗時(shí)減少說明內(nèi)核驅(qū)動(dòng)的實(shí)時(shí)性有所提高;最后統(tǒng)計(jì)了應(yīng)用層驅(qū)動(dòng)和內(nèi)核驅(qū)動(dòng)的系統(tǒng)調(diào)用量,隨后給出了多路擴(kuò)展性分析??傊掘?qū)動(dòng)相較于應(yīng)用層驅(qū)動(dòng)所采集的數(shù)據(jù)效果好,引入的噪聲少,工作效率高,實(shí)時(shí)性更好,具備多路可擴(kuò)展的特點(diǎn)。本設(shè)計(jì)已經(jīng)應(yīng)用到復(fù)雜山地多波寬頻帶地震數(shù)據(jù)采集儀器中并取得良好的實(shí)際應(yīng)用效果。

猜你喜歡
數(shù)據(jù)文件應(yīng)用層實(shí)時(shí)性
基于表空間和數(shù)據(jù)文件探討MIS中數(shù)據(jù)庫架構(gòu)設(shè)計(jì)
數(shù)據(jù)文件安全管控技術(shù)的研究與實(shí)現(xiàn)
航空電子AFDX與AVB傳輸實(shí)時(shí)性抗干擾對(duì)比
基于分級(jí)保護(hù)的OA系統(tǒng)應(yīng)用層訪問控制研究
計(jì)算機(jī)控制系統(tǒng)實(shí)時(shí)性的提高策略
物聯(lián)網(wǎng)技術(shù)在信息機(jī)房制冷系統(tǒng)中的應(yīng)用
一種車載Profibus總線系統(tǒng)的實(shí)時(shí)性分析
Current advances in neurotrauma research: diagnosis, neuroprotection, and neurorepair
氣象數(shù)據(jù)文件異機(jī)備份程序淺析
凭祥市| 南丰县| 顺义区| 邓州市| 南京市| 榆中县| 新田县| 鄂温| 邛崃市| 高淳县| 宝鸡市| 凤阳县| 富源县| 建瓯市| 六盘水市| 房山区| 阿巴嘎旗| 昂仁县| 涿州市| 乌拉特前旗| 同江市| 休宁县| 石景山区| 金秀| 沙湾县| 兴安县| 盐亭县| 崇义县| 普兰店市| 朝阳区| 金川县| 获嘉县| 屏东市| 青神县| 普兰店市| 清新县| 象山县| 博兴县| 抚州市| 东明县| 曲阜市|