色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 手機與無線通信 > 設計應用 > 基于MC13213的單芯片ZigBee平臺的物理層協(xié)議研究與實現(xiàn)

          基于MC13213的單芯片ZigBee平臺的物理層協(xié)議研究與實現(xiàn)

          作者: 時間:2017-06-12 來源:網(wǎng)絡 收藏

          技術是一種近距離、低復雜度、低功耗、低數(shù)據(jù)速率、低成本的雙向技術,該技術基于IEEE 802.15.4標準,由成立于2001年8月的聯(lián)盟提出。2004年12月,聯(lián)盟制定了ZigBee SpecificationV1.0。至今ZigBee技術已經(jīng)得到了廣泛的發(fā)展和應用。目前,我國絕大部分的ZigBee硬件都是由國外廠商設計和生產(chǎn)的。早期的ZigBee硬件都是微控制器(MCU)和IEEE 802.15.4射頻芯片分離的。隨著片上系統(tǒng)(SoC)的出現(xiàn),ZigBee硬件也發(fā)展到了在一個芯片內(nèi)部集成了MCU和射頻芯片,如Freescale公司的MC1321x,TI公司的CC243x,Ember公司的EM250以及Jennic公司的JN5121和JN5139等[1-2]。其中,F(xiàn)reescale公司的MC1321x降低了ZigBee開發(fā)者對硬件射頻電路的要求,加速了ZigBee系統(tǒng)的開發(fā),同時具有較高的穩(wěn)定性和可靠性。

          本文引用地址:http://cafeforensic.com/article/201706/353110.htm

          為了更好地推廣應用ZigBee,本文對物理層協(xié)議及編程方法進行了深入研究。物理層是ZigBee的關鍵技術,完整的ZigBee協(xié)議包括應用層(APL)、網(wǎng)絡層(NWK)、媒介接入控制層(MAC)和物理層(PHY)等。物理層通過操作底層硬件為上層提供服務接口,因此物理層的穩(wěn)定可靠關系到整個協(xié)議棧的健壯性,是其他層設計的基礎。

          采用嵌入式構件化的設計方法,可提高物理層設計的可移植性和可重用性,目前很少有人做這方面的工作。本文采用射頻片上系統(tǒng)(SoC)——MC13213設計了一個較通用的ZigBee硬件平臺,分析和實現(xiàn)了ZigBee協(xié)議物理層,按照構件化的方法進行設計,并對構件進行了詳細的測試,這不僅為基于物理層的簡單應用提供了方法,而且為后續(xù)的MAC層的應用打下了基礎。

          1 ZigBee物理層功能概述

          ZigBee工作在免申請的工業(yè)科學醫(yī)療頻段。IEEE 802.15.4標準中定義了兩個可用的物理層:基于2.4 GHz頻段的“短距離”實現(xiàn)和基于868/915 MHz頻段的“長距離”實現(xiàn),兩者都使用直接序列擴頻(DSSS)技術。中國目前的ZigBee工作頻段為2.4 GHz。

          ZigBee物理層通過射頻固件和射頻硬件為MAC層和物理無線信道之間提供了服務接入點SAP(Service Access Point)。

          IEEE 802.15.4定義的物理層參考模型如圖1所示。其中PD-SAP(PHY Data Service Access Point)是物理層提供給MAC層的數(shù)據(jù)服務接口,PLME-SAP(Physical Layer Management Entity-Service Access Point)是物理層提供給MAC層的管理服務接口,RF-SAP是由底層無線射頻驅動程序提供給物理層的接口。

          物理層主要完成以下工作:激活和禁用射頻收發(fā)器,對信道進行能量檢測ED(Energy Detect),提供所接收數(shù)據(jù)包的鏈路質量指示LQI(Link Quality Indication),空閑信道評估CCA(Clear Channel Assessment),信道頻率選擇,數(shù)據(jù)發(fā)送和接收等。

          2 MC13213ZigBee物理層編程結構

          Freescale公司推出的ZigBee解決方案——MC13213采用SoC技術,在9 mm×9 mm的LGA封裝內(nèi)集成了HCS08 MCU和遵循IEEE 802.15.4標準的第二代無線射頻收發(fā)器MC1320x[3-4] (后文中將用MCU和Modem分別代表MCU模塊和射頻收發(fā)器模塊)。具有4 KB的RAM、60 KB的Flash,1個串行外設接口(SPI),2個異步串行通信接口(SCI),1個鍵盤中斷模塊(KBI),2個定時器/脈寬調制TPM(Timer/PWM)模塊,1個8通道10位的模數(shù)轉換器(ADC),以及多達32個的GPIO口等[5]。Modem內(nèi)部已經(jīng)集成了功率放大器PA(Power Amplifier)、低噪聲放大器LNA(Low Noise Amplifier)和收/發(fā)開關(T/R switch),這在很大程度上降低了系統(tǒng)成本和射頻電路的設計難度。

          2.1 Modem與MCU的交互方式

          Modem可以通過SPI接口、IRQ中斷請求以及幾個狀態(tài)和控制信號與主控MCU實現(xiàn)交互,如圖2所示。



          SPI命令通道是Modem與MCU之間的主要交互方式,使用標準的4線SPI進行通信。MCU通過SPI命令結構可以讀/寫Modem的寄存器內(nèi)容、設置Modem的初始化參數(shù)、讀取Modem的狀態(tài)和控制信息。IRQ中斷為Modem提供了一種通知MCU有關Modem內(nèi)部所發(fā)生事件的方法,這樣就免除了MCU一直輪詢Modem,降低了MCU的運行開銷。ATTN用來把Modem從低功耗模式喚醒,RXTXEN用來允許Modem的發(fā)送、接收和CCA等操作。GPIO1引腳反映了Modem收發(fā)機是否忙,GPIO2引腳可以反映所接收數(shù)據(jù)包的循環(huán)冗余校驗CRC(Cyclical Redundancy Check)是否有效或者反映CCA的結果[6]。

          2.2 Modem的SPI事務操作

          SPI事務是在標準SPI協(xié)議基礎上實現(xiàn)的一個擴展SPI協(xié)議。由于Modem中的寄存器和RAM大小都配置為16 bit即一個字(word)的寬度,所以它規(guī)定了每次SPI事務過程必須由1 B的頭(header)和2×N B的載荷(payload)組成,每個字節(jié)對應一個SPI脈沖(SPI burst),其中1≤N≤64,且為整數(shù),代表每個SPI事務中所包含的字(word)數(shù),當N=1時,稱為SPI單次事務(SPI singular transaction);其他情況稱為SPI循環(huán)事務(SPI recursive transaction)。header的最高位為R/W位,表示操作類型是讀還是寫;header的低6位是寄存器地址,表示了SPI操作的64個可能的寄存器地址(注意,有一部分寄存器沒有實現(xiàn))。

          2.3 Modem的數(shù)據(jù)傳輸模式

          Modem定義了兩種數(shù)據(jù)傳輸模式:Stream模式和Packet模式。在Stream模式中,數(shù)據(jù)的發(fā)送和接收是逐字(word-by-word)處理的。而在Packet模式中,發(fā)送時,發(fā)送方先將待發(fā)送數(shù)據(jù)緩存在Modem的發(fā)送緩沖區(qū)(TX RAM)中,然后再發(fā)送;接收時,接收方先在接收緩沖區(qū)(RX RAM)中緩存收到的整個數(shù)據(jù)包,然后再通知MCU來讀取。雖然Packet模式下數(shù)據(jù)的接收有稍許延遲,但其降低了對MCU的資源要求[7],在本協(xié)議棧實現(xiàn)過程中使用這種數(shù)據(jù)傳輸模式。

          3 物理層構件設計

          基于MC13213單芯片的ZigBee平臺實現(xiàn)物理層協(xié)議構件程序的設計,首先必須編寫底層硬件驅動程序,然后設置Modem的運行方式,再進行數(shù)據(jù)包收發(fā)程序的設計等。

          3.1 底層硬件驅動程序的實現(xiàn)

          硬件驅動程序介于底層硬件和ZigBee協(xié)議棧之間,可以使得運行于硬件之上的ZigBee協(xié)議棧更易于維護和移植。其中芯片初始化程序對MCU的一些硬件模塊進行正確的配置,以保證MCU可以正常工作。這里所做的主要配置包括:關閉看門狗,設置內(nèi)部時鐘模塊的校準(trim)值,配置MCU的時鐘模塊等。

          初始化完成后會涉及到SPI循環(huán)事務的實現(xiàn),下面以Packet模式下發(fā)送和接收3 B數(shù)據(jù)的完整過程來描述對Modem RX/TX RAM的SPI循環(huán)讀寫操作,如圖3所示。其中,RX/TX RAM的長度為128 B。圖中假定MCU均是以字節(jié)數(shù)組的形式來保存待發(fā)送或接收到的數(shù)據(jù)。

          從圖3可以看出,讀/寫RAM時的SPI通信是最高有效位優(yōu)先(MSB-first)的,而在無線發(fā)送/接收過程中是最低有效位優(yōu)先LSB-first(Least Significant Bit first)的,但在編寫SPI循環(huán)讀寫操作時并不需要考慮上述兩種順序,也并不會導致接收方在接收發(fā)送方的數(shù)據(jù)時產(chǎn)生比特位順序的改變。

          需要特別注意的是,由于SPI事務要求所有的數(shù)據(jù)傳輸都是按16 bit寬度進行的,當發(fā)送數(shù)據(jù)是奇數(shù)個字節(jié)時,其最后一字節(jié)數(shù)據(jù)要進行特別處理,即需填充一個任意字節(jié)以湊滿16 bit寬度,但是這個拼湊的字節(jié)和最后那個有效字節(jié)的發(fā)送順序必須按照圖3中的順序進行,即先發(fā)填充字節(jié),以保證在TX RAM中,最后一字節(jié)緊跟在前面的偶數(shù)個字節(jié)之后。而在最后一字節(jié)數(shù)據(jù)之前的偶數(shù)個字節(jié)數(shù)據(jù)由于是16 bit寬度的倍數(shù),所以在發(fā)送每個字時對字節(jié)發(fā)送順序沒有特別要求,只要接收方和發(fā)送方按照同一種順序收發(fā)各字節(jié)即可。

          3.1.1 使用SPI循環(huán)寫事務向TX RAM中寫入待發(fā)送數(shù)據(jù)

          執(zhí)行這個操作之前,待發(fā)送數(shù)據(jù)長度應已經(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)計算寫入待發(fā)送數(shù)據(jù)所需要的SPI脈沖個數(shù),注意:

          ①CRC字節(jié)不需寫入到TX RAM中,它是由硬件自動產(chǎn)生的;

          ②待發(fā)送數(shù)據(jù)的最大長度為125 B(去掉2 B的CRC);

          ③必須為偶數(shù)個字節(jié),若數(shù)據(jù)長度為奇數(shù)個字節(jié),應加1使其變?yōu)榕紨?shù)。

          (3)做一個SPI循環(huán)寫事務來寫入數(shù)據(jù):

          ①MCU拉低SPI模塊的片選信號CE,選中Modem;

          ②MCU向Modem發(fā)送第一個SPI脈沖,其中R/W位應為0,表示寫操作;

          ③按照(2)中計算的SPI脈沖個數(shù),寫入待發(fā)送數(shù)據(jù);

          ④MCU拉高CE,使片選失效;

          (4)整個寫操作結束。

          3.1.2 使用SPI循環(huán)讀事務讀取RX RAM中的已接收數(shù)據(jù)

          MCU讀取RX RAM中的已接收數(shù)據(jù)的一般流程如下:

          (1)MCU讀Modem的RX_Status寄存器rx_pkt_latch[6:0]字段以獲取數(shù)據(jù)長度。

          (2)計算讀取RX RAM中的已接收數(shù)據(jù)所需要的SPI脈沖個數(shù):

          ①通常不讀取2 B的CRC,所以數(shù)據(jù)長度應減去2;

          ②若數(shù)據(jù)長度為奇數(shù)個字節(jié),應加1使其變?yōu)榕紨?shù);

          ③按照Modem SPI事務協(xié)議的規(guī)定,應丟棄讀到的第一個字(word),因為在第一次讀取時,內(nèi)部RAM的地址還沒有準備好,這樣又導致了數(shù)據(jù)長度加2。

          (3)做一個SPI循環(huán)讀事務來讀取數(shù)據(jù):

          ①MCU拉低SPI模塊的片選信號CE,選中Modem;

          ②MCU向Modem發(fā)送第一個SPI脈沖,其中R/W位應為1,表示讀操作;

          ③按照(2)中計算的SPI脈沖個數(shù)讀取所有數(shù)據(jù)。注意,協(xié)議規(guī)定應丟棄讀到的第一個字(word)。當數(shù)據(jù)為奇數(shù)個字節(jié)時,應丟棄圖3中的那個填充字節(jié);

          ④MCU拉高CE,使片選失效。

          (4)整個讀操作結束。

          3.2 設置Modem運行模式

          Modem有多種運行模式,主要可分成兩類:活動模式和低功耗模式。其中活動模式包括Idle模式、Receive(RX)模式、Transmit(TX)模式和CCA/ED模式;低功耗模式包括Off模式、Hibernate模式、Doze模式[8]。

          Idle模式是Modem退出任何其他模式后的默認模式,也是進入任何其他模式的初始模式;RX、TX模式分別為Modem接收、發(fā)送數(shù)據(jù)時所處的工作模式;CCA/ED模式為空閑信道評估/能量檢測時所處的工作模式,用來評估信道是否空閑或測量信道的當前能量值[8]。

          收發(fā)機狀態(tài)設置是通過調用設置收發(fā)狀態(tài)函數(shù)實現(xiàn)的,其函數(shù)頭如下:

          //-----------------------------------------*

          //功能: 設置收發(fā)機狀態(tài)函數(shù),把收發(fā)機設置成用戶期望的狀態(tài)

          //參數(shù): nDesiredStatus - 用戶期望狀態(tài)

          //返回: SUCCESS - 成功設置成指定模式;

          // 等于用戶期望模式-收發(fā)機之前就處于用戶期望狀態(tài);

          // 其他 - 表示執(zhí)行失??;

          //說明: 無

          //----------------------------------------*

          INT8U PLMESetTRXState(INT8U nDesiredStatus);

          3.3 物理層數(shù)據(jù)包的收發(fā)

          物理層數(shù)據(jù)稱為物理層數(shù)據(jù)單元PPDU(PHY Protocol Data Unit),包括同步包頭、物理層包頭和物理層載荷三部分[3],如圖4所示。其中同步包頭可以使得接收設備鎖定在比特流上,并與比特流保持同步;物理層包頭包含了數(shù)據(jù)包的長度信息,在0~127之間;物理層服務數(shù)據(jù)單元PSDU(PHY Service Data Unit)也稱物理層載荷,攜帶MAC層的幀信息,即MAC層協(xié)議數(shù)據(jù)單元MPDU(MAC Protocol Data Unit)。注意,CRC檢驗字節(jié)包含在PSDU中的最后兩字節(jié)中。

          物理層數(shù)據(jù)包的發(fā)送和接收比較簡單,對于MC13213的Modem來說,用戶所要做的只是調用SPI循環(huán)事務寫入或讀取物理層包頭和載荷,然后拉高RXTXEN引腳使能Modem的發(fā)送和接收即可。PPDU的同步包頭是由硬件自動添加的。

          (1)物理層數(shù)據(jù)包的發(fā)送

          Packet模式下發(fā)送數(shù)據(jù)包的過程是在物理層數(shù)據(jù)請求函數(shù)中實現(xiàn)的,在函數(shù)實現(xiàn)過程中,應根據(jù)要求,向上層通知數(shù)據(jù)發(fā)送結果的狀態(tài)信息。其函數(shù)頭如下:

          //------------------------------------------------*

          //功能: 數(shù)據(jù)請求函數(shù),生成物理層協(xié)議數(shù)據(jù)單元(PPDU)并無線發(fā)送出去

          //參數(shù): nPSDULength-物理層PSDU(即MAC層的MPDU)中的字節(jié)數(shù),

          // 長度要=aMaxPHYPacketSize(物理層最大數(shù)據(jù)包容量)

          // pPSDU - 指向物理層PSDU數(shù)據(jù)的指針

          //返回: SUCCESS - 發(fā)送成功;其他值 - 發(fā)送失敗

          //說明: 由MAC層調用

          //-----------------------------------------*

          INT8U PDDataRequest(INT8U nPSDULength, INT8U *pPSDU);

          (2)物理層數(shù)據(jù)包的接收

          一般情況下,Modem的接收機是關閉的。當Modem接收機處于打開狀態(tài)時有其他Modem在同一信道上發(fā)送數(shù)據(jù),則Modem會接收到這些數(shù)據(jù)。

          本協(xié)議棧實現(xiàn)Packet模式下接收數(shù)據(jù)包時,為物理層數(shù)據(jù)包實現(xiàn)了一個環(huán)形的接收緩沖區(qū),以保證數(shù)據(jù)的及時可靠接收,其結構定義如下:

          //PSDU最大數(shù)據(jù)包長度(不包括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ū)個數(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 其他編程相關說明

          空閑信道評估(CCA)用來判斷信道是否空閑。能量檢測(ED)用來測量目標信道中接收信號的功率強度,由于這個檢測本身不進行解碼操作,所以檢測結果是有效信號功率和噪聲信號功率之和。另外,鏈路質量指示(LQI)提供了接收數(shù)據(jù)包時無線信號的強度和信道質量信息。與能量檢測不同的是,LQI要對信號進行解碼,生成的是一個信噪比指標。這個信噪比指標和物理層數(shù)據(jù)單元一起提交給上層處理。Modem中RX_Status寄存器的cca_final[7:0]字段保存了以上操作的結果值。

          當Modem完成MCU指定的某個功能(如發(fā)送完成、接收完成、CCA/ED完成等),就會產(chǎn)生IRQ中斷,然后MCU會讀取Modem的IRQ狀態(tài)寄存器,針對不同的IRQ中斷類型分別進行處理。

          物理層管理實體(PLME)維護了物理層正常工作所必須的一些屬性參數(shù),包括物理層支持的信道列表、當前用于發(fā)送和接收的信道、物理層的發(fā)射功率以及CCA模式4個屬性。每個屬性都有一個唯一的屬性標識符,并且某些屬性還有一些特定的取值范圍。屬性的讀和寫分別由屬性設置和讀取函數(shù)來實現(xiàn),由于物理層的屬性較少,直接通過switch/case語句實現(xiàn)即可。

          4 物理層構件測試

          按照前面分析的ZigBee物理層編程結構編寫測試程序,可用于對物理層的構件功能進行測試。測試可先進行SPI單次讀寫事務測試,然后再進行數(shù)據(jù)包收發(fā)測試。

          4.1 SPI單次讀寫事務的正確性測試

          在對Modem的內(nèi)部寄存器初始化之前,可利用SPI單次讀事務獲取Modem寄存器的內(nèi)容,并通過串口輸出顯示與Modem寄存器的復位值對比是否一致。接著利用SPI單次寫事務,對Modem進行初始化,初始化后,再把修改后的Modem寄存器的內(nèi)容通過串口輸出顯示,與修改值比較,即可得出SPI寫事務是否正確。

          4.2 物理層數(shù)據(jù)包的收發(fā)測試

          物理層數(shù)據(jù)包的收發(fā)測試需要一個發(fā)送節(jié)點和一個接收節(jié)點相互配合。對于能否正確收發(fā)需要測試兩種情況,發(fā)送節(jié)點分別發(fā)送奇數(shù)個和偶數(shù)個字節(jié)的數(shù)據(jù),看接收節(jié)點能否正確收到。這部分的測試是借助于串口調試工具來完成的,接收節(jié)點把收到的數(shù)據(jù)發(fā)往PC機串口顯示。

          物理層數(shù)據(jù)包收發(fā)的可靠性測試條件如下:一個發(fā)送節(jié)點和一個接收節(jié)點,二者相距5 m左右,其中發(fā)送節(jié)點每次發(fā)送長度為20 B的數(shù)據(jù),并且數(shù)據(jù)中的最后2 B作為一個16 bit的整數(shù),用來記錄發(fā)送次數(shù),每發(fā)送一次其值加1。發(fā)送節(jié)點何時開始發(fā)送數(shù)據(jù)由PC方測試軟件控制,接收節(jié)點負責接收數(shù)據(jù)并發(fā)給PC端測試軟件顯示,通過比較發(fā)送字節(jié)數(shù)與接收字節(jié)數(shù)以及數(shù)據(jù)中的發(fā)送次數(shù)字段,可以得出數(shù)據(jù)丟失情況。所有的測試數(shù)據(jù)會寫入后臺的ACCESS數(shù)據(jù)庫中,以供將來進行數(shù)據(jù)的統(tǒng)計分析。試驗中測試的一組數(shù)據(jù)如表1所示,丟包率不超過0.1%。

          本文研究了ZigBee協(xié)議物理層的SPI事務協(xié)議、Modem的工作模式等關鍵技術和編程方法,實現(xiàn)了基于單芯片ZigBee平臺的構件化的底層硬件驅動程序和物理層數(shù)據(jù)包收發(fā)程序。測試表明,此硬件平臺穩(wěn)定可靠、實現(xiàn)容易,不但方便了其他研究人員學習和實踐ZigBee技術,降低了研究ZigBee技術的門檻,還由于采用了單芯片設計和構件化設計方法,具有較高的可移植性和可重用性,使其很容易應用到實際項目中。同時為ZigBee協(xié)議棧后續(xù)其他層的研究和實現(xiàn)打下了基礎,并為其他協(xié)議的應用研究提供了參考。

          參考文獻

          [1] 劉新,吳秋峰.無線個域網(wǎng)技術及相關協(xié)議[J].計算機工程,2006,32(22):102-103.

          [2] 吳光榮,章劍雄.ZigBee網(wǎng)絡系統(tǒng)節(jié)點硬件設計與實現(xiàn)[J].杭州電子科技大學學報,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=MC13213nodeId=0106B9869925657103, 2009.

          [7] Freescale. MC13224V: MC1322x platform in a package[EB/OL]. http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=MC13224VnodeId=0106B9869925657103, 2009.

          [8] Freescale. MC13213RM. pdf[DB/OL]. http: //www. freescale. com/, 2009.



          評論


          相關推薦

          技術專區(qū)

          關閉