《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于MC13213的單芯片ZigBee平臺(tái)的 物理層協(xié)議研究與實(shí)現(xiàn)
基于MC13213的單芯片ZigBee平臺(tái)的 物理層協(xié)議研究與實(shí)現(xiàn)
來源:微型機(jī)與應(yīng)用2010年第23期
吳 瑾1,潘啟勇2,王宜懷1
(1.蘇州大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,江蘇 蘇州 215004;2.常熟理工學(xué)院 物理與電子工程學(xué)院
摘要: 采用Freescale的MC13213芯片構(gòu)建了單芯片的ZigBee硬件平臺(tái),闡述了物理層的基本內(nèi)容,分析了物理層的SPI事務(wù)協(xié)議、Modem的工作模式等編程結(jié)構(gòu),實(shí)現(xiàn)了構(gòu)件化的底層硬件驅(qū)動(dòng)程序和物理層數(shù)據(jù)包收發(fā)程序,并基于構(gòu)件對(duì)物理層協(xié)議進(jìn)行了詳細(xì)的測(cè)試,驗(yàn)證了物理層功能的可靠性和穩(wěn)定性。結(jié)果表明,基于單芯片設(shè)計(jì)的ZigBee物理層協(xié)議穩(wěn)定可靠,易于應(yīng)用到實(shí)際項(xiàng)目中。
Abstract:
Key words :

摘  要: 采用Freescale的MC13213芯片構(gòu)建了單芯片的ZigBee硬件平臺(tái),闡述了物理層的基本內(nèi)容,分析了物理層的SPI事務(wù)協(xié)議、Modem的工作模式等編程結(jié)構(gòu),實(shí)現(xiàn)了構(gòu)件化的底層硬件驅(qū)動(dòng)程序和物理層數(shù)據(jù)包收發(fā)程序,并基于構(gòu)件對(duì)物理層協(xié)議進(jìn)行了詳細(xì)的測(cè)試,驗(yàn)證了物理層功能的可靠性和穩(wěn)定性。結(jié)果表明,基于單芯片設(shè)計(jì)的ZigBee物理層協(xié)議穩(wěn)定可靠,易于應(yīng)用到實(shí)際項(xiàng)目中。
關(guān)鍵詞: ZigBee協(xié)議;IEEE 802.15.4;無線傳感網(wǎng)絡(luò);MC13213;物理層

    ZigBee技術(shù)是一種近距離、低復(fù)雜度、低功耗、低數(shù)據(jù)速率、低成本的雙向無線通信技術(shù),該技術(shù)基于IEEE 802.15.4標(biāo)準(zhǔn),由成立于2001年8月的ZigBee聯(lián)盟提出。2004年12月,ZigBee聯(lián)盟制定了ZigBee SpecificationV1.0。至今ZigBee技術(shù)已經(jīng)得到了廣泛的發(fā)展和應(yīng)用。目前,我國(guó)絕大部分的ZigBee硬件都是由國(guó)外廠商設(shè)計(jì)和生產(chǎn)的。早期的ZigBee硬件都是微控制器(MCU)和IEEE 802.15.4射頻芯片分離的。隨著片上系統(tǒng)(SoC)的出現(xiàn),ZigBee硬件也發(fā)展到了在一個(gè)芯片內(nèi)部集成了MCU和射頻芯片,如Freescale公司的MC1321x,TI公司的CC243x,Ember公司的EM250以及Jennic公司的JN5121和JN5139等[1-2]。其中,F(xiàn)reescale公司的MC1321x降低了ZigBee開發(fā)者對(duì)硬件射頻電路的要求,加速了ZigBee系統(tǒng)的開發(fā),同時(shí)具有較高的穩(wěn)定性和可靠性。
    為了更好地推廣應(yīng)用ZigBee,本文對(duì)物理層協(xié)議及編程方法進(jìn)行了深入研究。物理層是ZigBee的關(guān)鍵技術(shù),完整的ZigBee協(xié)議包括應(yīng)用層(APL)、網(wǎng)絡(luò)層(NWK)、媒介接入控制層(MAC)和物理層(PHY)等。物理層通過操作底層硬件為上層提供服務(wù)接口,因此物理層的穩(wěn)定可靠關(guān)系到整個(gè)協(xié)議棧的健壯性,是其他層設(shè)計(jì)的基礎(chǔ)。
采用嵌入式構(gòu)件化的設(shè)計(jì)方法,可提高物理層設(shè)計(jì)的可移植性和可重用性,目前很少有人做這方面的工作。本文采用射頻片上系統(tǒng)(SoC)——MC13213設(shè)計(jì)了一個(gè)較通用的單芯片ZigBee硬件平臺(tái),分析和實(shí)現(xiàn)了ZigBee協(xié)議物理層,按照構(gòu)件化的方法進(jìn)行設(shè)計(jì),并對(duì)構(gòu)件進(jìn)行了詳細(xì)的測(cè)試,這不僅為基于物理層的簡(jiǎn)單應(yīng)用提供了方法,而且為后續(xù)的MAC層的應(yīng)用打下了基礎(chǔ)。
1 ZigBee物理層功能概述
    ZigBee工作在免申請(qǐng)的工業(yè)科學(xué)醫(yī)療頻段。IEEE 802.15.4標(biāo)準(zhǔn)中定義了兩個(gè)可用的物理層:基于2.4 GHz頻段的“短距離”實(shí)現(xiàn)和基于868/915 MHz頻段的“長(zhǎng)距離”實(shí)現(xiàn),兩者都使用直接序列擴(kuò)頻(DSSS)技術(shù)。中國(guó)目前的ZigBee工作頻段為2.4 GHz。
    ZigBee物理層通過射頻固件和射頻硬件為MAC層和物理無線信道之間提供了服務(wù)接入點(diǎn)SAP(Service Access Point)。
    IEEE 802.15.4定義的物理層參考模型如圖1所示。其中PD-SAP(PHY Data Service Access Point)是物理層提供給MAC層的數(shù)據(jù)服務(wù)接口,PLME-SAP(Physical Layer Management Entity-Service Access Point)是物理層提供給MAC層的管理服務(wù)接口,RF-SAP是由底層無線射頻驅(qū)動(dòng)程序提供給物理層的接口。


    物理層主要完成以下工作:激活和禁用射頻收發(fā)器,對(duì)信道進(jìn)行能量檢測(cè)ED(Energy Detect),提供所接收數(shù)據(jù)包的鏈路質(zhì)量指示LQI(Link Quality Indication),空閑信道評(píng)估CCA(Clear Channel Assessment),信道頻率選擇,數(shù)據(jù)發(fā)送和接收等。
2 MC13213單芯片ZigBee物理層編程結(jié)構(gòu)
    Freescale公司推出的單芯片ZigBee解決方案——MC13213采用SoC技術(shù),在9 mm×9 mm的LGA封裝內(nèi)集成了HCS08 MCU和遵循IEEE 802.15.4標(biāo)準(zhǔn)的第二代無線射頻收發(fā)器MC1320x[3-4] (后文中將用MCU和Modem分別代表MCU模塊和射頻收發(fā)器模塊)。具有4 KB的RAM、60 KB的Flash,1個(gè)串行外設(shè)接口(SPI),2個(gè)異步串行通信接口(SCI),1個(gè)鍵盤中斷模塊(KBI),2個(gè)定時(shí)器/脈寬調(diào)制TPM(Timer/PWM)模塊,1個(gè)8通道10位的模數(shù)轉(zhuǎn)換器(ADC),以及多達(dá)32個(gè)的GPIO口等[5]。Modem內(nèi)部已經(jīng)集成了功率放大器PA(Power Amplifier)、低噪聲放大器LNA(Low Noise Amplifier)和收/發(fā)開關(guān)(T/R switch),這在很大程度上降低了系統(tǒng)成本和射頻電路的設(shè)計(jì)難度。
2.1 Modem與MCU的交互方式
    Modem可以通過SPI接口、IRQ中斷請(qǐng)求以及幾個(gè)狀態(tài)和控制信號(hào)與主控MCU實(shí)現(xiàn)交互,如圖2所示。

    SPI命令通道是Modem與MCU之間的主要交互方式,使用標(biāo)準(zhǔn)的4線SPI進(jìn)行通信。MCU通過SPI命令結(jié)構(gòu)可以讀/寫Modem的寄存器內(nèi)容、設(shè)置Modem的初始化參數(shù)、讀取Modem的狀態(tài)和控制信息。IRQ中斷為Modem提供了一種通知MCU有關(guān)Modem內(nèi)部所發(fā)生事件的方法,這樣就免除了MCU一直輪詢Modem,降低了MCU的運(yùn)行開銷。ATTN用來把Modem從低功耗模式喚醒,RXTXEN用來允許Modem的發(fā)送、接收和CCA等操作。GPIO1引腳反映了Modem收發(fā)機(jī)是否忙,GPIO2引腳可以反映所接收數(shù)據(jù)包的循環(huán)冗余校驗(yàn)CRC(Cyclical Redundancy Check)是否有效或者反映CCA的結(jié)果[6]。
2.2 Modem的SPI事務(wù)操作
    SPI事務(wù)是在標(biāo)準(zhǔn)SPI協(xié)議基礎(chǔ)上實(shí)現(xiàn)的一個(gè)擴(kuò)展SPI協(xié)議。由于Modem中的寄存器和RAM大小都配置為16 bit即一個(gè)字(word)的寬度,所以它規(guī)定了每次SPI事務(wù)過程必須由1 B的頭(header)和2×N B的載荷(payload)組成,每個(gè)字節(jié)對(duì)應(yīng)一個(gè)SPI脈沖(SPI burst),其中1≤N≤64,且為整數(shù),代表每個(gè)SPI事務(wù)中所包含的字(word)數(shù),當(dāng)N=1時(shí),稱為SPI單次事務(wù)(SPI singular transaction);其他情況稱為SPI循環(huán)事務(wù)(SPI recursive transaction)。header的最高位為R/W位,表示操作類型是讀還是寫;header的低6位是寄存器地址,表示了SPI操作的64個(gè)可能的寄存器地址(注意,有一部分寄存器沒有實(shí)現(xiàn))。
2.3 Modem的數(shù)據(jù)傳輸模式
    Modem定義了兩種數(shù)據(jù)傳輸模式:Stream模式和Packet模式。在Stream模式中,數(shù)據(jù)的發(fā)送和接收是逐字(word-by-word)處理的。而在Packet模式中,發(fā)送時(shí),發(fā)送方先將待發(fā)送數(shù)據(jù)緩存在Modem的發(fā)送緩沖區(qū)(TX RAM)中,然后再發(fā)送;接收時(shí),接收方先在接收緩沖區(qū)(RX RAM)中緩存收到的整個(gè)數(shù)據(jù)包,然后再通知MCU來讀取。雖然Packet模式下數(shù)據(jù)的接收有稍許延遲,但其降低了對(duì)MCU的資源要求[7],在本協(xié)議棧實(shí)現(xiàn)過程中使用這種數(shù)據(jù)傳輸模式。
3 物理層構(gòu)件設(shè)計(jì)
    基于MC13213單芯片的ZigBee平臺(tái)實(shí)現(xiàn)物理層協(xié)議構(gòu)件程序的設(shè)計(jì),首先必須編寫底層硬件驅(qū)動(dòng)程序,然后設(shè)置Modem的運(yùn)行方式,再進(jìn)行數(shù)據(jù)包收發(fā)程序的設(shè)計(jì)等。
3.1 底層硬件驅(qū)動(dòng)程序的實(shí)現(xiàn)
    硬件驅(qū)動(dòng)程序介于底層硬件和ZigBee協(xié)議棧之間,可以使得運(yùn)行于硬件之上的ZigBee協(xié)議棧更易于維護(hù)和移植。其中芯片初始化程序?qū)CU的一些硬件模塊進(jìn)行正確的配置,以保證MCU可以正常工作。這里所做的主要配置包括:關(guān)閉看門狗,設(shè)置內(nèi)部時(shí)鐘模塊的校準(zhǔn)(trim)值,配置MCU的時(shí)鐘模塊等。
    初始化完成后會(huì)涉及到SPI循環(huán)事務(wù)的實(shí)現(xiàn),下面以Packet模式下發(fā)送和接收3 B數(shù)據(jù)的完整過程來描述對(duì)Modem RX/TX RAM的SPI循環(huán)讀寫操作,如圖3所示。其中,RX/TX RAM的長(zhǎng)度為128 B。圖中假定MCU均是以字節(jié)數(shù)組的形式來保存待發(fā)送或接收到的數(shù)據(jù)。

    從圖3可以看出,讀/寫RAM時(shí)的SPI通信是最高有效位優(yōu)先(MSB-first)的,而在無線發(fā)送/接收過程中是最低有效位優(yōu)先LSB-first(Least Significant Bit first)的,但在編寫SPI循環(huán)讀寫操作時(shí)并不需要考慮上述兩種順序,也并不會(huì)導(dǎo)致接收方在接收發(fā)送方的數(shù)據(jù)時(shí)產(chǎn)生比特位順序的改變。
    需要特別注意的是,由于SPI事務(wù)要求所有的數(shù)據(jù)傳輸都是按16 bit寬度進(jìn)行的,當(dāng)發(fā)送數(shù)據(jù)是奇數(shù)個(gè)字節(jié)時(shí),其最后一字節(jié)數(shù)據(jù)要進(jìn)行特別處理,即需填充一個(gè)任意字節(jié)以湊滿16 bit寬度,但是這個(gè)拼湊的字節(jié)和最后那個(gè)有效字節(jié)的發(fā)送順序必須按照?qǐng)D3中的順序進(jìn)行,即先發(fā)填充字節(jié),以保證在TX RAM中,最后一字節(jié)緊跟在前面的偶數(shù)個(gè)字節(jié)之后。而在最后一字節(jié)數(shù)據(jù)之前的偶數(shù)個(gè)字節(jié)數(shù)據(jù)由于是16 bit寬度的倍數(shù),所以在發(fā)送每個(gè)字時(shí)對(duì)字節(jié)發(fā)送順序沒有特別要求,只要接收方和發(fā)送方按照同一種順序收發(fā)各字節(jié)即可。
