當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]ucos WiFi網(wǎng)卡驅(qū)動(dòng)程序的開發(fā)

嵌入式系統(tǒng)是設(shè)計(jì)完成復(fù)雜功能的硬件和軟件,并使其緊密耦合在一起的計(jì)算機(jī)系統(tǒng)。目前,嵌入式系統(tǒng)已經(jīng)存在于各種數(shù)據(jù)采集、工業(yè)控制、娛樂(lè)、通信等應(yīng)用領(lǐng)域。在一些應(yīng)用場(chǎng)合,需要嵌入式設(shè)備具有與其它系統(tǒng)交換信息的能力,因此必須為嵌入式系統(tǒng)增加通信功能。通信功能的實(shí)現(xiàn)可以采用很多方式,例如以太網(wǎng),ADSL,GPRS以及其它方式。在一個(gè)嵌入式終端中使用WiFi網(wǎng)卡,實(shí)現(xiàn)無(wú)線網(wǎng)絡(luò)通信的功能是一種較新的通信方式。由于在uCOS實(shí)時(shí)操作系統(tǒng)中還沒(méi)有WiFi的驅(qū)動(dòng)程序,因此下面將介紹WiFi的驅(qū)動(dòng)程序的編寫。


1 WiFi介紹

WiFi(Wireless Fidelity),又稱802.1lb標(biāo)準(zhǔn),IEEE于1997年6月批準(zhǔn)了該標(biāo)準(zhǔn)。802.11標(biāo)準(zhǔn)的體系結(jié)構(gòu)組成包括:無(wú)線站點(diǎn)STA(Station),無(wú)線接入點(diǎn)AP(Access Point),獨(dú)立基本服務(wù)組IBSS(Independent Basic Service Set),基本服務(wù)組BSS(BasicService Set),分布式系統(tǒng)DS(Distribution System)和擴(kuò)展服務(wù)組ESS(Extended Service Set).

該標(biāo)準(zhǔn)定義了兩種工作模式:ad hoc模式和infrastructure模式。ad hoc即對(duì)點(diǎn)模式,包含兩個(gè)無(wú)線站點(diǎn)(STA,即帶無(wú)線網(wǎng)卡的設(shè)備)。而infrastructure即AP模式,無(wú)線站點(diǎn)(STA)通過(guò)AP與現(xiàn)有的骨干網(wǎng)相連接,組成一個(gè)基本服務(wù)組(BSS)。在BSS中,AP不僅提供STA之間通信的橋接功能,還提供STA與有線局域網(wǎng)的連接,可以實(shí)現(xiàn)有線Hub幾乎所有的功能。


2 嵌入式終端系統(tǒng)結(jié)構(gòu)


2.1 硬件結(jié)構(gòu)

嵌入式終端硬件系統(tǒng)(如圖1所示)以Philips公司的LPC2210嵌入式處理器為核心,LPC2210是基于16/32位ARM7TDMI-S,并支持實(shí)時(shí)仿真和跟蹤的CPU。LPC2210的數(shù)據(jù)和地址總線是開放的,片內(nèi)有16K字節(jié)的RAM。嵌入式終端需要較大存儲(chǔ)空間運(yùn)行實(shí)時(shí)操作操作系統(tǒng)、TCP/IP協(xié)議、圖形用戶界面(GUI)、串口驅(qū)動(dòng)程序、WiFi驅(qū)動(dòng)程序、英文及漢字字庫(kù)等,因此在外部擴(kuò)展了一片容量為256K×16的靜態(tài)RAM 1S61LV25616及一片容量為1M×16的Flash 39VF160。為了方便調(diào)試程序,使用了LPC2210的串口診斷程序的運(yùn)行結(jié)果。

 

圖1 嵌入式終端的硬件結(jié)構(gòu)

系統(tǒng)中選擇了使用Prism 2芯片的網(wǎng)卡,型號(hào)為COMPAQ NC5004,支持IEEE802.11b,最高速率為11Mb/s.網(wǎng)卡的物理驅(qū)動(dòng)接口為PCMCIA,供電電壓為3.3V.由于LPC2210沒(méi)有PCMCIA控制器,因此LPC2210與NC5004的PCMCIA 接口是通過(guò)LPC2210的通用端口連接的,總線時(shí)序通過(guò)軟件仿真來(lái)完成,即PCMCIA接口的驅(qū)動(dòng)程序。

