ucos WiFi網卡驅動程序的開發(fā)-基礎電子_第1頁
ucos WiFi網卡驅動程序的開發(fā)-基礎電子_第2頁
ucos WiFi網卡驅動程序的開發(fā)-基礎電子_第3頁
ucos WiFi網卡驅動程序的開發(fā)-基礎電子_第4頁
ucos WiFi網卡驅動程序的開發(fā)-基礎電子_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

付費下載

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

精品文檔-下載后可編輯ucosWiFi網卡驅動程序的開發(fā)-基礎電子嵌入式系統是設計完成復雜功能的硬件和軟件,并使其緊密耦合在一起的計算機系統。目前,嵌入式系統已經存在于各種數據采集、工業(yè)控制、娛樂、通信等應用領域。在一些應用場合,需要嵌入式設備具有與其它系統交換信息的能力,因此必須為嵌入式系統增加通信功能。通信功能的實現可以采用很多方式,例如以太網,ADSL,GPRS以及其它方式。在一個嵌入式終端中使用WiFi網卡,實現無線網絡通信的功能是一種較新的通信方式。由于在uCOS實時操作系統中還沒有WiFi的驅動程序,因此下面將介紹WiFi的驅動程序的編寫。

1WiFi介紹

WiFi(WirelessFidelity),又稱802.1lb標準,IEEE于1997年6月批準了該標準。802.11標準的體系結構組成包括:無線站點STA(Station),無線接入點AP(AccessPoint),獨立基本服務組IBSS(IndependentBasicServiceSet),基本服務組BSS(BasicServiceSet),分布式系統DS(DistributionSystem)和擴展服務組ESS(ExtendedServiceSet).

該標準定義了兩種工作模式:adhoc模式和infrastructure模式。adhoc即對點模式,包含兩個無線站點(STA,即帶無線網卡的設備)。而infrastructure即AP模式,無線站點(STA)通過AP與現有的骨干網相連接,組成一個基本服務組(BSS)。在BSS中,AP不僅提供STA之間通信的橋接功能,還提供STA與有線局域網的連接,可以實現有線Hub幾乎所有的功能。

2嵌入式終端系統結構

2.1硬件結構

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

圖1嵌入式終端的硬件結構

系統中選擇了使用Prism2芯片的網卡,型號為COMPAQNC5004,支持IEEE802.11b,速率為11Mb/s.網卡的物理驅動接口為PCMCIA,供電電壓為3.3V.由于LPC2210沒有PCMCIA控制器,因此LPC2210與NC5004的PCMCIA接口是通過LPC2210的通用端口連接的,總線時序通過軟件仿真來完成,即PCMCIA接口的驅動程序。

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

2.2軟件結構

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

圖2嵌入式終端的軟件結構

但uCOSII缺少對外圍設備和接口的支持,如沒有文件系統、網絡協議、圖形界面。在廠家提供的開發(fā)資料中有其自行開發(fā)的TCP/IP協議和串口驅動程序。但該TCP/IP協議是與以太網卡驅動程序接口的,因此在該TCP/IP協議中,需要修改與網卡接口的API函數。其余的PCMCIA驅動程序、WiFi網卡驅動程序需要自己進行編寫。

3驅動程序的編寫

3.1PCMCIA驅動程序

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

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

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

3.2網卡驅動程序

Prism2網卡內部操作是封閉的,外部對其操作都是通過存儲器操作完成的,Memory空間的存儲器有COR(ConfigurationOptionRegister)寄存器,I/O空間的存儲器有BAP(BaffuerAccessPath)寄存器,命令/狀態(tài)寄存器,FID管理寄存器,事件寄存器,控制寄存器,主機軟件寄存器,輔助端口寄存器等,這些寄存器的含義及偏移地址見文獻[2].LPC2210管理、配置網卡的數據項都是加載一個特定的RID(ResourceIDentifiers)到BAP寄存器,讀取或者寫入一個特定的緩沖區(qū)。WiFi網卡驅動程序中的函數功能都是通過訪問這些存儲器完成的,下面將介紹這些API函數的功能。

wlandrv_ProbeDevice()函數用于檢測網卡是否存在,函數首先訪問COR寄存器,設置網卡進入I/O模式,設置操作屬于Memory空間的讀寫操作。然后,使用pcmcia_WriteReg()函數寫一個值到地址為0x28的寄存器中,再用pcmcia_ReadReg()函數讀取這個寄存器的值,與原來的值相比較,如果值相同,則說明網卡是存在的:

wlandrv_ProbeDevice(void){

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

pcmcia_WriteReg(WI_HFA384X_SWSUP_PORT0_OFF,WI_PRISM2STA_MAGIC);

Value=pcmcia_ReadReg(WI_HFA384X_SWSUPPORT0_OFF);

if(Value==WI_PRISM2STA_MAGIC){

已找到網卡,此處做相應處理

}

}

wlandrv_Attach()函數用于讀取網卡內部的一些參數,這些操作都是通過向BAP設定相應的RID,讀取相應緩沖區(qū)完成的:

wlandrv_Attach(void){

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

……類似地讀取NICID,可用信道,WEP加密支持,網絡速率支持

}

wlandrv_Init()函數用于網絡參數的初始化設置:

wlandrv_Init(){

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

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

wi_write_txrate();//設置速率

wi_cmd(WI_CMD_ENABLE|WI_PORT0,0,0,0);//啟動網卡

}

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

wlandrv_PutPacket(structpkst*TxdData){

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

structwi_frame.frmhdr;

LLCS_SNAP_HEADERLLCSSNAPHeader;

ETHERHDR*pMAC8023Header:

計算發(fā)送數據長度len為TxdData指向的數據包添加格式為LLCS_SNAP_HEADER的邏輯鏈路控制層包頭

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

)

wlandrv_Event()函數主要查詢三個事件,即管理消息、接收數據、發(fā)送數據。通過查詢消息代碼,可知網卡是否已經找到AP并關聯起來以及何時脫離關聯。響應接收數據事件可以接收數據幀,去掉邏輯鏈路控制層的幀頭,然后將IP包傳遞給IP協議層。對于發(fā)送數據事件可以不做響應。這些操作都是先查詢FID寄存器后,獲取事件數據的緩沖區(qū)地址,然后訪問該地址的緩沖區(qū)獲取相應數據函數如下:

wlandrv_Event(){

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

if(EventStatusWI_EV_INFO){

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

}

elseif(EventStatusWI_EV_RX){

wi_rx_intr():

}

//處理接收事件

els

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論