3.1.1 使用SPI循環(huán)寫事務(wù)向TX RAM中寫入待發(fā)送數(shù)據(jù)
    執(zhí)行這個(gè)操作之前,待發(fā)送數(shù)據(jù)長(zhǎng)度應(yīng)已經(jīng)寫入TX_Pkt_Control寄存器的tx_pkt_length[6:0]字段。
MCU向TX RAM中寫入待發(fā)送數(shù)據(jù)的一般流程如下:
    (1)根據(jù)需要配置TX_Pkt_Control寄存器的tx_ram2_select位,以選擇使用兩塊TX RAM中的一塊。
    (2)計(jì)算寫入待發(fā)送數(shù)據(jù)所需要的SPI脈沖個(gè)數(shù),注意:
    ①CRC字節(jié)不需寫入到TX RAM中,它是由硬件自動(dòng)產(chǎn)生的;
    ②待發(fā)送數(shù)據(jù)的最大長(zhǎng)度為125 B(去掉2 B的CRC);
    ③必須為偶數(shù)個(gè)字節(jié),若數(shù)據(jù)長(zhǎng)度為奇數(shù)個(gè)字節(jié),應(yīng)加1使其變?yōu)榕紨?shù)。
    (3)做一個(gè)SPI循環(huán)寫事務(wù)來寫入數(shù)據(jù):
    ①M(fèi)CU拉低SPI模塊的片選信號(hào)CE,選中Modem;
    ②MCU向Modem發(fā)送第一個(gè)SPI脈沖,其中R/W位應(yīng)為0,表示寫操作;
    ③按照(2)中計(jì)算的SPI脈沖個(gè)數(shù),寫入待發(fā)送數(shù)據(jù);
    ④MCU拉高CE,使片選失效;
    (4)整個(gè)寫操作結(jié)束。