PCMCIA總線有控制線、數(shù)據(jù)線、地址線、電源線。其中數(shù)據(jù)線寬度可選為16位或8位,NC5004的數(shù)據(jù)線寬度是16位的,即D15~D0。地址線寬度為26位,但在WiFi網(wǎng)卡中只須用10位地址線A9~A0。WiFi網(wǎng)卡的PCMCIA 的控制線有10根,其中RESET為復(fù)位,該線為低電平時(shí)網(wǎng)卡回到初始狀態(tài)。CE1,CE2為卡的地址控制,當(dāng)CE1,CE2為低時(shí),分別表示偶地址和奇地址的字節(jié)有效。OE,WE分別為Memory空間的讀寫控制線,IORD,IOWR為I/O空間的讀寫控制線,均為低電平有效。REG用于選擇地址訪問(wèn)空間,包括I/O空間和存儲(chǔ)器空間。IREQ提示處理器處理網(wǎng)卡的內(nèi)部事件,可以不用。在對(duì)網(wǎng)卡進(jìn)行讀寫僮魘保?揮械盚WAIT變高表示讀或?qū)懙臄?shù)據(jù)進(jìn)入存儲(chǔ)器,才能進(jìn)行下一步總線操作。


2.2 軟件結(jié)構(gòu)

嵌入式終端的軟件系統(tǒng)(如圖2所示)包括實(shí)時(shí)操作系統(tǒng)、PCMCIA驅(qū)動(dòng)程序、WiFi網(wǎng)卡驅(qū)動(dòng)程序、TCP/IP協(xié)議、串口驅(qū)動(dòng)程序、圖形界面等。本系統(tǒng)中的實(shí)時(shí)操作系統(tǒng)vCOS II是一個(gè)公開源代碼、結(jié)構(gòu)小巧、具有可剝奪實(shí)時(shí)內(nèi)核的實(shí)時(shí)操作系統(tǒng)。最多可以支持64個(gè)任務(wù),分別對(duì)應(yīng)優(yōu)先級(jí)0~63,其中0為最高優(yōu)先級(jí)。vCOS需要移植才能用于不同的處理器平臺(tái),移植需要改寫的文件:OS_CPU.H,OS_CPU_A.S,OS_CPU_C.C.對(duì)于LPC2210嵌入式處理器,廠家的技術(shù)支持一般提供了該型號(hào)處理器的這三個(gè)移植文件,將這三個(gè)文件代替原文件即可使用。

 

圖2 嵌入式終端的軟件結(jié)構(gòu)

但uCOS II缺少對(duì)外圍設(shè)備和接口的支持,如沒(méi)有文件系統(tǒng)、網(wǎng)絡(luò)協(xié)議、圖形界面。在廠家提供的開發(fā)資料中有其自行開發(fā)的TCP/IP協(xié)議和串口驅(qū)動(dòng)程序。但該TCP/IP協(xié)議是與以太網(wǎng)卡驅(qū)動(dòng)程序接口的,因此在該TCP/IP協(xié)議中,需要修改與網(wǎng)卡接口的API函數(shù)。其余的PCMCIA驅(qū)動(dòng)程序、WiFi網(wǎng)卡驅(qū)動(dòng)程序需要自己進(jìn)行編寫。


3 驅(qū)動(dòng)程序的編寫


3.1 PCMCIA驅(qū)動(dòng)程序

PCMCIA 驅(qū)動(dòng)程序包括五個(gè)主要函數(shù),分別是initPCMCIAPorts(),pcmcia_WriteMem(),pcmcia_WriteReg(),pcmcia_ReadMem (),pcmcia_Read_Reg()。initPCMCIAPorts()函數(shù)用于PCMCIA設(shè)備的復(fù)位,其作用是通過(guò)控制RESET復(fù)位線為低電平,延遲一段時(shí)間以后,再恢復(fù)為高電平。

PCMCIA設(shè)備內(nèi)部空間分為Memory空間和I/O空間,對(duì)Memory空間讀寫分別為pcmcia_ReadMem(),pcmcia_WriteMem(),而I/O空間的讀寫為pcmcia_ReadReg(),pcmcia_WriteReg().這幾個(gè)函數(shù)區(qū)別在于控制線WE,OE,IORD,IOWR的操作不一樣。

