




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、短距離無線數(shù)據(jù)傳輸系統(tǒng)摘要:本文介紹一種基于WiFi模塊和Real6410開發(fā)板的短距離無線數(shù)據(jù)傳輸系統(tǒng),利用USB接口,完成了無線數(shù)據(jù)傳輸系統(tǒng)的數(shù)據(jù)發(fā)射和接收過程.該系統(tǒng)數(shù)據(jù)傳輸速度快、可靠性高、可擴(kuò)展性強(qiáng),可廣泛應(yīng)用于各種短距離無線數(shù)據(jù)通信中。關(guān)鍵字:無線數(shù)據(jù)傳輸、短距離、終端、虛擬機(jī)一:前言現(xiàn)代通信技術(shù)的迅速發(fā)展使得許多應(yīng)用領(lǐng)域都采用無線通信方式進(jìn)行數(shù)據(jù)傳輸。隨著網(wǎng)絡(luò)及通信技術(shù)的飛速發(fā)展,人們對(duì)無線通信的需求越來越大,人們?cè)谙硎芊涓C移動(dòng)通信系統(tǒng)帶來的便捷的同時(shí),對(duì)短距離的無線通信又提出了新的需求,這釋短距離的無線通信主要用于家庭、辦公室、商場(chǎng)等室內(nèi)場(chǎng)所,有時(shí)也用于室外環(huán)境。這種技術(shù)的應(yīng)用
2、大大改善了人們的生活與工作質(zhì)量,對(duì)現(xiàn)有的無線長(zhǎng)距離通信技術(shù)是一個(gè)很好的補(bǔ)充。同時(shí)又由于無線頻率資源的日漸珍貴,電子產(chǎn)品市場(chǎng)需求的激增,這其中的無線短距離通信技術(shù)更是受到了各國工業(yè)界和研究機(jī)構(gòu)的廣泛關(guān)注。短距離無線數(shù)據(jù)傳輸最流行的標(biāo)準(zhǔn)有藍(lán)牙(Bluetooth),8021lbfW一Fi)幫IrDA,這些協(xié)議和標(biāo)準(zhǔn)各有優(yōu)劣,各有自己擅長(zhǎng)的應(yīng)用領(lǐng)域,有的適合于辦公環(huán)境,有的適合于個(gè)人應(yīng)用,有的則更適合家庭用戶。 本文采用的是REAL6410開發(fā)板自帶的Wifi模塊通過路由器傳輸數(shù)據(jù),通過在Linux下編寫兩個(gè)socket的程序:server和client進(jìn)行通信。網(wǎng)絡(luò)的Socket數(shù)據(jù)傳輸是一種特殊
3、的I/O口,socket也是一種文件描述符socket也有一個(gè)類似于打開文件的函數(shù):socket(),調(diào)用socket(),該函數(shù)返回一個(gè)整型的socket的描述符,隨后的連接建立、數(shù)據(jù)傳輸?shù)炔僮饕捕际峭ㄟ^該socket實(shí)現(xiàn)。通信時(shí),服務(wù)端進(jìn)行監(jiān)聽,在收到客戶端的連接后,發(fā)送數(shù)據(jù)給客戶端;客戶端在接受到數(shù)據(jù)后打印出來,然后關(guān)閉。在本次綜合實(shí)踐中,我們只能實(shí)現(xiàn)本機(jī)通信,采用了回環(huán)地址。二:硬件、軟件及操作系統(tǒng)的介紹2.1 Real6410開發(fā)板Real6410開發(fā)板是華天科技推出的高性能、高集成、廣擴(kuò)展的一體化開發(fā)板。Real6410由底板和核心板兩部分組成。其中核心板命名為E6Cor
4、e。該板具有配置高端、外設(shè)接口多、性能穩(wěn)定、抗干擾能力強(qiáng)等特點(diǎn)。此外,Real6410開發(fā)板配有256M超大內(nèi)存,徹底解決了以往開發(fā)板內(nèi)存不足的問題。也正是如此,Real6410開發(fā)板成功地將開發(fā)和學(xué)習(xí)集合于一體,因而備受企業(yè)用戶和高校推崇,是當(dāng)今國內(nèi)外性價(jià)比最好的ARM11開發(fā)系統(tǒng)。2.2 S3C6410芯片S3C6410 是 SAMSUNG公司基于ARM1176的 16/32 位的高性能低功耗的 RSIC 通用微處理器,適用于手持、移動(dòng)等終端設(shè)備。S3C6410 是一款低功率、高性價(jià)比、高性能的用于移動(dòng)電話和通用處理RSIC 處理器。為 2.5G 和 3G 通信服務(wù)提供了優(yōu)化的硬件性能,采
5、用 64/32bit 的內(nèi)部總線架構(gòu),融合了AXI、AHB、APB 總線。還有很多強(qiáng)大的硬件加速器,包括運(yùn)動(dòng)視頻處理、音頻處理、2D加速、顯示處理和縮放。一個(gè)集成的MFC(Multi-Format video Codec)支持 MPEG4/H.263/H.264 編解碼和 VC1 的解碼,這個(gè)硬件編解碼器支持實(shí)時(shí)的視頻會(huì)議以及 NTSC和 PAL 制式的 TV 輸出。此外還內(nèi)置一個(gè)采用最先進(jìn)技術(shù)的 3D 加速器,支持 OpenGL ES1.1/ 2.0 和 D3DM API 能實(shí)現(xiàn) 4M triangles/s 的 3D 加速。S3C6410 包括優(yōu)化的外部存儲(chǔ)器接口,該接口能滿足在高端通信服
6、務(wù)中的數(shù)據(jù)帶寬要求。接口分為兩路,DRAM 和 Flash/ROM/DRAM 端口。DRAM 端口可以通過配置來支持Mobile DDR、DDR、Mobile SDRAM、SDRAM。Flash/ROM/DRAM 端口支持 NOR-Flash,NAND-Flash,OneNAND,CF,ROM 等類型的外部存儲(chǔ)器和任意的 Mobile DDR、DDR、Mobile SDRAM、SDRAM 存儲(chǔ)器。2.2.1時(shí)鐘信號(hào)的產(chǎn)生6410需要四路時(shí)鐘信號(hào),分別如下1、主時(shí)鐘,12MHZ 2、Video時(shí)鐘信號(hào)27HZ,用于顯示模塊,如MFC LCD TV模塊提供時(shí)鐘信號(hào)3、USB時(shí)鐘,48MHZ,用于U
7、SB SD卡SDIO提供時(shí)鐘信號(hào)4、RTC時(shí)鐘,32.768KHZ,用于實(shí)時(shí)時(shí)鐘模塊提供時(shí)鐘信號(hào)其是1 2 3可以選擇用有源晶振還是無源晶振,除主時(shí)鐘外,2和3都需要做CPU寄存器的配置才能產(chǎn)生相應(yīng)的時(shí)鐘,即選擇無源還是有源的。而主時(shí)鐘用的是有源的還是無源的,由OM0引腳來配置,當(dāng)OM0拉高時(shí),使用無源晶振,當(dāng)置低時(shí),使用有源晶振,當(dāng)使用無源晶振時(shí),XEXTCLK引腳需要拉高。綜上所要求,設(shè)計(jì)如下所示,由于成本考慮,采用無源晶振2.2.2 Wifi模塊模塊要求3.3V供電,我們采用LDO LM1117-3.3為WIFI模塊供電。SD通道0接至WIFI模塊的SD接口,圖中LED2為連接指示燈,當(dāng)
8、連接時(shí),LED2會(huì)閃爍,連接成功后,LED2燈常亮。由于模塊是默認(rèn)是SD卡接口連接,所以接口選擇可以不接。模塊的RESET引腳可以接至CPU的復(fù)位引腳,也可以不接。PDn引腳是上電使能引腳,模塊默認(rèn)拉高,低電平關(guān)閉模塊供電。SD0通道0也接在iNAND上,兩者不能同時(shí)使用SD0,所以當(dāng)使用iNAND時(shí),不能使用WIFI模塊,反之亦然。2.3 NRF24L01無線收發(fā)模塊2.3.1簡(jiǎn)介nRF24L01是一款新型單片射頻收發(fā)器件,工作于2.4 GHz2.5 GHz ISM頻段。內(nèi)置頻率合成器、功率放大器、晶體振蕩器、調(diào)制器等功能模塊,并融合了增強(qiáng)型ShockBurst技術(shù),其中輸出功率和通信頻道可
9、通過程序進(jìn)行配置。nRF24L01功耗低,在以-6 dBm的功率發(fā)射時(shí),工作電流也只有9 mA;接收時(shí),工作電流只有12.3 mA,多種低功率工作模式(掉電模式和空閑模式)使節(jié)能設(shè)計(jì)更方便。2.3.2工作原理發(fā)射數(shù)據(jù)時(shí),首先將nRF24L01配置為發(fā)射模式:接著把接收節(jié)點(diǎn)地址TX_ADDR和有效數(shù)據(jù)TX_PLD按照時(shí)序由SPI口寫入nRF24L01緩存區(qū),TX_PLD必須在CSN為低時(shí)連續(xù)寫入,而TX_ADDR在發(fā)射時(shí)寫入一次即可,然后CE置為高電平并保持至少10s,延遲130s后發(fā)射數(shù)據(jù);若自動(dòng)應(yīng)答開啟,那么nRF24L01在發(fā)射數(shù)據(jù)后立即進(jìn)入接收模式,接收應(yīng)答信號(hào)(自動(dòng)應(yīng)答接收地址應(yīng)該與接
10、收節(jié)點(diǎn)地址TX_ADDR一致)。如果收到應(yīng)答,則認(rèn)為此次通信成功,TX_DS置高,同時(shí)TX_PLD從TX FIFO中清除;若未收到應(yīng)答,則自動(dòng)重新發(fā)射該數(shù)據(jù)(自動(dòng)重發(fā)已開啟),若重發(fā)次數(shù)(ARC)達(dá)到上限,MAX_RT置高,TX FIFO中數(shù)據(jù)保留以便在次重發(fā);MAX_RT或TX_DS置高時(shí),使IRQ變低,產(chǎn)生中斷,通知MCU。最后發(fā)射成功時(shí),若CE為低則nRF24L01進(jìn)入空閑模式1;若發(fā)送堆棧中有數(shù)據(jù)且CE為高,則進(jìn)入下一次發(fā)射;若發(fā)送堆棧中無數(shù)據(jù)且CE為高,則進(jìn)入空閑模式2。 接收數(shù)據(jù)時(shí),首先將nRF24L01配置為接收模式,接著延遲130s進(jìn)入接收狀態(tài)等待數(shù)據(jù)的到來。當(dāng)接收方檢測(cè)到有效
11、的地址和CRC時(shí),就將數(shù)據(jù)包存儲(chǔ)在RX FIFO中,同時(shí)中斷標(biāo)志位RX_DR置高,IRQ變低,產(chǎn)生中斷,通知MCU去取數(shù)據(jù)。若此時(shí)自動(dòng)應(yīng)答開啟,接收方則同時(shí)進(jìn)入發(fā)射狀態(tài)回傳應(yīng)答信號(hào)。最后接收成功時(shí),若CE變低,則nRF24L01進(jìn)入空閑模式1。在寫寄存器之前一定要進(jìn)入待機(jī)模式或掉電模式,如下圖spi操作機(jī)時(shí)序圖 圖2.5 SPI 寫操作2.4 Linux系統(tǒng) Linux是一套免費(fèi)使用和自由傳播的類Unix操作系統(tǒng),是一個(gè)基于POSIX和UNIX的多用戶、多任務(wù)、支持多線程和多CPU的操作系統(tǒng)。它能運(yùn)行主要的UNIX工具軟件、應(yīng)用程序和網(wǎng)絡(luò)協(xié)議。它支持32位和64位硬件。Linux繼承
12、了Unix以網(wǎng)絡(luò)為核心的設(shè)計(jì)思想,是一個(gè)性能穩(wěn)定的多用戶網(wǎng)絡(luò)操作系統(tǒng)。它主要用于基于Intel x86系列CPU的計(jì)算機(jī)上。這個(gè)系統(tǒng)是由全世界各地的成千上萬的程序員設(shè)計(jì)和實(shí)現(xiàn)的。其目的是建立不受任何商品化軟件的版權(quán)制約的、全世界都能自由使用的Unix兼容產(chǎn)品。 Linux以它的高效性和靈活性著稱,Linux模塊化的設(shè)計(jì)結(jié)構(gòu),使得它既能在價(jià)格昂貴的工作站上運(yùn)行,也能夠在廉價(jià)的PC機(jī)上實(shí)現(xiàn)全部的Unix特性,具有多任務(wù)、多用戶的能力。Linux是在GNU公共許可權(quán)限下免費(fèi)獲得的,是一個(gè)符合POSIX標(biāo)準(zhǔn)的操作系統(tǒng)。Linux操作系統(tǒng)軟件包不僅包括完整的Linux操作系統(tǒng),而且還包括了文本
13、編輯器、高級(jí)語言編譯器等應(yīng)用軟件。它還包括帶有多個(gè)窗口管理器的X-Windows圖形用戶界面,如同我們使用Windows NT一樣,允許我們使用窗口、圖標(biāo)和菜單對(duì)系統(tǒng)進(jìn)行操作。2.5 嵌入式系統(tǒng) 嵌入式系統(tǒng)是一種以應(yīng)用為中心、以計(jì)算機(jī)技術(shù)為基礎(chǔ)、軟件硬件可裁剪、適應(yīng)應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。它主要由嵌入式微處理器、外圍硬件設(shè)備、嵌入式操作系統(tǒng)和特定的應(yīng)用程序四部分組成。嵌入式系統(tǒng)具有系統(tǒng)內(nèi)核小、專用性強(qiáng)、系統(tǒng)精簡(jiǎn)、實(shí)時(shí)性和可靠性高等特點(diǎn),因而受到了人們的一致好評(píng)。2.6 VMware Workstation VMw
14、are Workstation 是VMware公司提供的一款功能強(qiáng)大的桌面虛擬計(jì)算機(jī)軟件,此軟件可以提供虛擬機(jī)功能,使計(jì)算機(jī)可以同時(shí)運(yùn)行多個(gè)不同操作系統(tǒng)。用戶可在單一的桌面上同時(shí)運(yùn)行不同的操作系統(tǒng),和進(jìn)行開發(fā)、測(cè)試 、部署新的應(yīng)用程序的最佳解決方案。VMware Workstation 可在一部實(shí)體機(jī)器上模擬完整的網(wǎng)絡(luò)環(huán)境,以及可便于攜帶的虛擬機(jī)器,具有極強(qiáng)的靈活性和實(shí)用性,是當(dāng)今IT領(lǐng)域開發(fā)人員的必備工具之一。2.7 Ubuntu Ubuntu 是一個(gè)由全球化的專業(yè)開發(fā)團(tuán)隊(duì)建造的操作系統(tǒng)它包含了:瀏覽器、Office套件、
15、多媒體程序、即時(shí)消息等應(yīng)用程序。由于Ubuntu 項(xiàng)目完全遵從開源軟件開發(fā)的原則,并且鼓勵(lì)人們使用、完善并傳播開源軟件,因而Ubuntu操作系統(tǒng)有著十分廣闊的應(yīng)用領(lǐng)域。三:設(shè)計(jì)方案3.1設(shè)計(jì)思路 本次用到的數(shù)字采集系統(tǒng),是用S3C6410的ADC模塊定時(shí)地從AIN引腳采集電壓信號(hào),經(jīng)模/數(shù) 轉(zhuǎn) 換 器ADC采樣、量化、編碼后,成為數(shù)字信號(hào),存入數(shù)據(jù)存儲(chǔ)器,或通過無線方式將數(shù)據(jù)發(fā)送給接收端進(jìn)行處理。無線數(shù)據(jù)傳輸系統(tǒng)就是這樣一套利用無線手段,將采集的數(shù)據(jù)由測(cè)量站發(fā)送出去。在本系統(tǒng)中采用無線傳輸模塊NRF24L01。短距離無線數(shù)據(jù)傳輸系統(tǒng)分以下幾個(gè)模塊1、定時(shí)模塊:使用硬件RTC作為定時(shí)裝
16、置;2、電壓采集模塊:使用實(shí)驗(yàn)板上S3C6410的ADC采集電壓信號(hào);3、數(shù)據(jù)接收、發(fā)送模塊:nRF2401數(shù)傳模塊、wifi模塊作為無線傳輸模塊;4、存儲(chǔ)模塊:將采集到的電壓信號(hào)存儲(chǔ)到TXT文本中;5、顯示模塊:無圖形界面;3.2數(shù)據(jù)采集程序流程圖:四:軟件配置過程4.1 Tftp服務(wù)器的建立sudo apt-get install tftp tftpd /安裝tftp/目錄下建一個(gè) tftpboot, 把屬性改成 777cd / /轉(zhuǎn)至根目錄sudo mkdir tftpboot /新建tftp文件夾sudo chmod 777 tftpboot /改名在建立過程執(zhí)行到該步驟時(shí),由于在et
17、c中缺少inetd.conf文件,需要先執(zhí)行sudo apt-get install openbsd-inetd /下載安裝軟件包的簡(jiǎn)單命令行接口sudo apt-get install telnetdsudo gedit /etc/inetd.conf 先建立這樣的一個(gè)文件sudo vi /etc/inetd.conf將tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /tftpboot添加到inetd.conf中重啟服務(wù)器sudo /etc/init.d/openbsd-inetd restartsudo i
18、n.tftpd -l /tftpboot測(cè)試tftp服務(wù)器在/tftpboot 文件夾下新建立一個(gè)文件cd /tftpboottouch test進(jìn)入另外一個(gè)文件夾tftp> tftp get test服務(wù)器建立完成4.2 nfs配置過程sudo apt-get install nfs-kernel-server nfs-common rpcbind /安裝nfs客戶端sudo service rpcbind start /啟動(dòng)客戶端showmount e /顯示nfs客戶端輸出清單配置 /etc/exports將/nfsboot *(rw,sync,no_root_
19、squash)添加到exportssudo exportfs r /更新exports文件sudo /etc/init.d/nfs-kernel-server restart /重啟客戶端sudo mount -t nfs 31:/nfsboot / /mnt /客戶端掛載df /顯示掛載情況sudo umount /mnt /取消掛載4.3交叉編譯環(huán)境的安裝與配置mv /home/liyuhuan/桌面/arm-2008q3.tar.bz2 /root/ /解壓包移至root下tar -xjvf arm-2008q3.tar.bz2 (或右鍵單擊提取文件) /解壓文件
20、gedit /etc/bash.bashrc /打開待編譯文本文件source /etc/bash.bashrc /啟動(dòng)待編譯文件arm-linux-gcc v /完成交叉編譯在打開編譯文本中加入PATH=/root/ arm-2008q3/bin:$PATH export PATH,保存完成即可4.4mkcramfs的安裝將root_mkfs.tar.bz2移動(dòng)到/usr/local/bin下先將文件移動(dòng)到桌面,再往相應(yīng)文件夾里移命令如下:Mv /home/liyuhuan/桌面/ root_mkfs.tar.bz2 /usr/local/bin/Mkcramfs配置命令如下:mv /hom
21、e/liyuhuan/桌面/root_mkfs.tar.bz2 /usr/local/bin/ /移動(dòng)文件apt-get install cramfsprogs /文件安裝mkcramfs /文件執(zhí)行既可以完成mkcramfs的安裝4.5Uboot配置與編譯Mv home/tmp/ VMwareDnD /s3c-u-boot-1.1.6-Real6410.tar.bz2 /home/liyuhuantar jxvf s3c-u-boot-1.1.6-Real6410.tar.bz2home/liyuhuan/s3c-u-boot-1.1.6-Real6410./make_nand_image
22、/在s3c-u-boot-1.1.6-Real6410 目錄下產(chǎn)生u-boot.bin,home/liyuhuan/s3c-u-boot-1.1.6-Real6410 ./make_mmc_image /在s3c-u-boot-1.1.6-Real6410 目錄下產(chǎn)生u-boot_mmc.binuboot配置編譯完成4.6uboot 燒寫燒寫 SD 啟動(dòng)uboota:打開tools/IROM_Fusing_Tool 工具。b:選擇SD卡所在盤符以及要燒錄的文件u-boot_mmc.bin。c:點(diǎn)擊START,進(jìn)行燒寫。d:開啟tools/DWN應(yīng)用程序,用USB轉(zhuǎn)串口線連接計(jì)算機(jī)和實(shí)驗(yàn)箱并在W
23、indows上查找驅(qū)動(dòng)的鏈接口標(biāo)號(hào)。e:對(duì)DWN進(jìn)行配置后點(diǎn)擊connect進(jìn)行連接。f:格式化 NandFlash選擇選項(xiàng) f(格式化flash)g:燒寫 NandFlash 啟動(dòng)的 uboot選擇選項(xiàng) u(下載固化在Nandflash中的u_boot.bin鏡像)à 添加USB驅(qū)動(dòng)(/tools/USB驅(qū)動(dòng)/secusb2.sys))à加載u-boot.bin文件(完成燒寫 NandFlash 啟動(dòng)的 uboot工作)h:燒寫 Linux 內(nèi)核選擇選項(xiàng) k(下載Linux Kernel文件zImage)à加載linuxlinux-imagezImage(完成L
24、inux核的燒寫,下載root_mkfs.cramfs鏡像)àqi:燒寫 cramfs 根文件系統(tǒng)選擇選項(xiàng)c à加載linuxlinux-imageroot_mkfs.cramfs(完成cramfs 根文件系統(tǒng))j:燒寫 ubifs 根文件系統(tǒng)復(fù)制linuxlinux-imageqtopia.tar.gz到SD卡 à 選擇選項(xiàng)q à 進(jìn)行屏幕校準(zhǔn)uboot 配置與編譯4.7Linux內(nèi)核的編譯(1)zImage鏡像文件的生成cd /home/liyuhuan/linux/s3c-linux--Real6410 /解壓cp Real6410
25、-3c.config .configapt-get install lie libncurses5-dev / 加載配置庫文件make menuconfig /生成配置菜單make zImage /生成鏡像文件(2)kconfig文件的配置在kconfig文件中加入命令將config S3C_AESbool "S3C AES support"depends on CPU_S3C6410default nhelp Say Y here if you want to use the S3C AES復(fù)制在endmenu上面修改如下:config LEDtristate "
26、;Real6410 leds support"depends on CPU_S3C6410default mhelp Say Y here if you want to use the S3C AESMakefile文件配置(3)在Makefile文件中obj-y +=led.oobj-$(CONFIG_LEGACY_PTYS)+= pty.o修改如下:obj-$(CONFIG_LED)+=led.oobj-$(CONFIG_LEGACY_PTYS)+= pty.o(4)動(dòng)態(tài)鏈接配置real6410-3c文件中查找char如下文件CONFIG_MTD_CHAR=yCONFIG_MTD
27、_BLKDEVS=y修改如下:CONFIG_LED=m /配置后可生成.KO文件CONFIG_MTD_CHAR=yCONFIG_MTD_BLKDEVS=y(5)生成模塊在終端執(zhí)行Make modules指令4.8 ADC模塊驅(qū)動(dòng)配置(1)將“adc.c”與“adc.h”放在“drivers à char”下(2)在“char”下的Makefile文件開頭添加如下指令:FONTMAPFILE = cp437.uniobj-y += mem.o random.o tty_io.o n_tty.o tty_ioctl.o tty_ldisc.o tty_buffer.o tty_port.
28、oobj-$(CONFIG_S3C6410_ADC)+= adc.oobj-y+= tty_mutex.o(3)在“char”下的在“Kconfig”文件中加入如下指令:config S3C6410_ADC tristate "S3C6410 ADC's driver" depends on (CPU_S3C6400 | CPU_S3C6410)default y -help- (4)刪除起先存在的“.config”,并執(zhí)行“cp Real6410_3d.config .config”指令(5)執(zhí)行“make menuconfig”指令(6)在開啟的配置菜單中的“L
29、oad an Alternate Configuration File”選項(xiàng)下載入“Real6410_3d.config”并作如下修改“Device Drivers à Character devices à <M> S3C6410 ADC's driver”(7)執(zhí)行“make modules”命令生成“adc.ko”文件(8)編寫“.sh”文件,簡(jiǎn)化開啟adc驅(qū)動(dòng)的過程#!/bin/shcp /mnt/sdcard/adc/adc.ko /lib/modules/ /復(fù)制驅(qū)動(dòng)準(zhǔn)備開啟modprobe adc /加載adc模塊,開啟驅(qū)動(dòng)
30、lsmod /顯示所加載的模塊cd /mnt/sdcard/adc /轉(zhuǎn)入驅(qū)動(dòng)所在文件夾方便指令開啟4.9minicom的安裝與nfs掛載命令(1):將編輯鏈接中的ipv4設(shè)置中方法改為“手動(dòng)“,地址設(shè)置為11,子網(wǎng)掩碼為(2):網(wǎng)絡(luò)適配器仍為橋接方式,且打鉤“復(fù)制物理機(jī)地址”(3):用ifconfig查看板子IP,并相互ping同(4):下載minicom軟件,并查看網(wǎng)絡(luò)配置(注意:一般/dev/ttyUSBS0為超級(jí)終端接口)(相關(guān)網(wǎng)址:(5):在終端下輸入cp /home/liyuhuan/linux/helloworld1 /nfsboo
31、t/liyuhuan(helloworld1是在arm-linux-gcc -o helloworld1 helloworld.c生成的可執(zhí)行文件,可以在LED屏上執(zhí)行)helloworld.c文件#include <stdio.h>int main(int argc, char *argv)printf("Hello, World!n");(6):在超級(jí)終端下輸入minicom,執(zhí)行如下掛載命令:mount -o nolock 11:/nfsboot/ /mnt/nfs,在顯示屏上執(zhí)行cd /mnt/nfs/liyuhuan,ls 顯示h
32、elloworld1(7):在顯示屏上執(zhí)行./helloworld1,會(huì)看到hello,world !4.10 WLAN的啟動(dòng)與配置 搜索 /proc 目錄,在/net目錄下發(fā)現(xiàn) wireless文件,說明wlan模塊及驅(qū)動(dòng)已經(jīng)加載 執(zhí)行 iwconfig 命令,查找wlan模塊,在eth1 執(zhí)行 ifconfig eth1 up,打開wlan 執(zhí)行 iwlist scanning,查找可用的無線網(wǎng)接入點(diǎn) 執(zhí)行 iwconfig
33、0;eth1 essid Diaosi,連接路由器(可能需要 iwconfig eth1 channel ?、iwconfig eth1 key off) 執(zhí)行 iwconfig,查看連接狀況 執(zhí)行 ifconfig eth1 雙機(jī)互ping,成功(板子上arp協(xié)議有問題,需要手動(dòng)添加arp項(xiàng),命令:arp s 9C:21:6A:7F:72:E8,路由器端的a
34、rp也最好設(shè)置一下。)附:路由器設(shè)置 無線名稱為ds 信道固定 模式11b only 不開啟無線安全 關(guān)閉WMM,關(guān)閉AP隔離 關(guān)閉DHCP 重啟無線 查看系統(tǒng)路由表,確定網(wǎng)關(guān)、子網(wǎng)掩碼、子網(wǎng)地址電腦連接設(shè)置: 手動(dòng)指定ip地址,11 子網(wǎng)掩碼 默認(rèn)網(wǎng)關(guān) 11 DNS:(任意)4.11 24L01無線模塊驅(qū)動(dòng)配置(1)將“24L01.c”與“24L01.h”放在
35、“drivers à char”下(2)在“char”下的Makefile文件開頭添加如下指令:FONTMAPFILE = cp437.uniobj-y += mem.o random.o tty_io.o n_tty.o tty_ioctl.o tty_ldisc.o tty_buffer.o tty_port.oobj-$(CONFIG_24L01)+= 24L01.oobj-y+= tty_mutex.o(3)在“char”下的在“Kconfig”文件中加入如下指令:config 24L01 tristate "S3C6410 24L01's driver&q
36、uot; depends on (CPU_S3C6400 | CPU_S3C6410)default y -help- (4)執(zhí)行“make menuconfig”指令(5)刪除起先存在的“.config”,在開啟的配置菜單中的“Load an Alternate Configuration File”選項(xiàng)下載入“Real6410_3d.config”并作如下修改“Device Drivers à Character devices à <M> S3C6410 24L01's driver”(6)并執(zhí)行“cp Real6410_3d.config .co
37、nfig”指令(7)執(zhí)行“make modules”命令生成“24L01.ko”文件(8)編寫“.sh”文件,簡(jiǎn)化開啟adc驅(qū)動(dòng)的過程#!/bin/shcp /mnt/sdcard/24L01/24L01.ko /lib/modules/ /復(fù)制驅(qū)動(dòng)準(zhǔn)備開啟modprobe 24L01 /加載adc模塊,開啟驅(qū)動(dòng)lsmod /顯示所加載的模塊cd /mnt/sdcard/24L01 /轉(zhuǎn)入驅(qū)動(dòng)所在文件夾方便指令開啟五:主程序(1) ADC定時(shí)采集實(shí)現(xiàn)主程序:float timeuse; /定義當(dāng)前累加時(shí)間float timeuse1; /定義上一次采集的累加時(shí)間 float t
38、imeused; /定義定時(shí)時(shí)間間隔 static timer_count = 0;int sockClient;char buf5;void adc1 () /adc1()電壓采集函數(shù)int fd = open("/dev/s3c6410_adc",O_RDWR); /打開"/dev/s3c6410_adc"/printf("*%d*n",fd);if(fd < 0)printf("open ADC device failed!n");exit(1);int i = 1; /定時(shí)時(shí)間內(nèi)采集一次int ret
39、;time_t t = time(NULL); int data;unsigned int port = 0;int k=1;ioctl(fd,ADC_SET_PRSCVL,200); / ioctl是設(shè)備驅(qū)動(dòng)程序中對(duì)設(shè)/備的I/O通道進(jìn)行管理的函數(shù),返回值:成功為0,出錯(cuò)為-1;while(i-)port = 0 ;ret = ioctl(fd,ADC_SET_SEL_MUX,port);ioctl(fd,ADC_SET_RESSEL,12);if(ret < 0 )switch(errno)case EFAULT:printf("argp references an ina
40、ccessible memory area.n");break;case EINVAL:printf("Request or argp is not valid.n");break;case ENOTTY:printf("d is not associated with a character special device.n");break;default:printf("undefined error!n");break;/perorr("the value of ioctl is %d n",ioc
41、tl(fd,port,1);ret = read(fd,&data,sizeof(data);if(ret != sizeof(data)printf("%f erorrn",errno);if(errno != EAGAIN)printf("read ADC device failed!n");continue;elsesprintf(buf,"%d",(int)data);send(sockClient,buf,strlen(buf),0);close(fd);void prompt_info(int signo) /定時(shí)
42、程序time_t t = time(NULL); /每?jī)擅氩杉淮?,并輸出printf("%d prompt_info calledn", +timer_count); /輸出"prompt_info called"printf(" current time %s", ctime(&t); /顯示當(dāng)前時(shí)間gettimeofday(&tpend,NULL);timeuse1=timeuse; timeuse=1000000*(tpend.tv_sec-tpstart.tv_sec)+tpend.tv_usec-tpsta
43、rt.tv_usec; timeuse/=1000000;timeused=timeuse-timeuse1; adc1 (); /調(diào)用上述的電壓采集函數(shù),輸出采集電壓printf(" Used Time:%fn",timeused); /輸出間隔時(shí)間void init_sigaction(void) struct sigaction act; act.sa_handler=prompt_info; / 信號(hào)到了要執(zhí)行的任務(wù)處理函數(shù)為prompt_infoact.sa_flags=0; sigemptyset(&act.sa_mask); /初始化信號(hào)集sigact
44、ion(SIGPROF,&act,NULL); /建立信號(hào)處理機(jī)制gettimeofday(&tpstart,NULL); /開始計(jì)時(shí)void init_time() struct itimerval value; value.it_value.tv_sec=2; /設(shè)定執(zhí)行任務(wù)的時(shí)間間隔為2秒0微秒value.it_value.tv_usec=0; value.it_interval=value.it_value; /設(shè)定初始時(shí)間計(jì)數(shù)也為2秒0微秒setitimer(ITIMER_PROF,&value,NULL); /設(shè)置計(jì)時(shí)器ITIMER_REAL void so
45、cket_init() sockClient=socket(AF_INET,SOCK_STREAM,0);struct sockaddr_in addrSrv; addrSrv.sin_addr.s_addr=inet_addr("");/網(wǎng)絡(luò)服務(wù)器IP(由于這個(gè)程序是在本機(jī)上運(yùn)行只能用這個(gè))addrSrv.sin_family=AF_INET; /設(shè)置本機(jī)IPaddrSrv.sin_port=htons(uint16_t)123456); /設(shè)置端口connect(sockClient,(struct sockaddr*)&addrSrv,siz
46、eof(struct sockaddr);/連接服務(wù)器六:實(shí)現(xiàn)未能解決的問題(1)本次設(shè)計(jì)要求使用兩種方法傳輸數(shù)據(jù):nRF2401數(shù)傳模塊作為無線傳輸模塊;使用WiFi模塊通過路由器傳輸數(shù)據(jù)。但是我們小組僅實(shí)現(xiàn)利用WiFi模塊通過路由器傳輸數(shù)據(jù),第一種方法沒能實(shí)現(xiàn),原因是驅(qū)動(dòng)程序未能解決,由于兩機(jī)之間wifi無法連接,只能實(shí)現(xiàn)本機(jī)兩個(gè)終端利用回環(huán)地址實(shí)現(xiàn)數(shù)據(jù)傳輸。(2)數(shù)據(jù)存儲(chǔ)可以使用自定義格式文件,也可采用某種嵌入式數(shù)據(jù)庫(如SQLite)。我們小組成員馮媛媛開始對(duì)嵌入式數(shù)據(jù)庫有相關(guān)研究,但是由于有一定難度,另外其他很多問題亟待解決,以至于我們沒采用嵌入式數(shù)據(jù)庫方式,在發(fā)送
47、程序中加入了存儲(chǔ)程序,存在一個(gè)文本中,但只能實(shí)現(xiàn)最后一個(gè)數(shù)據(jù)的存儲(chǔ),前面的數(shù)據(jù)都被覆蓋,一直沒有解決掉。(3)程序界面可以有多種方式:無圖形界面方式、自建圖形界面方式、Qtopia界面方式、Android界面方式。由于時(shí)間有限,我們小組只實(shí)現(xiàn)無圖形界面方式,其他界面方式有待研究實(shí)現(xiàn)。七:實(shí)驗(yàn)心得短距離無線數(shù)據(jù)傳輸系統(tǒng)的實(shí)現(xiàn)有效地簡(jiǎn)化了數(shù)據(jù)傳輸?shù)膹?fù)雜性,可以給人們的生活和工作帶來極大的方便,同時(shí)也是無線產(chǎn)業(yè)發(fā)展中的一項(xiàng)新的突破,本文只是簡(jiǎn)單的介紹了它的實(shí)現(xiàn)過程,而其日后的推廣與發(fā)展還要經(jīng)過不懈的努力,只有不斷地完善和創(chuàng)新才能使我們的成果得以廣泛應(yīng)用,相信在不遠(yuǎn)的未來,短距離無線數(shù)據(jù)將會(huì)在更多人的
48、努力下得到更好地發(fā)展,讓我們一起期待吧! 參考文獻(xiàn)1 馮國進(jìn)Linux驅(qū)動(dòng)程序開發(fā)實(shí)例機(jī)械工業(yè)出版社199524(1):161-1642 周立功 陳明計(jì)等ARM嵌入式Linux系統(tǒng)構(gòu)建與驅(qū)動(dòng)開發(fā)范例【M】北京航空航天大學(xué)出版社20063 陳文智嵌入式系統(tǒng)開發(fā)與原理實(shí)踐【M】清華大學(xué)出版社20064 美約瑟H多爾著,張林升等譯教育新理念教育科學(xué)出版社199878.4 ClaudiaSalzberg Rodiaguez Linux內(nèi)核編程M機(jī)械工業(yè)出版社2006附錄:Ad_send.c實(shí)現(xiàn)源代碼#include <sys/time.h> #include <signal.h>
49、; #include <stdlib.h>#include <errno.h>#include <sys/ioctl.h>#include <linux/fcntl.h>#include <linux/ioctl.h> #include <string.h>#include <sys/types.h>#include <sys/socket.h>#include <unistd.h>#include <netinet/in.h>#include <arpa/inet.h
50、>#include <stdio.h>#define ADC_IOC_MAGIC 100/*在代碼中使用不同的8位數(shù)字*/#define ADC_SET_SEL_MUX _IO(ADC_IOC_MAGIC,0) /設(shè)置通道#define ADC_SET_RESSEL _IO(ADC_IOC_MAGIC,1) /設(shè)置ADC精度define ADC_SET_PRSCVL _IO(ADC_IOC_MAGIC,2) /設(shè)置預(yù)分頻率struct timeval tpstart,tpend; float timeuse; /定義當(dāng)前累加時(shí)間float timeuse1; /定義上一次采集
51、的累加時(shí)間 float timeused; /定義定時(shí)時(shí)間間隔 static timer_count = 0;int sockClient;char buf5;void adc1 () /adc1()電壓采集函數(shù)int fd = open("/dev/s3c6410_adc",O_RDWR); /打開"/dev/s3c6410_adc"/printf("*%d*n",fd);if(fd < 0)printf("open ADC device failed!n");exit(1);int i = 1; /定時(shí)時(shí)
52、間內(nèi)采集一次int ret;time_t t = time(NULL); int data;unsigned int port = 0;int k=1;ioctl(fd,ADC_SET_PRSCVL,200); / ioctl是設(shè)備驅(qū)動(dòng)程序中對(duì)設(shè)/備的I/O通道進(jìn)行管理的函數(shù),返回值:成功為0,出錯(cuò)為-1;while(i-)port = 0 ;ret = ioctl(fd,ADC_SET_SEL_MUX,port);ioctl(fd,ADC_SET_RESSEL,12);if(ret < 0 )switch(errno)case EFAULT:printf("argp refe
53、rences an inaccessible memory area.n");break;case EINVAL:printf("Request or argp is not valid.n");break;case ENOTTY:printf("d is not associated with a character special device.n");break;default:printf("undefined error!n");break;/perorr("the value of ioctl is %
54、d n",ioctl(fd,port,1);ret = read(fd,&data,sizeof(data);if(ret != sizeof(data)printf("%f erorrn",errno);if(errno != EAGAIN)printf("read ADC device failed!n");continue;elsesprintf(buf,"%d",(int)data);send(sockClient,buf,strlen(buf),0);close(fd);void prompt_info(i
55、nt signo) /定時(shí)程序time_t t = time(NULL); /每?jī)擅氩杉淮?,并輸出printf("%d prompt_info calledn", +timer_count); /輸出"prompt_info called"printf(" current time %s", ctime(&t); /顯示當(dāng)前時(shí)間gettimeofday(&tpend,NULL);timeuse1=timeuse; timeuse=1000000*(tpend.tv_sec-tpstart.tv_sec)+tpend.tv_usec-tpstart.tv_usec; timeuse/=1000000;timeused=timeuse-timeuse1; adc1 (); /調(diào)用上述的電壓采集函數(shù),輸出采集電壓printf(" Used Time:%f
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 紅安縣期末數(shù)學(xué)試卷
- 海淀其中數(shù)學(xué)試卷
- 合肥火炬小升初數(shù)學(xué)試卷
- 醫(yī)院車輛管理課件
- 中國可變電容器行業(yè)發(fā)展監(jiān)測(cè)及投資戰(zhàn)略規(guī)劃研究報(bào)告
- 2025年安徽省安慶市第十一中學(xué)物理高一下期末達(dá)標(biāo)檢測(cè)模擬試題含解析
- 2025年中國二維碼識(shí)讀設(shè)備行業(yè)發(fā)展監(jiān)測(cè)及投資戰(zhàn)略研究報(bào)告
- 升降機(jī)的研究報(bào)告總結(jié)
- 中國廣西木材加工行業(yè)市場(chǎng)發(fā)展監(jiān)測(cè)及投資戰(zhàn)略規(guī)劃報(bào)告
- 健康理療師培訓(xùn)課件視頻
- 網(wǎng)絡(luò)安全知識(shí)手冊(cè)
- 鐵路公司質(zhì)量管理制度
- 物業(yè)公司接管公寓樓項(xiàng)目工作時(shí)間倒推計(jì)劃表(T日為入駐日)
- DB1304T 500-2025民用水表、電能表、燃?xì)獗碛?jì)量糾紛處理規(guī)范
- 離婚協(xié)議無子女無共同財(cái)產(chǎn)(2025年版)
- 超星爾雅學(xué)習(xí)通《公文寫作規(guī)范(黑龍江大學(xué))》2025章節(jié)測(cè)試附答案
- 肺功能檢查與臨床應(yīng)用
- DBJ51T 021-2013 四川省建筑反射隔熱涂料應(yīng)用技術(shù)規(guī)程
- CRRT的枸櫞酸抗凝(ICU)培訓(xùn)課件
- 計(jì)算機(jī)基礎(chǔ)知識(shí)理論競(jìng)賽題庫與答案(960題)
- 高處作業(yè)非標(biāo)吊籃專項(xiàng)施工方案
評(píng)論
0/150
提交評(píng)論