版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1 引言隨著移動(dòng)技術(shù)的不斷發(fā)展,整個(gè)世界在走向移動(dòng)化?,F(xiàn)階段,通信技術(shù)正面臨一場(chǎng)深刻的變革,傳統(tǒng)的有線網(wǎng)絡(luò)已不能滿足日益增長(zhǎng)的通信需要。無(wú)線通信技術(shù)越來(lái)越受到關(guān)注,人們需要一種不受約束的通信技術(shù),能夠隨時(shí)隨地的獲取信息。隨著互聯(lián)網(wǎng)越來(lái)越深入的走進(jìn)人們的生活,用戶對(duì)能夠隨時(shí)隨地上網(wǎng)的需求越來(lái)越迫切,WIFI 無(wú)線通信技術(shù)也得到了迅速發(fā)展。WiFi(Wireless Fidelity)是無(wú)線局域網(wǎng)(WLAN)技術(shù)IEEE 802.11系列標(biāo)準(zhǔn)的商用名稱。IEEE 802.11系列標(biāo)準(zhǔn)主要包括IEEE 802.11a/b/g/n 5種。WIFI是由AP ( Access Point)和無(wú)線網(wǎng)卡組成的
2、無(wú)線網(wǎng)絡(luò)。AP一般稱為網(wǎng)絡(luò)橋接器或接入點(diǎn), 它是當(dāng)作傳統(tǒng)的有線局域網(wǎng)絡(luò)與無(wú)線局域網(wǎng)絡(luò)之間的橋梁, 因此任何一臺(tái)裝有無(wú)線網(wǎng)卡的PC均可透過(guò)AP去分享有線局域網(wǎng)絡(luò)甚至廣域網(wǎng)絡(luò)的資源。WIFI主要技術(shù)優(yōu)點(diǎn)是無(wú)線接入、高速傳輸以及傳輸距離遠(yuǎn) 其中, 802.11n可以將WLAN的傳輸速率由目前802.11a及802.11g提供的54Mbps,提高到300Mbps甚至高達(dá)600Mbps。在開(kāi)放性區(qū)域通訊距離可達(dá)305m, 在封閉性區(qū)域通訊距離76 122m,方便與現(xiàn)有的有線以太網(wǎng)整合,組網(wǎng)的成本更低。WIFI 設(shè)備使用的頻段為2.4 2.483 5GHz的免許可頻段, 在頻率資源上不存在限制, 因此使用
3、成本低廉也成為了WIFI技術(shù)的又一大優(yōu)勢(shì)?,F(xiàn)階段的WIFI控制方案一般基于PC機(jī)或是高性能的ARM嵌入系統(tǒng),并且目前價(jià)格便宜的WIFI無(wú)線網(wǎng)卡一般都定位于PC機(jī),接口一般為PCI接口或是USB接口。誠(chéng)然,以上兩種方案的優(yōu)勢(shì)明顯,主要體現(xiàn)在傳輸速度高,軟件編制容易等方面,缺點(diǎn)是單個(gè)節(jié)點(diǎn)造價(jià)較高。在一些工業(yè)控制系統(tǒng)中,有時(shí)僅需要WIFI網(wǎng)絡(luò)節(jié)點(diǎn)傳送少量的數(shù)據(jù),此時(shí)對(duì)傳輸性能要求并不高,當(dāng)我們需要大量的這種節(jié)點(diǎn)時(shí),選用PC機(jī)或是ARM的控制方案顯然成本會(huì)很高。在這種情況下,需尋找一種可替代的方案,要求是對(duì)性能要求不高,但是單個(gè)節(jié)點(diǎn)的成本要低。隨著單片機(jī)技術(shù)的發(fā)展,現(xiàn)階段一些單片機(jī)的資源已經(jīng)足夠駕馭8
4、02.11協(xié)議和TCP/IP協(xié)議,并且我們也可以對(duì)802.11和TCP/IP協(xié)議進(jìn)行適當(dāng)?shù)木?jiǎn),只保留基本數(shù)據(jù)傳輸部分,以此實(shí)現(xiàn)低成本低性能的WIFI控制系統(tǒng)。2 總體設(shè)計(jì)方案2.1 系統(tǒng)概述WIFI控制系統(tǒng)主要由兩部分構(gòu)成,主控部分和無(wú)線通信部分。主控部分主要完成如下的控制功能:a) 數(shù)據(jù)采集和處理。此部分是整個(gè)系統(tǒng)的核心功能,數(shù)據(jù)采集和處理的方式?jīng)Q定了系統(tǒng)的總體功能。b) 通信協(xié)議控制。此部分控制無(wú)線通信的具體過(guò)程,具體來(lái)說(shuō)就是建立無(wú)線連接,傳送采集和處理后的數(shù)據(jù)。無(wú)線通信部分主要完成如下功能:a) 無(wú)線數(shù)據(jù)幀的封裝,數(shù)據(jù)的加密解密等基帶處理。b) 無(wú)線數(shù)據(jù)從媒介控制層到物理層的映射,完成
5、實(shí)際的數(shù)據(jù)收發(fā)。圖2.1 WIFI控制系統(tǒng)整體框圖2.2 控制核心的選擇:由于802.11通信的速度較高,而且較高的通信速率又是802.11無(wú)線網(wǎng)絡(luò)主要特點(diǎn),故需選擇一款數(shù)據(jù)處理能力強(qiáng)的MCU,同時(shí)802.11無(wú)線通信協(xié)議是一種比較復(fù)雜的通信協(xié)議,如果還需實(shí)現(xiàn)TCP/IP的通信則系統(tǒng)的開(kāi)銷會(huì)更大,所以選擇的MCU應(yīng)該具有比較大的片上RAM和程序存儲(chǔ)空間?;谝陨系目紤],課題最終選擇了PIC32MX440這款單片機(jī)作為核心控制MCU。PIC32MX 單片機(jī)(MCU)是一款基于 MIPS Technologies 的 M4K 內(nèi)核的復(fù)雜片上系統(tǒng),M4K是最新型的 32 位低功耗RISC 處理器內(nèi)核
6、,采用了增強(qiáng)型 MIPS32 Release 2 指令集構(gòu)。本節(jié)概述PIC32MX系列單片機(jī)的CPU 特性和系統(tǒng)架構(gòu)。主要特性:a) 最高可達(dá)到1.5 DMIPS/MHz 的性能 b) 可編程預(yù)取高速緩存存儲(chǔ)器,以增強(qiáng)閃存中的執(zhí)行效率 c) 16 位指令模式(MIPS16e),用于緊湊型代碼d) 帶有63個(gè)優(yōu)先級(jí)的向量中斷控制器e) 可編程的用戶和內(nèi)核工作模式f) 可對(duì)外設(shè)寄存器執(zhí)行原子級(jí)位操作(單周期)g) 乘法/除法單元,最高指令發(fā)出速率為每個(gè)時(shí)鐘一條3216乘法指令h) 高速M(fèi)icrochip ICD端口,具有基于硬件的非侵入式數(shù)據(jù)監(jiān)視和應(yīng)用程序數(shù)據(jù)流功能i) EJTAG調(diào)試端口,支持廣
7、泛的第三方調(diào)試、編程和測(cè)試工具j) 指令控制的功耗管理模式k) 5 級(jí)流水線指令執(zhí)行 l) 內(nèi)部代碼保護(hù),以幫助保護(hù)知識(shí)產(chǎn)權(quán)m) PIC32MX440系列單片機(jī)具有USB-HOST外設(shè),可以方便的和具有USB接口的WIFI無(wú)線網(wǎng)卡連接。片上USB-HOST外設(shè)具有如下特性:1.作為主機(jī)和設(shè)備的USB 全速支持;2. 低速主機(jī)支持;3. USB On-The-Go(OTG)支持;4. 集成信號(hào)傳輸電阻;5. 用于VBUS 監(jiān)視的集成模擬比較器;6. 集成USB 收發(fā)器;7. 硬件執(zhí)行的事務(wù)握手;8. 可在系統(tǒng)RAM 中任意位置進(jìn)行端點(diǎn)緩沖;9. 集成用于訪問(wèn)系統(tǒng)RAM 和閃存的總線主控;10.
8、USB 模塊工作時(shí)不需要使用PIC32 DMA模塊。2.3 無(wú)線WIFI模塊的選擇:無(wú)線模塊的選擇主要基于成本,本課題主要的研究方向即實(shí)現(xiàn)一種低成本的WIFI控制方案,所以成本成為了選擇WIFI模塊的主要依據(jù)。同時(shí),WIFI模塊還應(yīng)該易于MCU控制,軟件復(fù)雜程度也是重要的考慮方面。WIFI網(wǎng)卡一般的接口為PCI接口或USB接口,比如雷凌公司的RT73、RT2070和RT3070等,這些都是和PC機(jī)上的接口相對(duì)應(yīng)的。也有一些適合單片機(jī)接口的WIFI模塊比如具有SDIO接口的Marvell8686和SPI接口的MRF24WB0MB芯片,不過(guò)接口雖然貼近單片機(jī)但是價(jià)格一般偏貴,不符合本次設(shè)計(jì)的要求,
9、此次設(shè)計(jì)采用了雷凌公司的RT73無(wú)線模塊。該模塊具有以下特點(diǎn):a) 采用RT2571作為核心基帶處理芯片,RT2571是一款高度集成的MAC/baseband 處理器,它支持IEEE802.11A/B/G標(biāo)準(zhǔn)。b) 采用USB接口作為和主MCU通信的接口,RT2571芯片集成了一個(gè)USB設(shè)備控制器,它擁有一個(gè)控制0端點(diǎn),和一進(jìn)一出兩個(gè)批量傳輸端點(diǎn),USB接口支持USB1.1和USB2.0控制協(xié)議。c) 支持64/124位的WEP加密和WPA和AES加密認(rèn)證方式。d) 支持6,9,12,18,24,36,48,54Mbps的通信速率。2.4 WIFI控制系統(tǒng)基本原理和特點(diǎn)2.4.1 硬件部分:W
10、IFI控制系統(tǒng)核心由MCU控制模塊和WIFI通信模塊構(gòu)成。兩個(gè)核心模塊之間由USB總線連接,MCU是USB主機(jī)端,負(fù)責(zé)各種傳輸事務(wù)的發(fā)起和USB設(shè)備的連接枚舉操作。RT73無(wú)線模組同樣支持USB1.1協(xié)議,故USB總線采用全速傳輸?shù)姆绞剑瑐鬏斔俾蕿?2Mbps。2.4.2 軟件部分:MCU作為USB主機(jī),它所有發(fā)起的事務(wù)(不論控制或是BULK傳輸)都采用唯一的端點(diǎn)0進(jìn)行傳輸。RT73使用到3個(gè)USB端點(diǎn):控制端點(diǎn)0,BULK OUT 端點(diǎn)1,BULK IN 端點(diǎn)1。RT73模塊需要在上電后進(jìn)行初始化配置,配置通過(guò)USB控制傳輸來(lái)進(jìn)行。同時(shí),MCU端讀取RT73基本配置信息,比如MAC地址等重要
11、的信息。當(dāng)RT73模塊完成配置后,隨即轉(zhuǎn)為正常的收發(fā)工作模式,此時(shí)MCU需要和RT73的兩個(gè)BULK端點(diǎn)進(jìn)行通信,如果MCU需要發(fā)送IEEE802.11幀,則將發(fā)起B(yǎng)ULK OUT傳輸事務(wù)。MCU不斷間隔一定的時(shí)間發(fā)起B(yǎng)ULK IN 事務(wù)傳輸,輪詢是否有數(shù)據(jù)到達(dá)RT73模塊??梢韵氲綑z測(cè)是否有數(shù)據(jù)到達(dá)會(huì)耗費(fèi)較多的CPU時(shí)間,所以合理的軟件設(shè)計(jì)就成了關(guān)鍵。MCU對(duì)收發(fā)的802.11數(shù)據(jù)幀進(jìn)行處理,負(fù)責(zé)無(wú)線通信連接的建立和斷開(kāi)和實(shí)際的數(shù)據(jù)傳送。在802.11無(wú)線協(xié)議上層一般還會(huì)有TCP/IP協(xié)議。MCU通過(guò)對(duì)802.11層的數(shù)據(jù)包解析,獲取有效的TCP/IP數(shù)據(jù)包,并將TCP/IP數(shù)據(jù)包傳入TCP
12、/IP層進(jìn)一步的處理。綜合以上分析,方案的硬件設(shè)計(jì)并不復(fù)雜,主要是系統(tǒng)的供電設(shè)計(jì)以及PIC32單片機(jī)最小系統(tǒng)設(shè)計(jì);USB接口的設(shè)計(jì)等。軟件部分相對(duì)復(fù)雜,對(duì)于實(shí)現(xiàn)一個(gè)WIFI控制系統(tǒng)核心而言,需要如下軟件模塊:1. 高效而穩(wěn)定的USB-HOST協(xié)議棧;2. IEEE802.11協(xié)議棧;3. 小巧而穩(wěn)定的TCP/IP協(xié)議棧。以上的三個(gè)軟件組件聯(lián)系緊密:首先,處于最底層的是USB協(xié)議棧,此部分負(fù)責(zé)MCU和USB無(wú)線網(wǎng)卡之間的802.11幀通信,USB總線是一種主從輪詢式總線,所以相對(duì)于PCI或其他同步總線來(lái)說(shuō)耗費(fèi)CPU時(shí)間較多,尤其是在接收數(shù)據(jù)時(shí),不能采用中斷的方式通知CPU,而只能采用不斷試探輪詢
13、的方法來(lái)確認(rèn)有數(shù)據(jù)到達(dá),所以此USB部分的通信效率就比較重要;第二,在USB上層是802.11無(wú)線通信協(xié)議棧,802.11幀通過(guò)USB總線進(jìn)行傳輸,802.11協(xié)議棧解析802.11幀數(shù)據(jù)并作出響應(yīng)的響應(yīng);第三,最上層為TCP/IP協(xié)議棧,此部分接收TCP/IP幀進(jìn)行處理。TCP/IP完整協(xié)議棧比較大,所以此部分需要對(duì)TCP/IP協(xié)議棧的合理裁剪就顯得尤為重要。3 系統(tǒng)硬件設(shè)計(jì)3.1 系統(tǒng)供電電路圖3.1 系統(tǒng)電源設(shè)計(jì)如圖3.1為系統(tǒng)的供電電路,系統(tǒng)采用9V的電源適配器電源輸入,由于PIC32MX440單片機(jī)需要3.3V供電,故需要三端穩(wěn)壓器提供3.3V電壓,之所以采用兩路3.3V供電電路,主
14、要9V的輸入電壓較高,所以實(shí)際1117輸出的電流會(huì)比較小,所以一路供電支MCU,另一路可以提供給其它的功率較大的設(shè)備。3.2 PIC32最小系統(tǒng)設(shè)計(jì)圖3.2 PIC32MX440最小系統(tǒng)如上圖3.2為PIC32最小系統(tǒng),此電路較為簡(jiǎn)單,和一般的MCU一樣,同樣有復(fù)位電路和供電電路,單片機(jī)選用了外部晶振,晶振頻率為8MHZ。4 系統(tǒng)軟件設(shè)計(jì)4.1 USB協(xié)議棧移植4.1.1 USB協(xié)議介紹USB(Universal Serial Bus)通用串行總線,最早由INTEL和微軟倡導(dǎo)發(fā)起,時(shí)至今日已成為最流行的桌面設(shè)備總線,現(xiàn)已發(fā)展到USB3.0。USB的基本通信方式為主從模式,其中主機(jī)是一個(gè)提供US
15、B接口及接口管理能力的硬件、軟件及固件的復(fù)合體,可以是PC,也可以是OTG設(shè)備。USB采用輪詢廣播的方式傳輸數(shù)據(jù),每一個(gè)USB設(shè)備都有其自身的地址,所有的數(shù)據(jù)傳輸均由USB主機(jī)發(fā)起,任何時(shí)刻整個(gè)USB傳輸系統(tǒng)中只允許一個(gè)數(shù)據(jù)包進(jìn)行傳輸。USB事務(wù)處理是USB主機(jī)和USB設(shè)備間進(jìn)行數(shù)據(jù)傳輸?shù)幕締挝?,基本事?wù)傳輸由一系列特定格式的信息包組成,一般而言,一次事務(wù)傳輸分為三個(gè)階段:令牌階段,數(shù)據(jù)階段和握手階段。其中,令牌階段表示事務(wù)處理的開(kāi)始,并定義了傳輸類型;數(shù)據(jù)階段負(fù)責(zé)傳輸相關(guān)的數(shù)據(jù);握手階段用于報(bào)告事務(wù)處理的狀態(tài),以表明數(shù)據(jù)接收是否成功。信息包是USB數(shù)據(jù)傳輸?shù)淖钚挝?,USB信息包分為:令牌
16、包,數(shù)據(jù)包,握手包等信息包,在一次典型的USB通信過(guò)程中,主機(jī)首先發(fā)送令牌包以表明本次USB傳輸?shù)哪康牡刂?,令牌包中一般?huì)包括USB設(shè)備地址和端點(diǎn)地址。USB設(shè)備會(huì)根據(jù)收到的令牌包來(lái)決定是否和主機(jī)進(jìn)行配合來(lái)完成本次事務(wù)傳輸;數(shù)據(jù)包中包含了本次事務(wù)傳輸中的真正有效數(shù)據(jù);握手包,處于事務(wù)傳輸?shù)哪┪玻话阌脕?lái)確認(rèn)傳輸是否已成功。USB規(guī)范了四種基本的傳輸模式:a) 控制傳輸:主要用于在設(shè)備連接時(shí)對(duì)設(shè)備進(jìn)行枚舉以及其他因設(shè)備而已的特定操作b) 中斷傳輸:用于對(duì)延遲要求嚴(yán)格、小量數(shù)據(jù)的可靠傳輸,如鍵盤、游戲手柄等。 c) 批量傳輸:用于對(duì)延遲要求寬松,大量數(shù)據(jù)的可靠傳輸,如U盤等。 d) 同步傳輸:用于
17、對(duì)可靠性要求不高的實(shí)時(shí)數(shù)據(jù)傳輸,如攝像頭、USB 音響等。USB主機(jī)除負(fù)責(zé)基本的數(shù)據(jù)傳輸外,還對(duì)設(shè)備的熱插拔進(jìn)行了支持,每當(dāng)一個(gè)設(shè)備插入U(xiǎn)SB接口后,USB主機(jī)檢測(cè)到外部信號(hào)線上電平的變化,由此判斷有設(shè)備插入,此時(shí)USB主機(jī)隨即對(duì)外設(shè)進(jìn)行枚舉并分配地址,具體的枚舉過(guò)程如下:a) 連接了設(shè)備的 HUB 在 HOST 查詢其狀態(tài)改變端點(diǎn) 狀態(tài)改變端點(diǎn) 狀態(tài)改變端點(diǎn) 狀態(tài)改變端點(diǎn)時(shí)返回對(duì)應(yīng)的 bitmap,告知HOST 某個(gè)PORT狀態(tài)發(fā)生了改變。 b) 主機(jī)向 HUB 查詢?cè)揚(yáng)ORT的狀態(tài),得知有設(shè)備連接,并知道了該設(shè)備的基本特性。 c) 主機(jī)等待(至少 100mS)設(shè)備上電穩(wěn)定,然后向 HUB
18、發(fā)送請(qǐng)求,復(fù)位并使能該d) PORT。 e) HUB執(zhí)行PORT復(fù)位操作,復(fù)位完成后該P(yáng)ORT就使能了?,F(xiàn)在設(shè)備進(jìn)入到defalut狀態(tài),可以從Vbus獲取不超過(guò) 100mA 的電流。主機(jī)可以通過(guò) 0地址與其通訊。 f) 主機(jī)通過(guò)0地址向該設(shè)備發(fā)送get_device_descriptor標(biāo)準(zhǔn)請(qǐng)求,獲取設(shè)備描述符。 g) 主機(jī)再次向 HUB 發(fā)送請(qǐng)求,復(fù)位該P(yáng)ORT。 h) 主機(jī)通過(guò)標(biāo)準(zhǔn)請(qǐng)求 set_address給設(shè)備分配地址。 i) 主機(jī)通過(guò)新地址向設(shè)備發(fā)送get_device_descriptor標(biāo)準(zhǔn)請(qǐng)求,獲取設(shè)備的描述符。 j) 主機(jī)通過(guò)新地址向設(shè)備發(fā)送其他get_configurat
19、ion請(qǐng)求,獲取設(shè)備的配置描述符。 k) 根據(jù)配置信息,主機(jī)選擇合適配置,通過(guò)set_configuration請(qǐng)求對(duì)設(shè)備進(jìn)行配置。設(shè)備枚舉過(guò)程相當(dāng)設(shè)備自身的初始化過(guò)程經(jīng)過(guò)了枚舉的設(shè)備此時(shí)才能在整個(gè)USB總線中進(jìn)行數(shù)據(jù)傳輸。由于課題中MCU是USB主機(jī),以上簡(jiǎn)單的介紹了USB總線中的基本概念和設(shè)備枚舉過(guò)程,對(duì)這些過(guò)程的了解能夠?qū)筮吚斫夂鸵浦睻SB-HOST協(xié)議棧起到積極作用。4.1.2 PIC32MX440單片機(jī)USB外設(shè)PIC32的通用串行總線(Universal Serial Bus,USB)模塊包含模擬和數(shù)字元件, 使用最少量的外部元件即可實(shí)現(xiàn)USB2.0 全速和低速嵌入式主機(jī)、全速設(shè)
20、備或OTG操作。 在主機(jī)模式下,此模塊旨在用作嵌入式主機(jī),因此并未實(shí)現(xiàn) UHCI或OHCI 控制器。USB 模塊由時(shí)鐘發(fā)生器、USB 電壓比較器、收發(fā)器、串行接口引擎(Serial Interface Engine,SIE)、專用USB-DMA 控制器、上拉和下拉電阻以及寄存器接口組成。USB DMA 控制器在RAM 和 SIE 的數(shù)據(jù)緩沖區(qū)之間傳輸數(shù)據(jù)。集成的上拉和下拉電阻省去了對(duì)外部信號(hào)傳輸元件的需要。寄存器接口使 CPU 可以配置模塊并與模塊進(jìn)行通信。4.1.3 PIC單片機(jī)USB-HOST協(xié)議棧USB 嵌入式主機(jī)棧按實(shí)現(xiàn)邏輯分為三層,分別為應(yīng)用程序?qū)?,USB客戶機(jī)驅(qū)動(dòng)程序?qū)樱琔SB主機(jī)
21、層。USB主機(jī)層是Microchip公司提供的主機(jī)棧,是整個(gè)USB軟件協(xié)議的最低成和核心,負(fù)責(zé)PIC32-USB外設(shè)的直接控制,同時(shí)對(duì)上層的USB事務(wù)直接控制;USB客戶機(jī)驅(qū)動(dòng)程序?qū)邮轻槍?duì)于特定的USB外設(shè)的軟件層,比如U盤,USB-Serial線,USB網(wǎng)卡等設(shè)備,它們具體的USB事務(wù)傳輸時(shí)不同的,但它們都可以利用同一USB主機(jī)層軟件,應(yīng)用程序?qū)永孟旅鎯蓪犹峁┑腁PI和一些服務(wù)程序進(jìn)行操作,是用戶實(shí)現(xiàn)的具體功能。在有些情況下USB客戶機(jī)驅(qū)動(dòng)程序?qū)雍蛻?yīng)用程序?qū)涌梢院喜橐粚?,雖然犧牲了層次和可維護(hù)性但是能夠提高不少效率,在課題中,以上兩層就合并為一層。圖4.1 USB-HOST協(xié)議??傮w框圖
22、a) 應(yīng)用程序?qū)討?yīng)用程序?qū)邮菍?shí)現(xiàn)設(shè)備期望行為所必需的固件。它是由用戶設(shè)計(jì)和實(shí)現(xiàn)的代碼,應(yīng)用程序?qū)涌梢酝ㄟ^(guò)一個(gè)或多個(gè)USB客戶機(jī)驅(qū)動(dòng)程序,并在需要時(shí)使用系統(tǒng)中任何其他固件,與USB設(shè)備進(jìn)行通信。在WIFI控制系統(tǒng)中,IEEE802.11協(xié)議棧作為應(yīng)用程序?qū)?,它可以直接調(diào)用USB主機(jī)層的API進(jìn)行數(shù)據(jù)幀的傳輸。b) USB客戶機(jī)驅(qū)動(dòng)程序?qū)用總€(gè) USB 外部設(shè)備實(shí)現(xiàn)一個(gè)具體的功能,有些設(shè)備可能有多重功能。USB 客戶機(jī)驅(qū)動(dòng)程序使嵌入式主機(jī)的應(yīng)用固件能夠控制與主機(jī)相連的 USB 外部設(shè)備的單個(gè)功能。多功能設(shè)備通常將由多客戶機(jī)驅(qū)動(dòng)程序來(lái)控制??蛻魴C(jī)驅(qū)動(dòng)程序應(yīng)該以一種抽象的方式對(duì)功能建模,從而讓主機(jī)應(yīng)用不
23、需要了解設(shè)備的工作細(xì)節(jié)。在此層中,主要完成RT73模塊的初始化,以及802.11協(xié)議棧和USB主機(jī)之間的接口函數(shù)。c) USB主機(jī)層主機(jī)層是USB 的抽象,提供下列服務(wù):進(jìn)行設(shè)備標(biāo)識(shí),進(jìn)行設(shè)備枚舉,管理客戶機(jī)驅(qū)動(dòng)程序,提供與USB 外部設(shè)備進(jìn)行通信的簡(jiǎn)單接口。設(shè)備第一次連接到總線時(shí),主機(jī)層將從設(shè)備讀取描述符,以確定設(shè)備類型以及支持的功能。然后,主機(jī)層將檢查TPL 來(lái)判斷是否支持該設(shè)備。如果是支持的設(shè)備,主機(jī)層將初始化相應(yīng)的客戶機(jī)驅(qū)動(dòng)程序USB主機(jī)層主要維護(hù)了一個(gè)USB主機(jī)狀態(tài)機(jī),負(fù)責(zé)完成設(shè)備上電枚舉時(shí)的狀態(tài)遷移,以及各種USB外設(shè)事件的處理。USBHostTasks() 此函數(shù)執(zhí)行主機(jī)任務(wù)的各
24、種操作,它必須被在一定時(shí)間內(nèi)輪詢執(zhí)行,主要實(shí)現(xiàn)的功能是USB設(shè)備的枚舉,但并不執(zhí)行USB數(shù)據(jù)傳輸功能。除了維護(hù)一個(gè)USB狀態(tài)機(jī)任務(wù)外,USB主機(jī)層還提供了一些可供驅(qū)動(dòng)層和應(yīng)用層調(diào)用的API,這部分包含一系列的數(shù)據(jù)傳輸函數(shù),上層USB主機(jī)設(shè)備驅(qū)動(dòng)可以直接調(diào)用此部分的API函數(shù)。以下為重要的API傳輸控制函數(shù):a) USBHostRead() 此函數(shù)初始化一次IN事務(wù)傳輸,注意僅僅為為初始化,真正的read事務(wù)傳輸開(kāi)始是在USB中斷進(jìn)行的,因?yàn)榇藭r(shí)USB外設(shè)有可能正在進(jìn)行USB信息包的傳輸,所以不能立即開(kāi)始,此函數(shù)僅僅在端點(diǎn)描述符鏈表中查找指定的端點(diǎn)并設(shè)置其狀態(tài)為需要USB事務(wù)傳輸。b) USBH
25、ostWrite()函數(shù)進(jìn)行一次OUT事務(wù)傳輸,基本原理和USBHostRead()函數(shù)相同。c) USBHostTransferIsComplete() 此函數(shù)判斷指定端點(diǎn)的USB事務(wù)傳輸是否結(jié)束,并將端點(diǎn)狀態(tài)返回。d) USBHostSetNAKTimeout() 此函數(shù)設(shè)置指定端點(diǎn)的NAK的超時(shí)次數(shù),也就是說(shuō)如果主機(jī)連續(xù)得到了超過(guò)指定次數(shù)的NAK握手包,則指定端點(diǎn)會(huì)返回一個(gè)錯(cuò)誤狀態(tài)。此外,USB外設(shè)中斷處理程序也是主機(jī)棧重要的組成部分,此部分處理USB外設(shè)發(fā)生的所有中斷,基本的事務(wù)傳輸也是在中斷處理程序中控制的。所有的USB中斷共用一個(gè)中斷號(hào),所以中斷處理程序中需要判斷中斷的類型并合理處
26、理。中斷類型由如下幾種:1. USB設(shè)備連接中斷。2. USB設(shè)備斷開(kāi)中斷。 3.USB數(shù)據(jù)傳輸中斷(當(dāng)一次USB數(shù)據(jù)傳輸結(jié)束后觸發(fā))。 4. SOF幀中斷,正常情況下,USB主機(jī)會(huì)每隔1ms發(fā)送SOF幀,此時(shí)會(huì)產(chǎn)生中斷。4.1.3 移植總結(jié)針對(duì)于RT73模塊的USB主機(jī)棧的移植主要有以下要點(diǎn):a) 增加針對(duì)RT73模塊的USB客戶驅(qū)動(dòng)程序初始化函數(shù)和時(shí)間處理函數(shù),并將函數(shù)指針加入CLIENT_DRIVER_TABLE,這樣一旦RT73模塊連接到USB外設(shè),USB主機(jī)棧就會(huì)調(diào)用相應(yīng)的初始化函數(shù),當(dāng)有USB事件發(fā)生時(shí),會(huì)調(diào)用相應(yīng)的時(shí)間處理函數(shù)。b) 將RT73模塊的廠商ID和產(chǎn)品ID加入U(xiǎn)SB_
27、TPL(目標(biāo)外設(shè)表)中,這樣當(dāng)RT73枚舉初始化時(shí),會(huì)根據(jù)的得到設(shè)備描述符和USB_TPL中的信息進(jìn)行比對(duì)以確定是否連接的是RT73設(shè)備。c) 將802.11的事件處理函數(shù)標(biāo)利用宏定義#define USB_HOST_APP_EVENT_HANDLER標(biāo)識(shí)到USB主機(jī)棧中,當(dāng)RT73連接后,會(huì)調(diào)用802.11層的事件處理函數(shù),此時(shí)802.11層會(huì)進(jìn)行一些初始化操作。d) USB主機(jī)棧需要調(diào)用USBInitialize()函數(shù)進(jìn)行初始化,并且USBTasks()函數(shù)需要定期調(diào)用,以對(duì)設(shè)備進(jìn)行枚舉和初始化操作,這里可以選擇多種方式來(lái)定期調(diào)用,比如放在大循環(huán)中或是利用中斷定時(shí)調(diào)用。4.2 RT73
28、WIFI 無(wú)線網(wǎng)卡驅(qū)動(dòng)的編寫本節(jié)主要介紹RT73無(wú)線模塊的驅(qū)動(dòng)程序,由于RT2571主控芯片的詳細(xì)芯片資料沒(méi)有公開(kāi),所以此部分的驅(qū)動(dòng)程序主要來(lái)自于linux驅(qū)動(dòng)程序的精簡(jiǎn)和改寫,為了完成驅(qū)動(dòng)程序的編寫,需要完成三項(xiàng)主要工作:一是對(duì)IEEE802.11規(guī)范的了解和學(xué)習(xí);二是完成對(duì)RT73無(wú)線網(wǎng)卡linux驅(qū)動(dòng)程序的分析和理解,明確RT73無(wú)線網(wǎng)卡的工作流程;三是完成對(duì)RT73無(wú)線網(wǎng)卡linux驅(qū)動(dòng)的裁剪和改寫。4.2.1 IEEE802.11協(xié)議規(guī)范介紹IEEE802家族是由一系列局域網(wǎng)技術(shù)規(guī)范所組成的。802.11是其中的成員之一。802.11規(guī)范該主要定義了無(wú)線網(wǎng)絡(luò)物理層和介質(zhì)訪問(wèn)控制子層(
29、MAC)的協(xié)議規(guī)范。RT73無(wú)線網(wǎng)卡實(shí)現(xiàn)了802.11物理層和MAC層,通過(guò)USB總線提交數(shù)據(jù)是已經(jīng)處理好的數(shù)據(jù)幀,數(shù)據(jù)幀的幀頭包括RT73無(wú)線網(wǎng)卡的控制信息和802.11協(xié)議幀頭,所以802.11幀的格式是了解的重點(diǎn)。a) IEEE802.11網(wǎng)絡(luò)類型802.11無(wú)線網(wǎng)絡(luò)分為了兩種類型:一類是獨(dú)立型網(wǎng)絡(luò)(independent BSS,簡(jiǎn)稱IBSS)。在IBSS中,工作站之間可以直接通信,一般是為了特定的目的而組成的臨時(shí)性的網(wǎng)絡(luò);一類是基礎(chǔ)結(jié)構(gòu)型網(wǎng)絡(luò),這是一種最常用的組網(wǎng)方式,在基礎(chǔ)結(jié)構(gòu)型網(wǎng)絡(luò)里,工作站必須先與接入點(diǎn)建立關(guān)聯(lián),才能取得網(wǎng)絡(luò)服務(wù),也就是說(shuō),各工作之間是由接入點(diǎn)數(shù)據(jù)轉(zhuǎn)發(fā)而建立通信
30、的,無(wú)線接入點(diǎn)是基礎(chǔ)結(jié)構(gòu)型網(wǎng)絡(luò)的核心。方案采用了第二種組網(wǎng)方式,這種方式組網(wǎng)方便,程序編寫較容易。b) 802.11媒介訪問(wèn)控制層802.11標(biāo)準(zhǔn)以無(wú)線媒介在工作站之間傳遞幀,為了使多個(gè)工作站能在同一信道上同時(shí)進(jìn)行無(wú)線通信,盡量減少數(shù)據(jù)的傳輸碰撞和重試發(fā)送,防止各站點(diǎn)無(wú)序地爭(zhēng)用信道,無(wú)線局域網(wǎng)中采用了與以太網(wǎng)CSMA/CD相類似的CSMA/CA(載波監(jiān)聽(tīng)多路訪問(wèn)/沖突避免)協(xié)議。802.11標(biāo)準(zhǔn)具備兩種載波監(jiān)聽(tīng)功能:物理載波監(jiān)聽(tīng)和虛擬載波監(jiān)聽(tīng)??紤]到成本問(wèn)題,802.11芯片組廠家一般采用的是虛擬載波監(jiān)聽(tīng)技術(shù),虛擬載波監(jiān)聽(tīng)使用網(wǎng)絡(luò)分配矢量(Network Allocation Vector,簡(jiǎn)
31、稱 NAV )實(shí)現(xiàn)。NAV的實(shí)質(zhì)是一個(gè)定時(shí)器,它作為一個(gè)字段包含在802.11幀頭中,用來(lái)預(yù)定媒介使用的時(shí)間。c) 802.11MAC層幀結(jié)構(gòu)圖4.2 802.11MAC幀結(jié)構(gòu)以下詳述各字段的含義:1) Frame Control 字段此字段為幀控制字段,2個(gè)字節(jié),這個(gè)字段包含了一些幀收發(fā)時(shí)候的控制信息。2) Duration/ID 字段持續(xù)時(shí)間/標(biāo)志,2個(gè)字節(jié)。在大多數(shù)情況下,該字段被用來(lái)設(shè)定NAV。3) Address 字段地址字段包含不同類型的MAC地址,地址的類型取決于發(fā)送幀的類型。這些地址有如下不同的類型:a) 基本服務(wù)集標(biāo)識(shí)(BSSID)b) 來(lái)源地址(SA:發(fā)送數(shù)據(jù)包的MAC實(shí)體
32、的地址)c) 目的地址(DA:數(shù)據(jù)報(bào)的最終地址)d) 接收地址(RA:接收幀的AP地址)e) 發(fā)送地址(TA:發(fā)送幀的AP地址)在Frame Control中的ToDs和FromDs的位域標(biāo)識(shí)了地址字段的具體含義,如表4.1:表4.1 ToDs,F(xiàn)romDs功能表功能ToDsFromDsAddress1Address2Address3Address4IBSS00DASABSSIDN/AToAP10BSSIDSADAN/AFromAP01DABSSIDSAN/AWDS11RATADASA注:802.11幀字段一般包括三個(gè)地址段,WDS只是在有WDS擴(kuò)展功能的AP上使用,DA,代表目的地址;SA,
33、代表源地址。4) Sequence Control 字段順序控制字段,2字節(jié),由4位的片段編號(hào)(Fragment Number)和12位的順序編號(hào)(Sequence Number)組成,原來(lái)重組幀片段以及丟棄重復(fù)幀。5) Frame Body 字段此部分為幀主體,該字段內(nèi)容封裝的是上層的數(shù)據(jù)單元,長(zhǎng)度從0-2312個(gè)字節(jié),從此可以看出,802.11最大幀長(zhǎng)度為2346個(gè)字節(jié)。一些加密信息也包含在了幀主體中。d) IEEE802.11幀的分類IEEE802.11幀主要有三種類型,分別為數(shù)據(jù)幀,控制幀和管理幀。下面詳述各種幀的結(jié)構(gòu)和用途。1) 數(shù)據(jù)幀數(shù)據(jù)幀負(fù)責(zé)最主要的數(shù)據(jù)傳送工作,負(fù)責(zé)將上層協(xié)議放
34、置在幀主體中加以傳遞。2) 控制幀控制幀主要用于協(xié)助數(shù)據(jù)幀的傳遞,所有控制幀都使用相同的Frame Control 字段。3) 管理幀管理幀負(fù)責(zé)在工作站和AP之間建立初始的通信,提供認(rèn)證和連接服務(wù),包括了連接請(qǐng)求/響應(yīng)、輪詢請(qǐng)求/響應(yīng)、Beacon幀等。幾種重要的管理幀:a) Beacon(信標(biāo))幀:Beacon幀主要來(lái)聲明網(wǎng)絡(luò)的存在。定期傳送的信標(biāo)可讓移動(dòng)式工作站得知該網(wǎng)絡(luò)的存在, 從而調(diào)整加入該網(wǎng)絡(luò)所必需的參數(shù)?;A(chǔ)結(jié)構(gòu)網(wǎng)絡(luò)中,接入點(diǎn)負(fù)責(zé)傳送Beacon幀。IBSS網(wǎng)絡(luò)中,工作站輪流送出Beacon幀。b) Probe Request 幀:工作站通過(guò)Probe Request 幀來(lái)掃描所在
35、區(qū)域內(nèi)的802.11網(wǎng)絡(luò)。c) Probe Response 幀:若Probe Request 幀探查的網(wǎng)絡(luò)與之兼容,該網(wǎng)絡(luò)就會(huì)回復(fù)Probe Response 幀給予響應(yīng)。d) Disassociation 幀與Deauthentication 幀:Disassociation (取消關(guān)聯(lián))幀用來(lái)終結(jié)一段關(guān)聯(lián)關(guān)系,而Deauthentication(解除身份驗(yàn)證)幀則用來(lái)終結(jié)一段認(rèn)證關(guān)系。e) Association Request 幀:一旦工作站找到兼容網(wǎng)絡(luò)并且通過(guò)身份驗(yàn)證,便會(huì)發(fā)送Association Request(關(guān)聯(lián)請(qǐng)求) 幀以試圖加入網(wǎng)絡(luò)。f) Reassociation Re
36、quest 幀:位于相同ESS中,當(dāng)在不同的BSS之間移動(dòng)的工作站若要再次使用分布式系統(tǒng)(DS),必需與網(wǎng)絡(luò)重新關(guān)聯(lián),區(qū)別于關(guān)聯(lián)請(qǐng)求幀的是:它包含工作站當(dāng)前所關(guān)聯(lián)的接入點(diǎn)地址。g) Association Response 幀與Reassociation Response 幀:當(dāng)工作站試圖連接接入點(diǎn)時(shí),接入點(diǎn)會(huì)回復(fù)一個(gè)Association Response 幀或Reassociation Response 幀,響應(yīng)過(guò)程中,接入點(diǎn)會(huì)指定一個(gè)Association ID(關(guān)聯(lián)標(biāo)識(shí)符)。h) Authentication 幀:工作站通過(guò)共享密鑰以及Authentication 幀進(jìn)行身份驗(yàn)證。d)
37、 IEEE802.11管理操作802.11規(guī)范定義了一系列的管理操作用來(lái)實(shí)現(xiàn)對(duì)無(wú)線網(wǎng)絡(luò)的管理,基本上管理操作就是無(wú)線網(wǎng)絡(luò)設(shè)備在幕后進(jìn)行的所有操作,由此,無(wú)線網(wǎng)絡(luò)在連接感覺(jué)上就和其他類型的網(wǎng)絡(luò)沒(méi)什么兩樣。以下列出了最基本的管理操作:1) 掃描使用網(wǎng)絡(luò)之前,必須找出網(wǎng)絡(luò)的存在,在無(wú)線領(lǐng)域中,工作站要加入任何兼容網(wǎng)絡(luò)之前必須先經(jīng)過(guò)一番識(shí)別工作,在所在區(qū)域內(nèi)識(shí)別現(xiàn)有網(wǎng)絡(luò)的過(guò)程稱為掃描。掃描過(guò)程中會(huì)用到的幾個(gè)參數(shù):a) BSSType:指定網(wǎng)絡(luò)屬于IBSS、基礎(chǔ)結(jié)構(gòu)或是同時(shí)搜索兩者b) BSSID:工作站可以掃描所要加入的特定網(wǎng)絡(luò),也可掃描允許它加入的所有網(wǎng)絡(luò)c) SSID:原來(lái)指定某個(gè)ESS的位字符串
38、,這些字符串通常被設(shè)定為人們易于識(shí)別的網(wǎng)絡(luò)名稱。d) ScanType:主動(dòng)掃描會(huì)主動(dòng)傳送Probe Request幀以識(shí)別該區(qū)域的網(wǎng)絡(luò)e) 被動(dòng)掃描則是被動(dòng)聆聽(tīng)Beacon幀以節(jié)省電力f) ChannelList:進(jìn)行掃描時(shí),工作站通過(guò)指定所要嘗試的信道列表來(lái)對(duì)某個(gè)信道進(jìn)行探測(cè)或聆聽(tīng)g) ProbeDelay:主動(dòng)探測(cè)某個(gè)信道時(shí),為了避免一直等不到Probe Response 幀而設(shè)定的延時(shí)定時(shí)器,以微妙為單位h) MinChannelTime與MaxChannelTime:指在掃描每個(gè)特定信道時(shí)所使用的最小與最大的時(shí)間量2) 身份驗(yàn)證802.11規(guī)范要求工作站在傳送幀之前必須確認(rèn)身份,以取
39、得網(wǎng)絡(luò)資源的使用權(quán),當(dāng)通過(guò)了“低級(jí)”的身份驗(yàn)證后,才能進(jìn)行高級(jí)的802.1X身份驗(yàn)證。這里所謂的“低級(jí)”是指比較初步的身份驗(yàn)證,規(guī)范定義了如下幾種“低級(jí)”身份驗(yàn)證方法:a) 開(kāi)放系統(tǒng)身份驗(yàn)證,這種驗(yàn)證方案是802.11要求必備的唯一方法,開(kāi)放系統(tǒng)身份驗(yàn)證,僅僅是一種一問(wèn)一答的握手過(guò)程,所以只是一種網(wǎng)絡(luò)身份的初步表明。這種認(rèn)證方法包含了兩個(gè)管理幀,首先由移動(dòng)工作站發(fā)送authentication(身份驗(yàn)證)的管理幀,它的作用是發(fā)出身份驗(yàn)證請(qǐng)求。無(wú)線接入點(diǎn)收到此管理幀后,發(fā)出同類型的管理幀,回應(yīng)身份驗(yàn)證的請(qǐng)求。b) 舊式的共享密鑰身份驗(yàn)證,此種認(rèn)證方法,必須使用WEP的加密方式,因此只能用于實(shí)現(xiàn)了
40、WEP的產(chǎn)品上,共享密鑰身份驗(yàn)證要求在身份驗(yàn)證之前,必須傳遞共享密鑰給工作站。3) 關(guān)聯(lián)操作一旦完成身份驗(yàn)證,工作站就可以跟接入點(diǎn)進(jìn)行關(guān)聯(lián),以便獲得網(wǎng)絡(luò)的完全訪問(wèn)權(quán)。關(guān)聯(lián)只限于infrastructure(基礎(chǔ)結(jié)構(gòu)型)網(wǎng)絡(luò),在邏輯上等同于在有線網(wǎng)絡(luò)中插入網(wǎng)線,一旦完成此過(guò)程,無(wú)線工作站就可以通過(guò)分布式系統(tǒng)與整個(gè)世界連接。和身份驗(yàn)證一樣,關(guān)聯(lián)操作是由移動(dòng)式工作站發(fā)起的。關(guān)聯(lián)過(guò)程涉及三個(gè)步驟:首先移動(dòng)工作站發(fā)送Association Request(關(guān)聯(lián)請(qǐng)求)幀。然后接入點(diǎn)隨后會(huì)對(duì)關(guān)聯(lián)請(qǐng)求進(jìn)行處理,最后接入點(diǎn)開(kāi)始為移動(dòng)工作站處理幀數(shù)據(jù)。4.2.2 RT73無(wú)線網(wǎng)卡linux驅(qū)動(dòng)分析由于沒(méi)有RT73
41、無(wú)線網(wǎng)卡的詳細(xì)資料手冊(cè),所以需要分析RT73的linux驅(qū)動(dòng)程序來(lái)明確RT2571基帶處理芯片的初始化過(guò)程,和詳細(xì)的工作流程。代碼分析的重點(diǎn)在于網(wǎng)卡的初始化過(guò)程和TCP/IP數(shù)據(jù)包的封裝和通過(guò)USB的發(fā)送過(guò)程。a) 網(wǎng)卡初始化代碼分析Linux驅(qū)動(dòng)以內(nèi)核模塊的方式裝載到內(nèi)核中,RT73網(wǎng)卡驅(qū)動(dòng)也不例外。模塊一般由module_init作為入口,module_exit作為出口。Module_init將RT73網(wǎng)卡驅(qū)動(dòng)注冊(cè)到內(nèi)核中,以下的結(jié)構(gòu)體會(huì)被注冊(cè)到內(nèi)核中。功能函數(shù)也會(huì)被內(nèi)核識(shí)別。struct usb_driver rtusb_driver = .name=rt73,/ 網(wǎng)卡驅(qū)動(dòng)標(biāo)識(shí).prob
42、e=usb_rtusb_probe,/ RT73連接時(shí)調(diào)用的函數(shù).disconnect=usb_rtusb_disconnect,/ RT73斷開(kāi)時(shí)調(diào)用的函數(shù).id_table=rtusb_usb_id,/ USB驅(qū)動(dòng)支持的設(shè)備列表#ifdef CONFIG_PM.suspend = rt73_suspend,/ 電源管理相關(guān)函數(shù).resume = rt73_resume,#endif;當(dāng)RT73模塊連接后,內(nèi)核會(huì)調(diào)用響應(yīng)的usb_rtusb_probe函數(shù)來(lái)完成網(wǎng)卡的探測(cè)和初始化。Usb_rtusb_probe函數(shù)會(huì)對(duì)網(wǎng)卡進(jìn)行初始化,并將一些網(wǎng)絡(luò)操作函數(shù)注冊(cè)到內(nèi)核,所以probe函數(shù)是理解網(wǎng)
43、卡工作流程的關(guān)鍵,以下是probe函數(shù)的流程圖:圖 4.3 probe函數(shù)流程圖VID和PID是USB設(shè)備的廠商ID和產(chǎn)品ID,USB設(shè)備進(jìn)行枚舉后得到設(shè)備描述符包含有VID和PID,驅(qū)動(dòng)程序會(huì)根據(jù)VID和PID來(lái)判斷是否支持當(dāng)前插入的設(shè)備。PRTMP_ADAPTER是無(wú)線網(wǎng)卡的核心結(jié)構(gòu),包含了網(wǎng)絡(luò)驅(qū)動(dòng)層所需要的一切信息,如果需要一些設(shè)備信息,只需得到PRTMP_ADAPTER的指針即可。網(wǎng)絡(luò)操作函數(shù)注冊(cè)到內(nèi)核后,內(nèi)核就可以使用網(wǎng)絡(luò)驅(qū)動(dòng)程序提供的一系列的服務(wù),usb_rtusb_sendpkt此函數(shù)很重要,當(dāng)有網(wǎng)絡(luò)數(shù)據(jù)包發(fā)送時(shí)會(huì)調(diào)用此函數(shù)。usb_rtusb_init_device函數(shù)是RT7
44、3模塊真正的初始化過(guò)程,一些配置信息和核心線程都是在這個(gè)函數(shù)中實(shí)現(xiàn)的。usb_rtusb_init_device函數(shù)實(shí)現(xiàn)了網(wǎng)卡具體的初始化過(guò)程。課題關(guān)注的是網(wǎng)卡的初始化過(guò)程,網(wǎng)卡的基帶芯片是一個(gè)8051核的微控制器,為了保證處理速度,網(wǎng)卡的內(nèi)置程序并沒(méi)有固化在基帶芯片中,而是需要在每一次上電后由USB的Control傳輸下載到基帶芯片中的SRAM中,所以網(wǎng)卡初始化的第一步就是下載固化程序,而基帶芯片的工作狀態(tài)和配置信息都存放在特定的控制寄存器中,所以控制寄存器也是初始化的重點(diǎn)。圖4.4 網(wǎng)卡初始化流程圖RTUSBBulkRxHandle函數(shù)處理收到的802.11數(shù)據(jù)包并進(jìn)行初步處理,當(dāng)收到數(shù)據(jù)
45、包后,隨即將此函數(shù)作為tasklet被調(diào)度,在系統(tǒng)某個(gè)特定的安全事件運(yùn)行在軟件中斷的執(zhí)行現(xiàn)場(chǎng)。無(wú)線網(wǎng)卡的配置信息一般來(lái)自于用戶的配置文件,當(dāng)然也會(huì)有一些默認(rèn)的配置。在網(wǎng)卡初始化時(shí),這些配置信息會(huì)被引用。無(wú)論是發(fā)送和接收網(wǎng)卡驅(qū)動(dòng)都實(shí)現(xiàn)了一些數(shù)據(jù)結(jié)構(gòu)來(lái)維護(hù)需要發(fā)送的數(shù)據(jù),這樣可以保證數(shù)據(jù)發(fā)送的輕重緩急,更有效的進(jìn)行數(shù)據(jù)通信。RT2571硬件初始化部分是關(guān)注的重點(diǎn),當(dāng)采用MCU驅(qū)動(dòng)無(wú)線網(wǎng)卡時(shí),同樣需要進(jìn)行硬件的初始化操作,所以這部分的流程是一樣的。Mlme線程用于連接路由的操作,本身是一個(gè)復(fù)雜的狀態(tài)機(jī),Cmd線程是命令隊(duì)列線程,這個(gè)線程會(huì)將用戶的操作轉(zhuǎn)換為命令發(fā)送到Mlme線程中,來(lái)改變網(wǎng)絡(luò)運(yùn)行狀態(tài)
46、。RT73無(wú)線網(wǎng)卡的數(shù)據(jù)發(fā)送和接受流程,如圖4.5圖4.5 數(shù)據(jù)發(fā)送流程圖在usb的probe函數(shù)里,會(huì)初始化發(fā)送和接收相關(guān)的數(shù)據(jù)結(jié)構(gòu):1.NICInitTransmit 2.NICInitRecv。驅(qū)動(dòng)程序?qū)崿F(xiàn)了幾個(gè)發(fā)送隊(duì)列,當(dāng)內(nèi)核調(diào)用網(wǎng)卡的發(fā)送函數(shù)后,送入的skb網(wǎng)絡(luò)數(shù)據(jù)將被傳入不同的發(fā)送隊(duì)列,這里的發(fā)送函數(shù)本身是異步的,是可以被內(nèi)核重入的,也就是說(shuō)操作系統(tǒng)中運(yùn)行的不同函數(shù)有可能會(huì)“同時(shí)”調(diào)用發(fā)送函數(shù),所以這些由內(nèi)核發(fā)送來(lái)的skb數(shù)據(jù)包就會(huì)安放在發(fā)送隊(duì)列里等待發(fā)送,由上流程圖可以看出,每次skb數(shù)據(jù)包放入發(fā)送隊(duì)列后,隨即調(diào)用出列函數(shù)RTMPDeQueuePacket,此函數(shù)除了直接被RTM
47、PSendPacket函數(shù)調(diào)用外,還會(huì)被發(fā)送完成的回調(diào)函數(shù)調(diào)用,來(lái)檢測(cè)是否有未發(fā)送完的數(shù)據(jù)。以上是典型的多任務(wù)處理機(jī)制。這里比較重要的函數(shù)是RTUSBHardTransmit函數(shù),此函數(shù)完成了802.11幀頭,和RT73發(fā)送描述符的封裝,也就是說(shuō)要搞清楚RT73無(wú)線網(wǎng)卡的工作原理,這個(gè)函數(shù)提供了詳細(xì)的信息。 RTUSBHardTransmit函數(shù)會(huì)根據(jù)上層的信息決定如何封裝802.11幀頭和發(fā)送描述符幀頭。_TXD_STRUC結(jié)構(gòu)體說(shuō)明了RT73發(fā)送描述符,RT73發(fā)送描述符一共占用6個(gè)字節(jié),它處于整個(gè)發(fā)送幀的最前面。發(fā)送描述符描述了此發(fā)送幀對(duì)RT2571基帶芯片具體的發(fā)送要求,基帶芯片會(huì)根據(jù)
48、發(fā)送描述符改變發(fā)送狀態(tài),最終將數(shù)據(jù)幀發(fā)送出去,重要的位說(shuō)明:MoreFrag位,是否有更多的數(shù)據(jù)片等待發(fā)送,對(duì)于超過(guò)802.11最大幀長(zhǎng)度的數(shù)據(jù)幀,需要將數(shù)據(jù)幀分成片。不過(guò)一般而言上層的TCP/IP協(xié)議可以設(shè)置網(wǎng)絡(luò)包最大長(zhǎng)度,所以可以將TCP/IP包最大長(zhǎng)度設(shè)置為一個(gè)802.11數(shù)據(jù)幀最大長(zhǎng)度之內(nèi),這樣就消除了數(shù)據(jù)分片的可能性。ACK 位,是否需要ACK應(yīng)答,因?yàn)闊o(wú)線媒介的不確定性,一般都需要進(jìn)行應(yīng)答。DataByteCnt 域,指明數(shù)據(jù)幀的長(zhǎng)度。CipherAlg 域,指明此幀的加密方式,根據(jù)加密方式的不同,基帶芯片會(huì)進(jìn)行不同的加密處理。接收數(shù)據(jù)流程:圖4.6 接收數(shù)據(jù)流程圖接收過(guò)程,采用了
49、tasklet 機(jī)制,這是一種比較常見(jiàn)的機(jī)制,通常用于減少中斷處理的時(shí)間,為了最大程度的避免中斷處理時(shí)間過(guò)長(zhǎng)而導(dǎo)致中斷丟失,有時(shí)候內(nèi)核需要把一些在中斷處理中不是非常緊急的任務(wù)放在后面執(zhí)行,而讓中斷處理程序盡快返回將本應(yīng)該是在中斷服務(wù)程序中完成的任務(wù)轉(zhuǎn)化成軟中斷完成。當(dāng)RT73網(wǎng)卡連接上時(shí),內(nèi)核調(diào)用probe函數(shù)時(shí)裝載了RTUSBBulkRxHandle軟中斷例程,這個(gè)軟中斷會(huì)在系統(tǒng)空閑的時(shí)候運(yùn)行,隨后RTUSBBulkRxHandle接收參數(shù)pAd,這個(gè)指針指向了包含了網(wǎng)卡的信息的關(guān)鍵數(shù)據(jù)結(jié)構(gòu)PRTMP_ADAPTER,由這個(gè)數(shù)據(jù)接收可以獲得任何信息,也包括現(xiàn)在正在進(jìn)行BULK-IN的urb的
50、信息,這里可以判斷正在進(jìn)行的urb數(shù)據(jù)請(qǐng)求已啟動(dòng),如果已啟動(dòng)這時(shí)需調(diào)用RTUSBBulkRcecive函數(shù)進(jìn)行實(shí)際的urb傳輸,反之,如果urb已完成,則需調(diào)用RTUSBRxPacket函數(shù)進(jìn)行802.11協(xié)議棧的處理,并將處理后的數(shù)據(jù)包傳送到網(wǎng)絡(luò)系統(tǒng)的上層,通常是TCP/IP層,這里RTUSBRxPacket完畢后再調(diào)用urb傳輸。Urb傳輸完畢后,內(nèi)核會(huì)調(diào)用RTUSBBulkRxComplete函數(shù),此函數(shù)會(huì)檢測(cè)此次urb是否成功,然后重新裝載tasklet。由上圖可以看出,接收流程圖是一個(gè)封閉的回路,一旦開(kāi)始接收例程后,接收操作就不會(huì)停止,在接收的上下文中會(huì)進(jìn)行802.11協(xié)議棧的處理,
51、所以RTUSBRxPacket是重要的處理函數(shù)。另外兩個(gè)核心的內(nèi)核線程MLMEthread和CMDthread主要是完成一些管理操作,這里不去深究,因?yàn)檎n題主要的目標(biāo)是實(shí)現(xiàn)底層的通信移植。4.2.3 RT73無(wú)線網(wǎng)卡驅(qū)動(dòng)的裁剪和改寫本節(jié)進(jìn)行RT73單片機(jī)驅(qū)動(dòng)程序的具體移植,目標(biāo)如下:a) 實(shí)現(xiàn)對(duì)RT73無(wú)線網(wǎng)卡的初始化操作,進(jìn)行基本設(shè)置并讀取MAC地址。b) 實(shí)現(xiàn)RT73無(wú)線網(wǎng)卡基本數(shù)據(jù)幀的收發(fā)操作,對(duì)一些重要而根本的802.11幀進(jìn)行解析。c) 實(shí)現(xiàn)RT73模塊連接無(wú)線AP的功能( AP模式為不需加密,不需802.1X認(rèn)證)。RT73無(wú)線網(wǎng)卡驅(qū)動(dòng)程序整體結(jié)構(gòu):整個(gè)軟件分為底層的USB部分和8
52、02.11協(xié)議處理部分,USB部分主要處理RT73無(wú)線網(wǎng)卡的初始化和BULK數(shù)據(jù)傳輸,802.11部分處理和整個(gè)協(xié)議相關(guān)的功能,主要有連接AP和封裝數(shù)據(jù)幀的功能。根據(jù)802.11無(wú)線網(wǎng)絡(luò)的工作方式,可以建立如下的狀態(tài)機(jī)模型:enum RT73_S_BROKEN,RT73_S_IDLE,RT73_S_SCAN,RT73_S_CONNECTING,RT73_S_CONNECTED,RT73_S_MASTER,;默認(rèn)情況下,剛剛初始化完畢的驅(qū)動(dòng)程序處于IDLE狀態(tài),此時(shí)用戶發(fā)出一個(gè)SCAN指令,此時(shí)PIC32會(huì)發(fā)出probe requset幀,無(wú)線AP收到probe幀后,會(huì)返回probe respo
53、nse幀,當(dāng)收到需要連接到的AP的response幀后,PIC32會(huì)發(fā)出association request幀,相應(yīng)的AP會(huì)發(fā)出association response 幀,PIC32收到response幀后轉(zhuǎn)為CONNECTED狀態(tài)。下面分述具體的代碼部分:a) RT73無(wú)線網(wǎng)卡初始化RT73的初始化如下流程圖:圖4.7 單片機(jī)RT73熱插拔流程圖RT73初始化在USB任務(wù)的中斷上下文中進(jìn)行,USBTask 被系統(tǒng)每隔一段段時(shí)間輪詢調(diào)用,當(dāng)系統(tǒng)檢測(cè)到USB連接中斷時(shí),會(huì)通知USBTask進(jìn)行設(shè)備枚舉操作,USBTask會(huì)獲得USB設(shè)備的描述符信息,進(jìn)行VID和PID比對(duì)后,此時(shí)確認(rèn)為RT7
54、3無(wú)線網(wǎng)卡,然后USBTask會(huì)回調(diào)RT73驅(qū)動(dòng)程序的初始化例程,開(kāi)始網(wǎng)卡芯片的初始化。圖4.8 單片機(jī)網(wǎng)卡初始化流程圖RT73Setup 進(jìn)行RT2571基帶芯片本身初始化,包括固件下載,這里的固件是被放在一個(gè)const型的數(shù)組中的,所以直接調(diào)用此數(shù)組發(fā)送到RT2571芯片即可;等待基帶芯片正常運(yùn)行,通過(guò)反復(fù)檢測(cè)一個(gè)狀態(tài)寄存器進(jìn)行;初始化基帶芯片控制寄存器為默認(rèn)值。RT73SetupEEprom 進(jìn)行eeprom中的默認(rèn)配置的讀取,其中就包括了射頻芯片信息的讀取,每個(gè)信道發(fā)射功率的配置,MAC地址等信息。rt2501_switch_channel 進(jìn)行初步的信道選擇,不進(jìn)行此步驟也可以,這僅
55、僅用來(lái)測(cè)試。ieee80211_init 802.11協(xié)議棧的初始化。b) 802.11幀數(shù)據(jù)的發(fā)送根據(jù)802.11幀的類型的不同,可以分為控制幀,管理幀,和數(shù)據(jù)幀,其中管理幀和數(shù)據(jù)幀是必須使用到的,所以驅(qū)動(dòng)程序必須實(shí)現(xiàn)對(duì)管理幀和數(shù)據(jù)幀的處理。而控制幀主要用來(lái)對(duì)數(shù)據(jù)的分片和RTS,CTS進(jìn)行處理這部分對(duì)于簡(jiǎn)單的通信來(lái)講是不需要的,所以并沒(méi)有實(shí)現(xiàn)控制幀的處理。802.11數(shù)據(jù)幀發(fā)送的一般流程:圖4.9 802.11幀發(fā)送過(guò)程上層封裝好的數(shù)據(jù)包一般是以太網(wǎng)數(shù)據(jù)包,因?yàn)樯蠈右话闶且粋€(gè)TCP/IP協(xié)議棧,故這里需要對(duì)以太網(wǎng)數(shù)據(jù)包進(jìn)行轉(zhuǎn)換,首先需去掉以太網(wǎng)幀頭,只保留IP包數(shù)據(jù),然后根據(jù)此時(shí)連接的模式和
56、網(wǎng)絡(luò)配置進(jìn)行對(duì)802.11幀頭的封裝,802.11幀頭比較重要的有兩個(gè)域,一是加密模式,因?yàn)榧用苣J降牟煌瑫?huì)影響許多域的設(shè)置,這里只實(shí)現(xiàn)了簡(jiǎn)單的無(wú)加密模式的封裝方式,二是地址域的裝填,addr1裝填關(guān)聯(lián)到的路由的MAC地址,addr2裝填RT73無(wú)線網(wǎng)卡的MAC地址(源地址),addr3裝填以太幀中的目的地址。除裝填802.11協(xié)議幀頭外,還需裝填基帶處理芯片的發(fā)送描述符,對(duì)于精簡(jiǎn)的驅(qū)動(dòng)程序而言,如果選擇無(wú)加密模式,需要設(shè)置的發(fā)送描述域較少,而且一些域比較固定。將所有數(shù)據(jù)裝填好后,就可以調(diào)用USB發(fā)送函數(shù)發(fā)送數(shù)據(jù)了,真正的發(fā)送過(guò)程在中斷中啟動(dòng),并在中斷中確認(rèn)結(jié)束,這里可以選用兩種方案進(jìn)行USB
57、發(fā)送過(guò)程,一種是等待USB發(fā)送過(guò)程的結(jié)束,一種是發(fā)送完畢后通知主程序。第一種方案效率比較低,第二種方案的軟件編寫較復(fù)雜,所以后面具體實(shí)現(xiàn)時(shí)采用了RTOS的方法。c) 802.11幀數(shù)據(jù)的接收和數(shù)據(jù)幀的發(fā)送相比,數(shù)據(jù)幀的接收比較復(fù)雜,因?yàn)閿?shù)據(jù)幀的發(fā)送本質(zhì)上是異步的,當(dāng)有數(shù)據(jù)幀需要發(fā)送時(shí),隨即調(diào)用發(fā)送函數(shù)將數(shù)據(jù)幀發(fā)送出去,而數(shù)據(jù)幀的接收本質(zhì)是一個(gè)中斷的過(guò)程,而USB總線的特點(diǎn)是主機(jī)輪詢,所以當(dāng)有數(shù)據(jù)幀放入基帶芯片的緩沖區(qū)中時(shí),基帶芯片不能主動(dòng)通知PIC32,而需要PIC32主動(dòng)試探,當(dāng)沒(méi)有數(shù)據(jù)時(shí),基帶芯片返回NAK握手包,直到有數(shù)據(jù)才返回?cái)?shù)據(jù),這樣PIC32的輪詢頻率就是一個(gè)關(guān)鍵的變量,輪詢的時(shí)間間隔不能過(guò)小,過(guò)小會(huì)導(dǎo)致CPU負(fù)荷較重,也不能間隔過(guò)大,過(guò)大會(huì)使數(shù)據(jù)通信延遲變大,綜合考慮將BULK-IN,傳輸設(shè)置為1ms進(jìn)行一次,也就是每次sof包后立即進(jìn)行一次BULK-IN傳輸。當(dāng)有數(shù)據(jù)時(shí)隨即進(jìn)行讀入,當(dāng)收到NAK握手包時(shí),等待下一次sof包后進(jìn)行BULK-IN傳輸。具體的接收流程如圖4.10:圖4.10 802.11幀接收過(guò)程當(dāng)經(jīng)過(guò)802.11協(xié)議棧處理后,如果是管理幀,則我們直接進(jìn)行管理幀的封裝然后發(fā)送出去進(jìn)行響應(yīng),當(dāng)是網(wǎng)絡(luò)數(shù)據(jù)包時(shí),需要將數(shù)據(jù)包暫存起來(lái)然后經(jīng)由TCP/IP層協(xié)議處
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 房地產(chǎn)經(jīng)紀(jì)合同范本-合同樣本
- 咨詢機(jī)構(gòu)合作契約
- 工業(yè)品購(gòu)銷合同示例
- 2024年賣房獨(dú)家委托合同范本
- 編寫戶外活動(dòng)安全協(xié)議書的注意事項(xiàng)
- 企業(yè)車輛租賃合同
- 家庭年度裝修合同樣本
- 2024農(nóng)村土地流轉(zhuǎn)合同
- 房地產(chǎn)合同樣本
- 小吃連鎖加盟協(xié)議書
- 中國(guó)近代史綱要試題及答案(全套)
- 期中測(cè)試卷(1-3單元)(試題)-2024-2025學(xué)年蘇教版數(shù)學(xué)六年級(jí)上冊(cè)
- 部編版二年級(jí)上冊(cè)-課文一-快樂(lè)讀書吧:讀讀童話故事-孤獨(dú)的小螃蟹(課件)(共26張課件)
- 大數(shù)據(jù)與人工智能營(yíng)銷智慧樹(shù)知到期末考試答案章節(jié)答案2024年南昌大學(xué)
- 鐵路學(xué)生職業(yè)規(guī)劃書
- GB/T 31326-2014植物飲料
- 高層次引進(jìn)人才考核表
- 世界地圖各州地圖匯總,下載后可放大
- 北師大版一年級(jí)上冊(cè)看圖寫話范文
- 電氣安裝工程施工進(jìn)度計(jì)劃網(wǎng)絡(luò)圖【完整版】
- 江西省地礦局發(fā)展規(guī)劃(1-28)
評(píng)論
0/150
提交評(píng)論