PCMCIA驅(qū)動(dòng)程序函數(shù)按照PCMCIA時(shí)序設(shè)置LPC2210相應(yīng)的通用端口。PCMCIA總線的工作時(shí)序是這樣,首先在地址線上設(shè)置數(shù)據(jù)地址,并將CE1,CE2設(shè)為低電平,然后REG設(shè)為低電平將地址鎖存。接下來(lái)進(jìn)行讀或?qū)懖僮?,讀操作中,Memory空間和I/O空間的讀操作分別將OE,IORD設(shè)為低電平,然后等待HWAIT變?yōu)楦唠娖?。HWAIT變?yōu)楦唠娖胶?,將?shù)據(jù)線上的狀態(tài)讀入。寫操作中,首先按照待寫數(shù)據(jù)設(shè)置數(shù)據(jù)線上的狀態(tài),然后Memory空間的寫操作和I/O空間的寫操作分別將WE,IOWE設(shè)置為低電平。接下來(lái),HWAIT變?yōu)楦唠娖胶笳f(shuō)明數(shù)據(jù)已經(jīng)寫入。在讀寫操作完成以后,依次將OE或者IORD(讀操作),WE或者IOWR(寫操作),CE2,CE1,REG恢復(fù)為高電平。


3.2 網(wǎng)卡驅(qū)動(dòng)程序

Prism 2網(wǎng)卡內(nèi)部操作是封閉的,外部對(duì)其操作都是通過(guò)存儲(chǔ)器操作完成的,Memory空間的存儲(chǔ)器有COR(Configuration Option Register)寄存器,I/O空間的存儲(chǔ)器有BAP(Baffuer Access Path)寄存器,命令/狀態(tài)寄存器,F(xiàn)ID管理寄存器,事件寄存器,控制寄存器,主機(jī)軟件寄存器,輔助端口寄存器等,這些寄存器的含義及偏移地址見文獻(xiàn)[2].LPC2210管理、配置網(wǎng)卡的數(shù)據(jù)項(xiàng)都是加載一個(gè)特定的RID(Resource IDentifiers)到BAP寄存器,讀取或者寫入一個(gè)特定的緩沖區(qū)。WiFi網(wǎng)卡驅(qū)動(dòng)程序中的函數(shù)功能都是通過(guò)訪問(wèn)這些存儲(chǔ)器完成的,下面將介紹這些API函數(shù)的功能。

wlandrv_ProbeDevice()函數(shù)用于檢測(cè)網(wǎng)卡是否存在,函數(shù)首先訪問(wèn)COR寄存器,設(shè)置網(wǎng)卡進(jìn)入I/O模式,設(shè)置操作屬于Memory空間的讀寫操作。然后,使用pcmcia_WriteReg()函數(shù)寫一個(gè)值到地址為0x28的寄存器中,再用pcmcia_ReadReg()函數(shù)讀取這個(gè)寄存器的值,與原來(lái)的值相比較,如果值相同,則說(shuō)明網(wǎng)卡是存在的:[!--empirenews.page--]

wlandrv_ProbeDevice(void){

pcmcia_WriteMem(WI_COR_OFFSET,WI_COR_VALUE);//進(jìn)入I/O模式

pcmcia_WriteReg(WI_HFA384X_SWSUP_PORT0_OFF,WI_PRISM2STA_MAGIC);

Value=pcmcia_ReadReg(WI_HFA384X_SWSUPPORT0_OFF);

if(Value==WI_PRISM2STA_MAGIC){

已找到網(wǎng)卡,此處做相應(yīng)處理

}

}

wlandrv_Attach()函數(shù)用于讀取網(wǎng)卡內(nèi)部的一些參數(shù),這些操作都是通過(guò)向BAP設(shè)定相應(yīng)的RID,讀取相應(yīng)緩沖區(qū)完成的:

wlandrv_Attach (void){

wi_read_rid(WI_RID_MAC_NODE,ic.ic_myaddr,&buflen);//讀取網(wǎng)卡地址

……類似地讀取NIC ID,可用信道,WEP加密支持,網(wǎng)絡(luò)速率支持

}