3.1.2 使用SPI循環(huán)讀事務(wù)讀取RX RAM中的已接收數(shù)據(jù)
    MCU讀取RX RAM中的已接收數(shù)據(jù)的一般流程如下:
    (1)MCU讀Modem的RX_Status寄存器rx_pkt_latch[6:0]字段以獲取數(shù)據(jù)長(zhǎng)度。
    (2)計(jì)算讀取RX RAM中的已接收數(shù)據(jù)所需要的SPI脈沖個(gè)數(shù):
    ①通常不讀取2 B的CRC,所以數(shù)據(jù)長(zhǎng)度應(yīng)減去2;
    ②若數(shù)據(jù)長(zhǎng)度為奇數(shù)個(gè)字節(jié),應(yīng)加1使其變?yōu)榕紨?shù);
    ③按照Modem SPI事務(wù)協(xié)議的規(guī)定,應(yīng)丟棄讀到的第一個(gè)字(word),因?yàn)樵诘谝淮巫x取時(shí),內(nèi)部RAM的地址還沒有準(zhǔn)備好,這樣又導(dǎo)致了數(shù)據(jù)長(zhǎng)度加2。
    (3)做一個(gè)SPI循環(huán)讀事務(wù)來讀取數(shù)據(jù):
    ①M(fèi)CU拉低SPI模塊的片選信號(hào)CE,選中Modem;
    ②MCU向Modem發(fā)送第一個(gè)SPI脈沖,其中R/W位應(yīng)為1,表示讀操作;
    ③按照(2)中計(jì)算的SPI脈沖個(gè)數(shù)讀取所有數(shù)據(jù)。注意,協(xié)議規(guī)定應(yīng)丟棄讀到的第一個(gè)字(word)。當(dāng)數(shù)據(jù)為奇數(shù)個(gè)字節(jié)時(shí),應(yīng)丟棄圖3中的那個(gè)填充字節(jié);
    ④MCU拉高CE,使片選失效。
    (4)整個(gè)讀操作結(jié)束。
