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