目前,嵌入式技術(shù)已廣泛應(yīng)用于工業(yè)控制、消費(fèi)類電子產(chǎn)品、通信系統(tǒng)等各類市場(chǎng)產(chǎn)品。并且隨著互聯(lián)網(wǎng)的日益發(fā)達(dá),具有無(wú)線接入功能的嵌入式系統(tǒng)更加具有發(fā)展前景。本文將介紹支持IEEE 802.11g協(xié)議的54M USB無(wú)線網(wǎng)卡在嵌入式系統(tǒng)上的應(yīng)用,嵌入式系統(tǒng)使用了ARM9系列的S3C2410處理器。 1 系統(tǒng)硬件體系結(jié)構(gòu) 1.1 系統(tǒng)結(jié)構(gòu) 系統(tǒng)總體結(jié)構(gòu)如圖1所示。 ![]() 系統(tǒng)核心芯片采用三星公司的S3C2410處理器,該處理器是三星公司的一款基于 ARM920T內(nèi)核的16/32位RISC嵌入式微處理器,主要面向手持設(shè)備以及高性價(jià)比,低功耗的應(yīng)用,運(yùn)行的頻率可以達(dá)到203MHz。該處理器集成了很多重要的功能模塊,并且支持多種總線。處理器集成了USB HOST控制器,并支持兩個(gè)USB HOST通訊端口。 系統(tǒng)使用64M NAND FLASH作為仔儲(chǔ)器,存儲(chǔ)了系統(tǒng)軟件部分必需的BOOTLOADER、LINUXKERNEL、FILESYSTEM。系統(tǒng)中的串口、 USBDEVICE接口、JTAG接口主要在開(kāi)發(fā)調(diào)試時(shí)使用。系統(tǒng)通過(guò)TOUCH&LCD進(jìn)行人機(jī)信息交換,滿足廣大消費(fèi)類電子產(chǎn)品的需求。 無(wú)線網(wǎng)卡是這個(gè)移動(dòng)終端的關(guān)鍵設(shè)備,鑒于市面上大部分的llM無(wú)線網(wǎng)卡已經(jīng)停產(chǎn)或者即將停產(chǎn),以及社會(huì)對(duì)具有更高網(wǎng)絡(luò)接入性能的嵌入式設(shè)備的需求,我們選擇芯片組型號(hào)為rt2573的54M無(wú)線網(wǎng)卡。由于S3C2410處理器已經(jīng)集成了USB HOST控制器,所以不需要附加額外的芯片,網(wǎng)卡可以直接通過(guò)USBHOST PORT接入,非常方便。 1.2 USB主機(jī)接口的硬件實(shí)現(xiàn) 在USB系統(tǒng)中,各種USB設(shè)備要與主機(jī)相連,就必須通過(guò)一個(gè)共同的接口接入豐機(jī)。這個(gè)接口就是USB豐機(jī)控制器(USB Host Controller)。USB總線協(xié)議定義了四條信號(hào)線,其中兩條信號(hào)線負(fù)責(zé)供電,而另外兩條信號(hào)線負(fù)責(zé)數(shù)據(jù)的傳輸。USB通信模型是一種Host- Slave(主機(jī)——外設(shè))主從式結(jié)構(gòu),因此經(jīng)由USB總線進(jìn)行通信的雙方必有一方在通信控制中擔(dān)當(dāng)主機(jī)(HOST)的角色。 USB接口可從主機(jī)上獲得500mA的電流,并且支持熱插拔,真正做到即插即用。一個(gè)USB接口可同時(shí)支持高速和低速USB外設(shè)的訪問(wèn),有一條4芯電纜連接,其中2條是正負(fù)電源,傳送的是5V的電源,2條是數(shù)據(jù)傳輸線,數(shù)據(jù)線是單工的,在整個(gè)的一個(gè)系統(tǒng)中的數(shù)據(jù)速率是一定的,或者是高速,或者是低速。 S3C2410處理器內(nèi)部集成了USB HOST控制器,可以直接從CPU引線出來(lái),而不需要添加額外的控制芯片,圖2為系統(tǒng)的USB HOST接口擴(kuò)展。S3C2410處理器可以支持兩個(gè)USB HOST通信端口。 ![]() 2 USB網(wǎng)卡無(wú)線網(wǎng)絡(luò)功能的實(shí)現(xiàn) 2.1 無(wú)線網(wǎng)卡的軟件管理層實(shí)現(xiàn) 嵌入式系統(tǒng)硬件部分建立好后,需要建立軟件系統(tǒng)。本系統(tǒng)中采用了vivi做為BOOTLOADER(引導(dǎo)啟動(dòng)程序),嵌入式Linux作為操作系統(tǒng),以Cramfs作為主文件系統(tǒng),為支持可讀寫(xiě)功能還添加了Jffs2文件系統(tǒng)。 接著,需要軟件上實(shí)現(xiàn)無(wú)線網(wǎng)卡的功能。 無(wú)線網(wǎng)卡的軟件包括無(wú)線網(wǎng)卡固件(Firmware)、無(wú)線網(wǎng)卡驅(qū)動(dòng)程序(Driver)和無(wú)線網(wǎng)卡配置管理程序三部分。 無(wú)線網(wǎng)卡的軟件實(shí)現(xiàn)結(jié)構(gòu)圖如圖3所示。固件是無(wú)線網(wǎng)卡上最基本的控制系統(tǒng),主要基于MAC芯片來(lái)實(shí)現(xiàn)對(duì)整個(gè)網(wǎng)卡的控制和管理,并向下提供與物理層的接口,向上提供一個(gè)程序開(kāi)發(fā)接口,為程序開(kāi)發(fā)附加的移動(dòng)主機(jī)應(yīng)用程序提供支持。在嵌入式系統(tǒng)中,IEEE802.11提供的服務(wù),包括認(rèn)證、解除認(rèn)證、登錄、重登錄等均由固件完成。 ![]() 無(wú)線網(wǎng)卡的驅(qū)動(dòng)程序使用固件提供的軟件編程接口,對(duì)無(wú)線網(wǎng)卡進(jìn)行控制,配合固件完成數(shù)據(jù)的收發(fā)以及對(duì)信息幀的處理。無(wú)線網(wǎng)卡驅(qū)動(dòng)程序主要是針對(duì)相應(yīng)的無(wú)線網(wǎng)卡芯片進(jìn)行設(shè)計(jì)的,不同的芯片,它們的固件和寄存器相關(guān)設(shè)置存在很大的差異。除了要完成對(duì)下層的控制外,無(wú)線網(wǎng)卡驅(qū)動(dòng)還要向上層應(yīng)用程序和管理程序提供操作和配置無(wú)線網(wǎng)卡的應(yīng)用程序編程接口,以實(shí)現(xiàn)其網(wǎng)絡(luò)傳輸功能。 所有的Linux網(wǎng)絡(luò)驅(qū)動(dòng)程序遵循通用的接口。設(shè)計(jì)時(shí)采用的是面向?qū)ο蟮姆椒āR粋(gè)設(shè)備就是一個(gè)對(duì)象(device結(jié)構(gòu)),它內(nèi)部有自己的數(shù)據(jù)和方法。每一個(gè)設(shè)備的方法被調(diào)用時(shí)的第一個(gè)參數(shù)都是這個(gè)設(shè)備對(duì)象本身,這樣這個(gè)方法就可以存取自身的數(shù)據(jù)(類似面向?qū)ο蟪绦蛟O(shè)計(jì)時(shí)的this引用)。一個(gè)網(wǎng)絡(luò)設(shè)備最基本的方法有初始化、發(fā)送和接收。如圖4所示。 ![]() 初始化程序完成硬件的初始化,device中變量的初始化和系統(tǒng)資源的申請(qǐng),發(fā)送程序是在驅(qū)動(dòng)程序的上層協(xié)議層有數(shù)據(jù)要發(fā)送時(shí)自動(dòng)調(diào)用的。一般驅(qū)動(dòng)程序中不對(duì)發(fā)送數(shù)據(jù)進(jìn)行緩存,直接使用硬件的發(fā)送功能把數(shù)據(jù)發(fā)送出去。接收數(shù)據(jù)一般是通過(guò)硬件中斷來(lái)通知的。在中斷處理程序里,把硬件幀信息填入一個(gè) skbuff結(jié)構(gòu)中,然后調(diào)用 netif_rx()傳遞給上層處理。 本系統(tǒng)的無(wú)線網(wǎng)卡驅(qū)動(dòng)接口主要實(shí)現(xiàn)了以下接口函數(shù): ![]() 無(wú)線網(wǎng)卡配置管理程序利用驅(qū)動(dòng)程序提供的信息查詢和設(shè)置接口,向用戶實(shí)時(shí)提供無(wú)線網(wǎng)卡的狀態(tài),同時(shí)利用該管理軟什可以實(shí)現(xiàn)對(duì)IP、 SSID等無(wú)線剛卡參數(shù)進(jìn)行必要的配置。常見(jiàn)的無(wú)線網(wǎng)卡配置管理程序有iwconfig、iwlistt、iwspy、iwpriv等。這里介紹幾個(gè)主要的無(wú)線網(wǎng)卡配置管理程序: ·Iwconfig:主要的無(wú)線管理工具,用來(lái)查看設(shè)備配置以及大部分的無(wú)線剛絡(luò)參數(shù)。 ·Iwlish:用來(lái)查看大部分iwconfig工具不能顯示的參數(shù),如:比特率,頻率等。 ·Impriv:操作無(wú)線網(wǎng)卡驅(qū)動(dòng)程序提供的特有的管理控制功能。 ·Iwgetid:輸出指定設(shè)備的ESSID或NWID。 2.2 無(wú)線網(wǎng)卡的配置和激活使用 要完成無(wú)線網(wǎng)卡的配置和激活使用,首先,應(yīng)設(shè)置配置文件和編譯驅(qū)動(dòng)程序,生成無(wú)線網(wǎng)卡的固件和驅(qū)動(dòng)程序模塊。把固件和配置文什放到文件系統(tǒng)的/etc/Wireless/RT73STA/文件夾上。 Rt73sta.dat的主要配置如下: ·NetworkType=Infra /*由于選擇AP接入模式,網(wǎng)絡(luò)類型選擇Infra*/ ·SSID=TPLINK /* SSID/ESSID(Service SetIdentifier)是“服務(wù)區(qū)標(biāo)識(shí)符匹配”、“業(yè)務(wù)組標(biāo)識(shí)符”的簡(jiǎn)稱,最多可以有32個(gè)字符。它就好比有線局域網(wǎng)中的“工作組”標(biāo)識(shí)一樣或好比是無(wú)線客戶端與無(wú)線路由器之間的一道口令一樣,只有在完仝相同的前提下才能讓無(wú)線網(wǎng)卡訪問(wèn)無(wú)線路由器,這也是保證無(wú)線網(wǎng)絡(luò)安全的重要措施之一。這里設(shè)置為你的AP 上的SSID就可以。*/ ·WirelessMode=0 /*數(shù)字0表示選擇同時(shí)支持11b/g協(xié)議。*/ ·TxRate=12 /*數(shù)字12表示選擇54M的傳輸速度。*/ 除通過(guò)修改配置文件外,大部分的參數(shù)可以通過(guò)iwconfig工具直接設(shè)定。至此,可以通過(guò)ifconfig來(lái)啟動(dòng)無(wú)線網(wǎng)卡了。Ifconfig usb0 192.168.100.99 up。啟動(dòng)后可以通過(guò)ping命令查看網(wǎng)絡(luò)連接狀態(tài)。 ![]() 詳細(xì)介紹了實(shí)現(xiàn)基于S3C2410處理器的嵌入式Linux系統(tǒng)無(wú)線接入網(wǎng)絡(luò)功能的擴(kuò)展方法,對(duì)硬件和軟件的實(shí)現(xiàn)進(jìn)行了詳細(xì)的描述。無(wú)線接入功能的實(shí)現(xiàn)使得嵌入式系統(tǒng)在網(wǎng)絡(luò)應(yīng)用高速發(fā)展的電子消費(fèi)世界有著廣闊的發(fā)展空間和應(yīng)用前景。系統(tǒng)采用54MBPS無(wú)線網(wǎng)卡,大大增強(qiáng)了嵌入式系統(tǒng)網(wǎng)絡(luò)接入能力,使其更具有競(jìng)爭(zhēng)力。 參考文獻(xiàn) 1. 陳頤.秦貴和.徐華中 ARM9 嵌入式技術(shù)及Linux高級(jí)實(shí)踐教程 2005 2. 劉亨杰.汪敏.潘志浩 USB 無(wú)線網(wǎng)絡(luò)適配器在嵌入式系統(tǒng)中的應(yīng)用 2003(5) 3. 孫天澤.袁文菊.張海峰 嵌入式設(shè)計(jì)及Linux驅(qū)動(dòng)開(kāi)發(fā)指南 2005 4. 張綺文.謝建雄.謝勁心 ARM 嵌入式常用模塊與綜合系統(tǒng)設(shè)計(jì) 2007 5. 黃學(xué)雷 無(wú)線局域網(wǎng)在嵌入式系統(tǒng)中的應(yīng)用 2006 6. 劉乃安 無(wú)線局域網(wǎng)(WLAN)原理、技術(shù)與應(yīng)用 2004 7. JONATHTAN CORBET.ALESSANDRO RUBINI LINUX 設(shè)備驅(qū)動(dòng)程序 2006 8. 毛德操.胡希明 Linux 內(nèi)核源代碼情景分析 2001 9. 郭磊.廖啟征.魏世民.蔡坤.李偉 基于 ARM9系統(tǒng)的USB無(wú)線網(wǎng)卡驅(qū)動(dòng)程序設(shè)計(jì) [期刊論文] -計(jì)算機(jī)系統(tǒng)應(yīng)用2007(1) 10. 周蓓.王典洪.宋俊磊 ARM 在信息家電方面的應(yīng)用 2006(2) 作者:武漢大學(xué)物理科學(xué)與技術(shù)學(xué)院 吳永康 張東 楊承照 來(lái)源:電子技術(shù) 2007(7) |