3.2 設(shè)置Modem運(yùn)行模式
    Modem有多種運(yùn)行模式,主要可分成兩類:活動(dòng)模式和低功耗模式。其中活動(dòng)模式包括Idle模式、Receive(RX)模式、Transmit(TX)模式和CCA/ED模式;低功耗模式包括Off模式、Hibernate模式、Doze模式[8]。
    Idle模式是Modem退出任何其他模式后的默認(rèn)模式,也是進(jìn)入任何其他模式的初始模式;RX、TX模式分別為Modem接收、發(fā)送數(shù)據(jù)時(shí)所處的工作模式;CCA/ED模式為空閑信道評(píng)估/能量檢測(cè)時(shí)所處的工作模式,用來評(píng)估信道是否空閑或測(cè)量信道的當(dāng)前能量值[8]。
    收發(fā)機(jī)狀態(tài)設(shè)置是通過調(diào)用設(shè)置收發(fā)狀態(tài)函數(shù)實(shí)現(xiàn)的,其函數(shù)頭如下:
//-----------------------------------------*
//功能: 設(shè)置收發(fā)機(jī)狀態(tài)函數(shù),把收發(fā)機(jī)設(shè)置成用戶期望的狀態(tài)
//參數(shù): nDesiredStatus         - 用戶期望狀態(tài)
//返回: SUCCESS               - 成功設(shè)置成指定模式;
//           等于用戶期望模式-收發(fā)機(jī)之前就處于用戶期望狀態(tài);
//            其他                      - 表示執(zhí)行失??;
//說明: 無
//----------------------------------------*
INT8U PLMESetTRXState(INT8U nDesiredStatus);
3.3 物理層數(shù)據(jù)包的收發(fā)
    物理層數(shù)據(jù)稱為物理層數(shù)據(jù)單元PPDU(PHY Protocol Data Unit),包括同步包頭、物理層包頭和物理層載荷三部分[3],如圖4所示。其中同步包頭可以使得接收設(shè)備鎖定在比特流上,并與比特流保持同步;物理層包頭包含了數(shù)據(jù)包的長(zhǎng)度信息,在0~127之間;物理層服務(wù)數(shù)據(jù)單元PSDU(PHY Service Data Unit)也稱物理層載荷,攜帶MAC層的幀信息,即MAC層協(xié)議數(shù)據(jù)單元MPDU(MAC Protocol Data Unit)。注意,CRC檢驗(yàn)字節(jié)包含在PSDU中的最后兩字節(jié)中。

    物理層數(shù)據(jù)包的發(fā)送和接收比較簡(jiǎn)單,對(duì)于MC13213的Modem來說,用戶所要做的只是調(diào)用SPI循環(huán)事務(wù)寫入或讀取物理層包頭和載荷,然后拉高RXTXEN引腳使能Modem的發(fā)送和接收即可。PPDU的同步包頭是由硬件自動(dòng)添加的。
    (1)物理層數(shù)據(jù)包的發(fā)送
    Packet模式下發(fā)送數(shù)據(jù)包的過程是在物理層數(shù)據(jù)請(qǐng)求函數(shù)中實(shí)現(xiàn)的,在函數(shù)實(shí)現(xiàn)過程中,應(yīng)根據(jù)要求,向上層通知數(shù)據(jù)發(fā)送結(jié)果的狀態(tài)信息。其函數(shù)頭如下:
