<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 嵌入式無線局域網(wǎng)設(shè)備的設(shè)計與實現(xiàn)

          嵌入式無線局域網(wǎng)設(shè)備的設(shè)計與實現(xiàn)

          作者: 時間:2009-02-26 來源:網(wǎng)絡(luò) 收藏
          技術(shù)分類: 通信 | 2009-02-23
          黃學雷 陳祖爵
            S3C2410X是一款基于ARM920T內(nèi)核的16/32位RISC微處理器,該處理器是為手持以及高性價比、低功耗微控制器而的。它采用了一種叫做AMBA(Advanced Microcontroller Bus Architecture)的新總線架構(gòu)。S3C2410X內(nèi)部的主要資源有內(nèi)存管理單元MMU、系統(tǒng)管理器、各為16KB的指令和數(shù)據(jù)緩存、LCD控制器(STN TFT)、NAND FLASH Boot Loader、3通道UART、4通道DMA、4個PWM時鐘、1個內(nèi)部時鐘、8通道10為ADC、觸摸屏接口、多媒體卡接口、I2C和I2S總線接口、 2個USB主機接口、1個USB接口、SD主接口、2SPI接口、PLL時鐘發(fā)生器以及通用I/O端口等。

          本文引用地址:http://www.ex-cimer.com/article/152636.htm

            S3C2410X內(nèi)部包含一個叫MMU的內(nèi)存管理單元,可以虛擬存儲空間到物理存儲空間的映射。通常系統(tǒng)的程序存放在 ROM/FLASH中,系統(tǒng)斷電后程序能夠得到保存,但ROM/FLASH與SDRAM相比,速度要慢的多,而且系統(tǒng)中通常把異常中斷向量表存放在 RAM中,利用內(nèi)存映射機構(gòu)可以解決這種需要。

            NAND FLASH采用三星公司64MB的K9S1208VOM。它可進行10萬次的編程/擦除,數(shù)據(jù)保存長達10年,被用來裝載操作系統(tǒng)鏡像和大容量的數(shù)據(jù)。

            SDRAM是用來運行操作系統(tǒng)和存儲程序運行過程中所需要的數(shù)據(jù), 采用三星公司的K4S561632C,它是4M*16bit*4bank的同步DRAM,容量為32MB。用兩片K4S561632C位擴展,使數(shù)據(jù)總線寬度為32bit.

            S3C2410X自帶USB主從接口,不需要專門的USB芯片支持,只要對其安裝驅(qū)動程序即可進行USB傳輸數(shù)據(jù)。

            4軟件系統(tǒng)

            軟件系統(tǒng)主要包括操作系統(tǒng)、TCP/IP協(xié)議的移植、驅(qū)動程序的安裝以及用戶應(yīng)用程序的編寫等。

            S3C2410X集成了內(nèi)存管理單元,因而可以嵌入式操作系統(tǒng)中更多的功能。在本文中采用Linux作為嵌入式操作系統(tǒng)。

            Linux是從UNIX發(fā)展而來,繼承了UNIX大多數(shù)的優(yōu)點且彌補其不適合在PC機上運行的缺點,Linux公開的內(nèi)核源代碼使得它成為目前最流行的操作系統(tǒng)。

            Linux是真正的多用戶、多任務(wù)、多平臺操作系統(tǒng),可運行于許多硬件平臺,具有內(nèi)置安全措施的分層的文件系統(tǒng),支持多達32種文件系統(tǒng),支持大量的外部。

            定制操作系統(tǒng)的步驟如下:(1)編寫板基支持包BSP;(2)裁剪和配置操作系統(tǒng)的各個部件,并修改相應(yīng)的配置文件;(3)編譯Kernel、組件和BSP,生成操作系統(tǒng)鏡像文件;(4)將鏡像文件下載到目標板上,進行調(diào)試。

            將操作系統(tǒng)下載到目標板上有如下幾種方法:通過BDM或JTAG接口下載、USB下載、網(wǎng)絡(luò)接口下載和串口下載等。后面幾種方法都要先通過JTAG接口將相應(yīng)的監(jiān)控程序下載到Flash中,然后CPU從Flash啟動。

            要在操作系統(tǒng)支持下實現(xiàn)TCP/IP協(xié)議,就需要進行任務(wù)劃分,可以將TCP/IP的實現(xiàn)劃分為4個任務(wù)來實現(xiàn):①IP任務(wù),主要用來解決IP 分片的重組;②TCP輸入任務(wù),主要用來處理接收到的TCP報文段;③TCP輸出任務(wù),主要用來將要輸出的數(shù)據(jù)打包、發(fā)送;④TCP定時器任務(wù),主要用來為各種時延事件(如重發(fā)事件)提供時鐘。它們之間的關(guān)系可用圖3來表示。

          圖3 任務(wù)關(guān)系

            USB驅(qū)動程序采用WDM(Winddows Drive Mode)。WDM設(shè)備驅(qū)動程序提供了一個參考框架,大大降低了由DDK書寫驅(qū)動程序帶來的難度。

            USB驅(qū)動程序包含如下幾個部分:

           ?。?)創(chuàng)建設(shè)備

            創(chuàng)建設(shè)備函數(shù)帶兩個參數(shù)調(diào)用,一個參數(shù)是指向驅(qū)動程序?qū)ο蟮闹羔?另一個參數(shù)是指向物理設(shè)備對象的指針。

           ?。?)關(guān)閉設(shè)備

            (3)讀取設(shè)備數(shù)據(jù)

            當客戶應(yīng)用程序有讀取設(shè)備數(shù)據(jù)的要求時,系統(tǒng)將此要求以IRP_MJ_READ的IRP形式傳遞給功能驅(qū)動程序,由設(shè)備的D12Meter_Read程序執(zhí)行,然后再由D12Meter_Read指定USB總線驅(qū)動程序直接與設(shè)備實現(xiàn)信息交互。

            (4)對設(shè)備寫入數(shù)據(jù)

            當客戶應(yīng)用程序有寫設(shè)備數(shù)據(jù)的要求時,系統(tǒng)將此要求以IRP_MJ_WRITE的IRP形式傳遞給功能驅(qū)動程序,并由D12Meter_Write執(zhí)行,然后再由D12Meter_Write指定USB總線驅(qū)動程序直接與設(shè)備實現(xiàn)信息交互。

            USB驅(qū)動程序通過安裝文件(.inf文件)中PID(產(chǎn)品識別號)和VID(廠商識別號)識別USB設(shè)備。

            一旦操作系統(tǒng)裝載完成后,就可以安裝無線網(wǎng)卡的驅(qū)動程序和其他相應(yīng)的應(yīng)用程序。將無線網(wǎng)卡的驅(qū)動程序作為一個模塊打包到操作系統(tǒng)中,可避免系統(tǒng)掉電后每次都要重裝無線網(wǎng)卡驅(qū)動程序。


            用戶應(yīng)用程序要針對具體的應(yīng)用情況而定,一般都用C語言編寫。

            5 總結(jié)

            嵌入式設(shè)備可以用于有線網(wǎng)絡(luò)無法延伸或難以安裝、有可靈活移動和臨時性使用等要求的場合??梢詳?shù)據(jù)的采集和無線傳輸、可以用于嵌入式手持移動終端、可以用來構(gòu)建家庭,若加攝像頭和圖象處理芯片,還可以用于工業(yè)現(xiàn)場中的遠程無線視頻監(jiān)控。

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          上一頁 1 2 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();