嵌入式網(wǎng)絡(luò)監(jiān)控系統(tǒng)的研究
掃描二維碼
隨時(shí)隨地手機(jī)看文章
摘要:無線數(shù)據(jù)傳輸現(xiàn)在廣泛地運(yùn)用在各種控制領(lǐng)域。該系統(tǒng)中采用由無線收發(fā)芯片nRF401配合外圍電路的射頻模塊來完成數(shù)據(jù)的傳輸;通過對(duì)Bootloader硬件的初始化后,實(shí)現(xiàn)將μClinux裁減并移植到S3C44BO中,最后用嵌入式處理器程序來實(shí)現(xiàn)對(duì)傳輸數(shù)據(jù)的處理和存儲(chǔ)、網(wǎng)絡(luò)通信、外部控制等任務(wù)。經(jīng)過測(cè)試通信距離為80m,無線通信最高速率可達(dá)到20Kb/s。
關(guān)鍵詞:μClinux;無線數(shù)據(jù)傳輸;Bootloader;無線通信
0 引言
無線數(shù)據(jù)傳輸現(xiàn)在廣泛地運(yùn)用在車輛監(jiān)控、遙控、小型無線網(wǎng)絡(luò)、小型無線數(shù)據(jù)終端等領(lǐng)域中,無線數(shù)據(jù)傳輸主要由數(shù)據(jù)終端機(jī)、主機(jī)和主控制機(jī)組成,主控制機(jī)與主機(jī)間用串行口通信,主機(jī)和數(shù)據(jù)終端機(jī)之間通過射頻模塊進(jìn)行通信。
傳感器采集信號(hào)后傳給數(shù)據(jù)終端機(jī),終端機(jī)通過射頻模塊進(jìn)行無線數(shù)據(jù)傳輸,主控制機(jī)與數(shù)據(jù)終端的通信轉(zhuǎn)化為主控制機(jī)與主機(jī)串口(UA RT)間的通信以及數(shù)據(jù)終端通過無線數(shù)傳模塊和主機(jī)之間的數(shù)據(jù)傳輸,在此基礎(chǔ)上形成了無線分布式傳感/控制網(wǎng)絡(luò)(Wireless Distribution ed Sensor/Control Networks,WDSCN)的處理機(jī)的軟硬件系統(tǒng)搭建。無線數(shù)據(jù)傳輸?shù)奶幚硐到y(tǒng)采用嵌入式系統(tǒng)輔以適當(dāng)無線數(shù)傳模塊來實(shí)現(xiàn)。系統(tǒng)中用射頻模塊來完成數(shù)據(jù)的傳輸,用嵌入式系統(tǒng)來實(shí)現(xiàn)對(duì)傳輸數(shù)據(jù)的處理和存儲(chǔ)、網(wǎng)絡(luò)通信、外部控制等任務(wù)。
1 射頻模塊的設(shè)計(jì)
射頻模塊的主要功能由無線收發(fā)芯片nRF401配合外圍電路完成,該模塊內(nèi)部結(jié)構(gòu)分為發(fā)射電路、接收電路、模式和低功耗控制邏輯電路以及串行接口幾個(gè)部分組成。
發(fā)射電路有射頻功率放大器(PA)、鎖相環(huán)(PLL)、壓控振蕩器(VCO)、頻率合成器等。基準(zhǔn)振蕩器采用外接晶體振蕩器產(chǎn)生電路所需的基準(zhǔn)頻率,振蕩電路采用鎖相環(huán)方式,由在DDS基礎(chǔ)上的頻率合成器、外接的無源回路濾波器和壓控振蕩器組成,壓控振蕩器由片內(nèi)的振蕩電路和外接的LC諧振回路組成,要發(fā)射的數(shù)據(jù)通過DIN端輸入。
接收電路由低噪聲放大器(LNA)、混頻器、中頻放大器、GFSK解調(diào)器、濾波器等電路組成,中頻放大器的輸出信號(hào)經(jīng)過中頻濾波器后送入GFSK解調(diào)器解調(diào),解調(diào)后的數(shù)字信號(hào)在DOUT端輸出。
芯片內(nèi)包含有發(fā)射功率放大器、低噪聲接收放大器、晶體振蕩器、鎖相環(huán)、壓控振蕩器、混頻器等電路,工作頻率為ISM頻段433 MHz,采用FSK調(diào)制解調(diào)、晶體振蕩和PLL頻率合成技術(shù),接收靈敏度為-105 dBm,發(fā)射功率為10 dBm,待機(jī)狀態(tài)電流消耗僅10μA。在接收模式中,射頻輸入信號(hào)被低噪聲放大器放大,經(jīng)由混頻器變換,在送入解調(diào)器之前被放大和濾波,解調(diào)后的數(shù)字信號(hào)在DOUT端輸出。在發(fā)射模式中,壓控振蕩器的輸出信號(hào)是直接送入到功率放大器,DIN端輸入的數(shù)字信號(hào)被頻移鍵控后饋送到功率放大器輸出。射頻模塊的電路如圖1所示。
2 嵌入式系統(tǒng)
一般而言,嵌入式系統(tǒng)的構(gòu)架可以分為4個(gè)部分:處理器、存儲(chǔ)器、輸入/輸出(I/O)和軟件。嵌入式系統(tǒng)是軟件和硬件的綜合體,它是以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟、硬件皆可以裁剪,從而能夠適應(yīng)于工業(yè)和服務(wù)領(lǐng)域?qū)嶋H應(yīng)用中。
由于μClinux在設(shè)計(jì)時(shí)就已經(jīng)充分考慮了可移植性,所以將μClinux移植到S3C44B0相對(duì)來說是比較容易的。但要使μClinux正常運(yùn)行,處理器必須滿足以下要求:
(1)處理器的C編譯器能產(chǎn)生可重入代碼。
(2)用C語言就可以打開和關(guān)閉中斷。
(3)處理器支持中斷,并且能產(chǎn)生定時(shí)中斷(通常在10~100 Hz之間)。
(4)處理器支持能夠容納一定量數(shù)據(jù)(可能是幾千字節(jié))的硬件堆棧。
2.1 Bootloader的工作
Bootloader就是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段程序,通過這段程序可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。因此,正確建立μClinux的移植的前提條件是具備一個(gè)與μClinux配套、易于使用的Bootloader。
硬件初始化。系統(tǒng)上電或復(fù)位后,程序從位于地址0x0的Reset Exception Vector處開始執(zhí)行,因此需要在這里放置Bootloader的第一條指令:b ResetHandler,跳轉(zhuǎn)到標(biāo)號(hào)為ResetHandler處進(jìn)行第一階段的硬件初始化,主要內(nèi)容為:關(guān)Watchdog Timer,關(guān)中斷,初始化PLL和時(shí)鐘,初始化存儲(chǔ)器控制器。比較重要的是PLL的輸出頻率要計(jì)算正確,ARMSYS中把它設(shè)置為64 MHz;這實(shí)際上就是處理器的工作主頻,這個(gè)時(shí)間參數(shù)在第二階段計(jì)算SDRAM的刷新計(jì)數(shù)值和UART的波特率等參數(shù)時(shí)還要用到。
建立二級(jí)異常中斷矢量表。異常中斷矢量表(Exception Vector Table)是Bootloader與μClinux內(nèi)核發(fā)生聯(lián)系關(guān)鍵的地方之一。即使μClinux內(nèi)核已經(jīng)得到處理器的控制權(quán)運(yùn)行,一旦發(fā)生中斷,處理器還是會(huì)自動(dòng)跳轉(zhuǎn)到從0x0地址開始的第一級(jí)異常中斷矢量表中的某個(gè)表項(xiàng)(依據(jù)于中斷類型)處讀取指令運(yùn)行。在編寫B(tài)ootloader時(shí),地址0x0處的一級(jí)異常中斷矢量表只需簡單地包含向二級(jí)異常中斷矢量表的跳轉(zhuǎn)指令就可以。這樣,就能夠正確地將發(fā)生的事件交給μClinux的中斷處理程序來處理。對(duì)于μClinux內(nèi)核,它在RAM空間中基地址為0xC000000處建立了自己的二級(jí)異常中斷矢量表。
如果在Bootloader執(zhí)行的全過程中都不必響應(yīng)中斷,那么上面的設(shè)置已能滿足要求。在ARMSYS上提供了USB下載器,需要用到中斷,Boot loader必須在同樣的地址(0xC000000)處配置自己的二級(jí)異常中斷矢量表,以便同μClinux兼容。這張表事先存放在FLASH MEMORY里,引導(dǎo)過程中由Bootloader將其復(fù)制到RAM地址0x0C000000。
2.2 源代碼裁剪與移植
將μClinuX-dist-20040408.tar.gz拷貝到/home/下(或者其他目錄都可以),運(yùn)行解壓命令:tar xvzfμClinux-ARMSYS-20040801. tar.gz,解壓結(jié)束后會(huì)在/home/下生成μClinux-dist目錄。[!--empirenews.page--]
配置與編譯。安裝編譯環(huán)境,到以下地址下載arm-elf工具鏈:http://www.uclinux.org/pub/μClinux/m68k-elf-tools/arm-elf-tools-20030314.sh。將arm-elf-tools-20030314.sh拷貝到根目錄,運(yùn)行安裝:
sh arm-elf-tools-20030314.sh
然后開始配置μClinux的內(nèi)核和用戶選項(xiàng),打開終端。
# cd/home/uClinux-dist
# make menuconfig
進(jìn)入μClinux配置(μClinux V3.1.0 Configuration),選中“Kernel/Library/Defaults Selectiona”敲空格進(jìn)入。其中有兩個(gè)選項(xiàng):定制內(nèi)核設(shè)置和定制用戶選項(xiàng)設(shè)置:
[*]Customize Kernel Settings
[]Customize Vendor/User Settings
選中定制內(nèi)核設(shè)置選項(xiàng),按下ESC鍵退出,在詢問是否保存時(shí),選擇Yes并回車。終端將首先進(jìn)入內(nèi)核配置選單。在配置μClinux內(nèi)核時(shí),就可以通過對(duì)這些選項(xiàng)的選擇和取消選擇來設(shè)定內(nèi)核所具有的功能項(xiàng),這也是裁減μClinux內(nèi)核的基本方法。每個(gè)選項(xiàng)都對(duì)應(yīng)著一個(gè)宏定義,make menuconfig執(zhí)行結(jié)束后,自動(dòng)將配置結(jié)果保存為.config文件,將前一次的配置結(jié)果備份為.config.old文件。
交叉編譯。按下面的步驟對(duì)μClinux源碼包進(jìn)行編譯:
# make dep
# make clean(非必要)
# make lib_only
# make user_only
# make romfs
# make image
# make
初次移植時(shí),在make lib_only到make這5步編譯過程中很可能產(chǎn)生錯(cuò)誤,無法繼續(xù)下去,如果產(chǎn)生了錯(cuò)誤,可以嘗試根據(jù)報(bào)告的錯(cuò)誤內(nèi)容修改一下源程序,交叉編譯成功后,在μClinux-dist/目錄下產(chǎn)生images目錄,其中包含的3個(gè)文件:image.ram,image.rom和romfs.img就是我們可以使用的二進(jìn)制文件,下載或燒錄這些二進(jìn)制文件,并啟動(dòng)運(yùn)行μClinux。出現(xiàn)正確提示信息后,可以嘗試從鍵盤輸入ls,ping命令,來查看系統(tǒng)的運(yùn)行情況,編寫簡單的應(yīng)用程序,看是否能夠正確運(yùn)行。
2.3 嵌入式處理器程序
應(yīng)用程序的部分具體代碼如下:該部分完成了嵌入式控制器硬件初始化、操作系統(tǒng)初始化、GUI以及用戶界面、時(shí)鐘的初始化,創(chuàng)建了一個(gè)主任務(wù),啟動(dòng)了多任務(wù)調(diào)度。
3 結(jié)語
本文通過對(duì)無線傳感器/控制網(wǎng)絡(luò)技術(shù)的研究,提出了一種基于射頻通信技術(shù)的無線數(shù)據(jù)采集和控制方案,利用所開發(fā)的無線通信模塊構(gòu)建了一個(gè)無線分布式傳感/控制網(wǎng)絡(luò),實(shí)現(xiàn)了傳感器數(shù)據(jù)的實(shí)時(shí)采集。開發(fā)了一種短距離無線數(shù)據(jù)傳輸平臺(tái)。目前測(cè)試通訊距離為80m,無線通信最高速率可達(dá)到20Kb/s。