//------------------------------------------------*
//功能: 數(shù)據(jù)請(qǐng)求函數(shù),生成物理層協(xié)議數(shù)據(jù)單元(PPDU)并無線發(fā)送出去
//參數(shù): nPSDULength-物理層PSDU(即MAC層的MPDU)中的字節(jié)數(shù),
//                   長(zhǎng)度要<=aMaxPHYPacketSize(物理層最大數(shù)據(jù)包容量)
//       pPSDU      - 指向物理層PSDU數(shù)據(jù)的指針
//返回: SUCCESS - 發(fā)送成功;其他值 - 發(fā)送失敗
//說明: 由MAC層調(diào)用
//-----------------------------------------*
INT8U PDDataRequest(INT8U nPSDULength, INT8U *pPSDU);
    (2)物理層數(shù)據(jù)包的接收
    一般情況下,Modem的接收機(jī)是關(guān)閉的。當(dāng)Modem接收機(jī)處于打開狀態(tài)時(shí)有其他Modem在同一信道上發(fā)送數(shù)據(jù),則Modem會(huì)接收到這些數(shù)據(jù)。
本協(xié)議棧實(shí)現(xiàn)Packet模式下接收數(shù)據(jù)包時(shí),為物理層數(shù)據(jù)包實(shí)現(xiàn)了一個(gè)環(huán)形的接收緩沖區(qū),以保證數(shù)據(jù)的及時(shí)可靠接收,其結(jié)構(gòu)定義如下:
    //PSDU最大數(shù)據(jù)包長(zhǎng)度(不包括CRC)