wlandrv_Init()函數(shù)用于網(wǎng)絡(luò)參數(shù)的初始化設(shè)置:

wlandrv_Init(){

wi_write_val(WI_RID_PORTTYPE,WI_PORTTYPE_BSS);//配制為站點(diǎn)

wi_write_ssid(WI_RID_DESIRED_SSID,ic_des_essid,7);//設(shè)置SSID

wi_write_txrate();//設(shè)置速率

wi_cmd(WI_CMD_ENABLE | WI_PORT0,0,0,0);//啟動(dòng)網(wǎng)卡

}

wlandrv_PutPacket()是被TCP/IP協(xié)議調(diào)用的函數(shù),即IP協(xié)議將發(fā)送的數(shù)據(jù)打成IP包以后,將包傳遞給該函數(shù)。函數(shù)的工作首先是計(jì)算需要發(fā)送的字節(jié)總長(zhǎng)度,然后在IP包前添加添加邏輯鏈路控制層的幀頭,幀頭為4個(gè)雙字,分別表示訪問(wèn)點(diǎn)地址、控制類型以及幀頭類型,最后將IEEE802.3的幀頭改成WiFi的幀頭。最后,將打好的包送入網(wǎng)卡的發(fā)送緩沖區(qū)。發(fā)送緩沖區(qū)的地址是通過(guò)設(shè)置FID管理寄存器后獲得的。

wlandrv_PutPacket(struct pkst *TxdData){

//TxdData為指向發(fā)送的IP包的指針

struct wi_frame frmhdr;

LLCS_SNAP_HEADER LLCSSNAPHeader ;

ETHERHDR *pMAC8023Header:

計(jì)算發(fā)送數(shù)據(jù)長(zhǎng)度len為TxdData指向的數(shù)據(jù)包添加格式為L(zhǎng)LCS_SNAP_HEADER的邏輯鏈路控制層包頭

wi_write_bap(rid,off,TxdData,len);//發(fā)送數(shù)據(jù)包

)

wlandrv_Event()函數(shù)主要查詢?nèi)齻€(gè)事件,即管理消息、接收數(shù)據(jù)、發(fā)送數(shù)據(jù)。通過(guò)查詢消息代碼,可知網(wǎng)卡是否已經(jīng)找到AP并關(guān)聯(lián)起來(lái)以及何時(shí)脫離關(guān)聯(lián)。響應(yīng)接收數(shù)據(jù)事件可以接收數(shù)據(jù)幀,去掉邏輯鏈路控制層的幀頭,然后將IP包傳遞給IP協(xié)議層。對(duì)于發(fā)送數(shù)據(jù)事件可以不做響應(yīng)。這些操作都是先查詢FID寄存器后,獲取事件數(shù)據(jù)的緩沖區(qū)地址,然后訪問(wèn)該地址的緩沖區(qū)獲取相應(yīng)數(shù)據(jù) 函數(shù)如下:

wlandrv_Event(){

EventStatus=pcmcia_ReadReg (WI_EVENT_STAT);//讀取事件代碼

if(EventStatus&WI_EV_INFO){

wi_info_intr();//處理信息時(shí)間

}

else if(EventStatus& WI_EV_RX){

wi_rx_intr():

}

//處理接收事件

else if(EventStatus& WI_EV_TX_EXC){

}


3.3 驅(qū)動(dòng)程序的使用

驅(qū)動(dòng)程序?qū)懞靡院?,是通過(guò)TCP/IP程序調(diào)用這些API函數(shù)的,其調(diào)用過(guò)程如圖3所示。

 

4 結(jié)束語(yǔ)

通過(guò)在嵌入式終端中加入WiFi網(wǎng)卡,并編寫基于vCOS II實(shí)時(shí)操作系統(tǒng)的網(wǎng)卡驅(qū)動(dòng)程序,實(shí)現(xiàn)了嵌入式終端與PC機(jī)之間的網(wǎng)絡(luò)通信。在實(shí)驗(yàn)中,PC機(jī)通過(guò)無(wú)線網(wǎng)卡向嵌入式終端發(fā)送彩色圖片,嵌入式終端恢復(fù)數(shù)據(jù)后在彩色LCD上顯示該圖片,證明WiFi網(wǎng)卡驅(qū)動(dòng)程序的開發(fā)是成功的。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