在介紹IEEE802.11MAC協議結構的基礎上,給出協議開放的方案和步驟,提出IEEE802.11MAC協議在32位ARM7TDMI微處理器S3C4510B上的一種移植方案,開發出了嵌入式IEEE802.11MAC協議的IP核。同時,圍繞著IEEE802.11MAC協議的原理和移植過程中硬件相關部分,介紹ARM平臺的結構、可用資源以及ARM的初始化過程等。 無線局域網被認為是下一代IT產業發展的是大推動之一,被IT業賦予了極大的希望。無線局域網802.11系列標準的MAC協議是一樣的,只是在物理層上有差異,因此對802.11MAC協議的開發,不論是在802.11b流行的今天,還是802.11g可能會成為主流的將來,都是很有意義的。當然,ARM以其先進的體系結構已經成為嵌入式市場的RISC標準,因此基于ARM的IEEE802.11MAC協議的開發是很有現實意義的。 我們的開發流程如圖1所示。 PC軟件開發是指脫離硬件的嵌入式軟件開發階段。此階段可以在各種IDE環境下進行開發,并進行軟仿真來驗證軟件的邏輯正確性。然后將開發出來的PC軟件結合硬件所需要的硬件相關代碼向硬件平臺進行移值調試。前兩個階段完成后就得到了開發的最終成品。 1 協議結構 IEEE802.11MAC協議的SDL描述可以分為以下幾個功能模塊,如圖2所示。 *MAC數據服務模塊:向LLC層提供MAC層的數據服務接口。 *MPDU生成模塊:將MSDU(MMPDU)生成MPDU,并對MPDU分段、加密以及進行排隊管理。 *協議控制模塊:完成DCF、PCF下的各種協議控制功能,包括RTS/CTS、ACK、ATIM、CF-ACK等,并根據信道狀態請求退避,在傳送數據挫敗后控制重傳等。該模塊還負責對所有接收到的MAC幀進行分類,按不同的類型送到不同的模塊進行處理。 *發送模塊:將MAC幀以字節流的形式發送到物理層,完成實際的發送過程。這個模塊中要完成對整個發送幀產生CRC校驗,向發送的beacon幀中加入時戳用來進行時間同步。這個模塊還負責處理底層獲得的當前信道的狀態,完成協議要求的隨機退避功能。 *接收模塊:對從物理層接收到的幀進行CRC校驗。如果正確接收的話,則進行地址過濾,丟棄目的地址不是自己的幀。如果數據是經過分段的話,還有進行數據分段的重裝,然后將接收幀送往協議控制模塊進行分類處理。同時,這個模塊還要提取接收幀中的信道保留信息,結合信道上有無載波的狀況綜合判斷信道的狀態,并把信道的狀態送往發送模塊來協調退避功能的完成。 *MAC管理實體模塊:是管理核心,完成所有的管理功能,包括掃描、入網、認證、解認證、關聯、解關聯、重新關聯、beacon幀的發送、站點狀態管理等功能。 *MAC管理服務模塊:提供MAC管理接口,包括MIB庫的管理,對MIB庫的訪問,并將管理接口傳來的管理服務請求送到MLME模塊進行實際處理,將結果返回給管理接口。 2 協議實現 IEEE802.11MAC協議的SDL流程中各模塊之間的交互是通過信號的方式來完成的,模塊之間通過交互信息來協調工作,并且完成各種MAC幀的結構之間的傳遞。我們將信號定義為Signal(PID,SID,Param)參數PID用來標準信號的目的模塊,SID用來標志信號在目的模塊中由哪個函數來處理,參數Param是一個指向存儲區的指針,存儲區里存放的是信號所要傳遞的信息。為了能使整個協議在信號的驅動下運行,需要由一個功能實體來完成信號的處理過程。這里采用的是一個循環隊列來存放產生的信號,由主循環程序來不斷檢測隊列中的信號,根據信號的PID和SID調用相應模塊里的信號處理函數進行處理。 協議中還涉及大量的比較判斷和定時操作,當比較成立或定時到期后,進入相應的處理程序。其實,我們可以認為當比較成立或時間到期產生相應的信號,然后由信號處理機制來完成后續的工作。我們所要做的只是定義一個比較隊列和一個定時隊列,比較操作加到比較隊列中,定時操作加到定時隊列中,由主循環檢測這兩個隊列。當某個比較判斷成立時或某個定時期時從相應的隊列中取出,然后再以信號方式加入到信號隊列中去。因此我們將比較操作和定時操作分別定義為: Compare(PID,SID,Param11,Param12,Param21,Param22,Param31,Param32); Timer(PID,SID,Time); PID、SID標志比較成立或定時到期時產生的信號,Paramil、Parami2(i=1,2,3)為比較操作中需要進行比較的幾對數據。Time為定時操作中設定的定時值。 上面介紹的機制建構了協議框架,然后在這個框架基礎上按照SDL流程編寫相應的信號處理函數就要吧實現整個協議。 前期協議開發了驗證邏輯上的正確性。我們在Microsoft Visual C++環境下進行開發并進行了軟仿真,結果表明所開發的設計在邏輯上是正確可行的。 3 協議向ARM平臺的移植 我們所使用的ARM硬件平臺ARM anywhere II采用的是三星公司的ARM芯片S3C4510B。S3C4510B是采用ARM7TDMI核的高性價比RISC微控制器,特別適用于網絡應用系統。 我們開發了一個軟件模塊PHY來模擬物理層收斂過程子層(PLCP),對于物理介質依賴子層(PMD)我們沒有實現。這并不影響MAC協議的開發。LLC層的數據通過PC串口發送到ARM平臺來模擬,數據經過MAC處理后送到PLCP子層,然后由PLCP子層直接發送。數據發送通過ARM的通用I/O來實現,發送速率由S3C4510B的定時器來控制。 在將802.11MAC協議向ARM平臺的移植方案中,有一部分代碼的執行是依賴于ARM平臺的。這部分代碼的移植工作需要特別注意,包括以下幾個方面: ①定時器。協議中要求的隨機退避過程需要底層周期性的送slot來進行,這個周期性 slot需要用定時器來實現。協議中的網絡分析矢量NAV需要用定時器來實現,以判斷NAV的狀態。協議中定義的幾種幀間隔IFS(SIFS、DIFS、PIFS、EIFS)也需要利用定時器來實現。 ②外部中斷。802.11MAC協議中一個重要部分就是載波監聽。當信道狀態變化時(由忙到閑,由閑到忙)都要給負責監聽信道狀態的模塊一個指示(CCA),指示當前的信道狀態。這個過程可以由S3C4510B ARM芯片的外部中斷來很好地實現。由于S3C4510B ARM芯片可以對中斷檢測方式進行配置,可以將中斷檢測方式配置為上升沿和下降沿均觸發中斷,這些就能很好地模塊協議的中物理載波監聽(CS)。 ③I/O。模擬PLCP子層的數據收發,一共用到8個I/O端口,一次發送8位。在發送數據時,還使用了一個I/O端口作為發送指示。這個I/O端口通過信道模擬器連接到其它節點的用來監聽信道狀態的外部中斷引腳上。 ④UART。我們用UART來實現PC和ARM的通信。一些管理命令,例如掃描、入網、認證、關聯、解認證、解關聯,節點的配置信息例如MAC地址等都可以從串口來發送給ARM。另外,所有發送的數據都會通過串口傳送給ARM進行發送,所有接收到的數據將通過串口回傳給PC。 ⑤以太網控制器。以太網控制器在AP中是比較有用的。由于AP之間是通過有線的骨干網(backbone)來進行連接的,從而組成了分布式系統(DS),以太網控制器已經集成了IEEE802.11接口,就為實現這個有線的backbone提供了便利。 4 硬件仿真環境 圖3中,IEEE802.11MAC協議和PLCP子層模擬模塊都都在ARM平臺上,串口通信程序運行在PC上。它和ARM的UART進行通信用于模擬LLC層數據服務和上層的管理服務,同時它還可以顯示節點的運行狀態和當前的網絡狀態。 下面介紹一下我們使用的簡易信道模擬器的原理。信道模擬器對應每個節點(ARM平臺)有一套接口,其中有8個I/O用于數據傳輸。由于無線信道是開放式的,一個節點發送時其它節點都能收到,因此在信道模擬器中每個節點的8個I/O是兩兩相通的,這樣就能保證一個節點發送時其它節點都能收到。另外,由于要模擬信道上的載波監聽過程,我們用到了ARM上的外部中斷用做載波監聽位(CS),然后用一個I/O發送指示(TR)。這樣,信道模擬器上要維持任何一個節點的CS位,都與其它節點的TR有一定的邏輯關系,例如,當一個節點發送時,將其TR置為0(0表示信道變忙,ARM引腳初始電平為高電平1),則這個0應該立即能反映到其它節點的CS位上從而產生中斷,其它節點都會知道信道變忙而開始從信道接收數據。同時,當節點發送完畢后將TR置為1,其它節點就會產生中斷并且檢測到CS位為1從而知道信道變閑,接收結束。 實際的信道模擬支持兩個基本服務區(BSS)組成的分布式系統(DS),每個BBS內支持1個AP和2個普通節點。這內部的邏輯關系用可編程邏輯器件實現。 5 移植過程中的注意事項 PHY軟件模塊模擬PLCP子層,負責完成要求的載波監聽和數據收發時的定時控制。這些功能都是采用中斷方式實現的,因此要求代碼執行速率要快。這里使用匯編語言開發來提供代碼的執行效率。 為了獲得較高的代碼執行速率和快速的中斷響應,要求所有協議代碼和中斷服務程序都在SDRAM中執行。這就涉及到在設計ARM的初始化代碼時要正確配置相應的存儲區控制寄存器,并且完成代碼的搬移和地址的重映射。 ARM的初始化代碼包括: *定義入口點(entry point)。 *定義異常向量表,用來處理各種CPU異常,其中包括中斷。 *配置SDRAM和Flash的地址范圍、時序等參數,以使這些存儲器能正常工作。 *代碼搬移。程序代碼一般應從Flash調入SDRAM中運行,以提高系統的運行速度。同時,系統及用戶堆棧、運行數據也都放在SDRAM中。 *對SDRAM進行地址重映射,從初始時地址空間的高端搬移到0x0開始的位置。 *初始化堆棧。 *初始化存儲區。 *根據需要改變處理器工作模式。 *開中斷。 *到C程序代碼入口點開始執行。 另外,移植過程中還要考慮的一個問題是內存分配的問題。嵌入式系統中對內存的分配,一般來說要求快速可靠并且有效,實際上就是在采用靜態分配內存還是動態分配存的問題。如果系統要求對實時性要求高并且不能容忍分配失敗,這時就需要采用靜態分配內存。采用靜態分配一個不可避免的問題就是系統失去了靈活性,必須在設計階段就預先估計所需要的內存并對其作出分配,并且要考慮到所有可能的情況。我們在移植過程中,考慮到實時生和可靠性是我們的主要目標,并且我們的ARM平臺具有較大的存儲區,因而采用了靜態分配的方式。 結語 目前,嵌入式協議開發已經非常普通,本文只是根據作者的實際經驗,介紹了嵌入式802.11MAC協議開發的基本過程。目前開發的協議已經在ARM平臺上成功運行,并且性能良好。現在所使用的ARM平臺是沒有操作系統支持的,所移植的協議硬件依賴性太大,下一步我們將在有操作系統的ARM平臺上進行協議移植,通過全長操作系統提供的API接口來提供協議的可移植性。另外,繼續優化代碼,提高代碼效率,提高實時性與可靠性,以更適合于嵌入式應用環境也將是我們下一步的目標 |