#define PSDUMaxLen              125
//PSDU數(shù)據(jù)包定義
typedef struct PSDURxPacket_tag
{   INT8U m_nLen;
    INT8U m_nData[PSDUMaxLen];
    INT8U m_nStatus;
    INT8U m_nLQI;
} PSDURxPacket_t;

//PSDU數(shù)據(jù)接收緩沖區(qū)個(gè)數(shù)
#define PSDURxBufferNum         8
//PSDU數(shù)據(jù)接收緩沖區(qū)定義
typedef struct PSDURxBuffer_tag
{   INT8U m_nPSDUCount;
    INT8U m_nHead;
    INT8U m_nTrail;
    PSDURxPacket_t m_sPSDU[PSDURxBufferNum];
} PSDURxBuffer_t;

//定義PSDU環(huán)形接收緩沖區(qū)
static PSDURxBuffer_t s_sPSDURxBuffer;
3.4 其他編程相關(guān)說明
    空閑信道評(píng)估(CCA)用來判斷信道是否空閑。能量檢測(cè)(ED)用來測(cè)量目標(biāo)信道中接收信號(hào)的功率強(qiáng)度,由于這個(gè)檢測(cè)本身不進(jìn)行解碼操作,所以檢測(cè)結(jié)果是有效信號(hào)功率和噪聲信號(hào)功率之和。另外,鏈路質(zhì)量指示(LQI)提供了接收數(shù)據(jù)包時(shí)無線信號(hào)的強(qiáng)度和信道質(zhì)量信息。與能量檢測(cè)不同的是,LQI要對(duì)信號(hào)進(jìn)行解碼,生成的是一個(gè)信噪比指標(biāo)。這個(gè)信噪比指標(biāo)和物理層數(shù)據(jù)單元一起提交給上層處理。Modem中RX_Status寄存器的cca_final[7:0]字段保存了以上操作的結(jié)果值。
    當(dāng)Modem完成MCU指定的某個(gè)功能(如發(fā)送完成、接收完成、CCA/ED完成等),就會(huì)產(chǎn)生IRQ中斷,然后MCU會(huì)讀取Modem的IRQ狀態(tài)寄存器,針對(duì)不同的IRQ中斷類型分別進(jìn)行處理。
物理層管理實(shí)體(PLME)維護(hù)了物理層正常工作所必須的一些屬性參數(shù),包括物理層支持的信道列表、當(dāng)前用于發(fā)送和接收的信道、物理層的發(fā)射功率以及CCA模式4個(gè)屬性。每個(gè)屬性都有一個(gè)唯一的屬性標(biāo)識(shí)符,并且某些屬性還有一些特定的取值范圍。屬性的讀和寫分別由屬性設(shè)置和讀取函數(shù)來實(shí)現(xiàn),由于物理層的屬性較少,直接通過switch/case語句實(shí)現(xiàn)即可。
4 物理層構(gòu)件測(cè)試
    按照前面分析的ZigBee物理層編程結(jié)構(gòu)編寫測(cè)試程序,可用于對(duì)物理層的構(gòu)件功能進(jìn)行測(cè)試。測(cè)試可先進(jìn)行SPI單次讀寫事務(wù)測(cè)試,然后再進(jìn)行數(shù)據(jù)包收發(fā)測(cè)試。
4.1 SPI單次讀寫事務(wù)的正確性測(cè)試
    在對(duì)Modem的內(nèi)部寄存器初始化之前,可利用SPI單次讀事務(wù)獲取Modem寄存器的內(nèi)容,并通過串口輸出顯示與Modem寄存器的復(fù)位值對(duì)比是否一致。接著利用SPI單次寫事務(wù),對(duì)Modem進(jìn)行初始化,初始化后,再把修改后的Modem寄存器的內(nèi)容通過串口輸出顯示,與修改值比較,即可得出SPI寫事務(wù)是否正確。
4.2 物理層數(shù)據(jù)包的收發(fā)測(cè)試
    物理層數(shù)據(jù)包的收發(fā)測(cè)試需要一個(gè)發(fā)送節(jié)點(diǎn)和一個(gè)接收節(jié)點(diǎn)相互配合。對(duì)于能否正確收發(fā)需要測(cè)試兩種情況,發(fā)送節(jié)點(diǎn)分別發(fā)送奇數(shù)個(gè)和偶數(shù)個(gè)字節(jié)的數(shù)據(jù),看接收節(jié)點(diǎn)能否正確收到。這部分的測(cè)試是借助于串口調(diào)試工具來完成的,接收節(jié)點(diǎn)把收到的數(shù)據(jù)發(fā)往PC機(jī)串口顯示。
    物理層數(shù)據(jù)包收發(fā)的可靠性測(cè)試條件如下:一個(gè)發(fā)送節(jié)點(diǎn)和一個(gè)接收節(jié)點(diǎn),二者相距5 m左右,其中發(fā)送節(jié)點(diǎn)每次發(fā)送長(zhǎng)度為20 B的數(shù)據(jù),并且數(shù)據(jù)中的最后2 B作為一個(gè)16 bit的整數(shù),用來記錄發(fā)送次數(shù),每發(fā)送一次其值加1。發(fā)送節(jié)點(diǎn)何時(shí)開始發(fā)送數(shù)據(jù)由PC方測(cè)試軟件控制,接收節(jié)點(diǎn)負(fù)責(zé)接收數(shù)據(jù)并發(fā)給PC端測(cè)試軟件顯示,通過比較發(fā)送字節(jié)數(shù)與接收字節(jié)數(shù)以及數(shù)據(jù)中的發(fā)送次數(shù)字段,可以得出數(shù)據(jù)丟失情況。所有的測(cè)試數(shù)據(jù)會(huì)寫入后臺(tái)的ACCESS數(shù)據(jù)庫中,以供將來進(jìn)行數(shù)據(jù)的統(tǒng)計(jì)分析。試驗(yàn)中測(cè)試的一組數(shù)據(jù)如表1所示,丟包率不超過0.1%。

    本文研究了ZigBee協(xié)議物理層的SPI事務(wù)協(xié)議、Modem的工作模式等關(guān)鍵技術(shù)和編程方法,實(shí)現(xiàn)了基于單芯片ZigBee平臺(tái)的構(gòu)件化的底層硬件驅(qū)動(dòng)程序和物理層數(shù)據(jù)包收發(fā)程序。測(cè)試表明,此硬件平臺(tái)穩(wěn)定可靠、實(shí)現(xiàn)容易,不但方便了其他研究人員學(xué)習(xí)和實(shí)踐ZigBee技術(shù),降低了研究ZigBee技術(shù)的門檻,還由于采用了單芯片設(shè)計(jì)和構(gòu)件化設(shè)計(jì)方法,具有較高的可移植性和可重用性,使其很容易應(yīng)用到實(shí)際項(xiàng)目中。同時(shí)為ZigBee協(xié)議棧后續(xù)其他層的研究和實(shí)現(xiàn)打下了基礎(chǔ),并為其他協(xié)議的應(yīng)用研究提供了參考。
參考文獻(xiàn)
[1] 劉新,吳秋峰.無線個(gè)域網(wǎng)技術(shù)及相關(guān)協(xié)議[J].計(jì)算機(jī)工程,2006,32(22):102-103.
[2] 吳光榮,章劍雄.ZigBee網(wǎng)絡(luò)系統(tǒng)節(jié)點(diǎn)硬件設(shè)計(jì)與實(shí)現(xiàn)[J].杭州電子科技大學(xué)學(xué)報(bào),2008,28(4):49-52.
[3] IEEE. Wireless Medium Access Control (MAC) and Physical Layer(PHY) specifications for low-rate wireless personal area networks[S]. IEEE Std 802.15.4-2006, September 2006.
[4] IEEE. Wireless medium access control(MAC) and physical layer(PHY) specifications for low-rate wireless personal area networks[S]. IEEE Std 802.15.4-2003, October 2003.
[5] ZigBee Alliance. ZigBee specification[EB/OL]. http://www.zigbee. org/en/spec-download, 2007.
[6] Freescale. MC13213: 2.4GHz RF transceiver and 8-bit MCU with 60K of flash for ZigBee applications[EB/OL]. http://www.freescale.com/webapp/sps/site/prod_summary. jsp?code=MC13213&nodeId=0106B9869925657103, 2009.
[7] Freescale. MC13224V: MC1322x platform in a package[EB/OL]. http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=MC13224V&nodeId=0106B9869925657103, 2009.
[8] Freescale. MC13213RM. pdf[DB/OL]. http: //www. freescale. com/, 2009.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。