zigbee通訊技術複習筆記

語言: CN / TW / HK

這門課對於我一個學嵌入式的來說,還是比較重要的,所以我還是以老師給出的大綱為主體,好好複習一下!

題型:選擇題24x1.5 判斷10x1 填空15x1 簡答4x5 程式1x5 另外一個設計題1x14

每個標題前半部分是老師的提綱知識點,補充下面是我看到的可能比較重要的或者可以瞭解的。

WPAN及ZigBee基礎

  1. Zigbee、藍芽、IEEE802.11b(WiFi)標準都是工作在2.4G頻段的無線通訊標準;Zigbee主要用在短距離無線控制系統,傳輸少量的控制資訊;(P2)
  2. 短距離無線網路主要分為:無線區域網(WLANs)和無線個域網(WPANs)(P3)
  3. 無線個域網所對應的通訊協議:(P3)
    HR-WPANS:802.15.3
    MR-WPANS:藍芽
    LR-WPANS(低速率無線個域網):802.15.4


  4. Zigbee最大傳輸速率:250kbps。 ZigBee可工作在2.4GHz(全球流行)、868MHz(歐洲流行) 和915 MHz(美國流行)3個頻段上,分別具有最高250kbit/s、20kbit/s和40kbit/s的傳輸速率,它的傳輸距離在10-75m的範圍內, 但可以繼續增加 。
  5. Zigbee無線網路分層: 物理層(PHY) 介質訪問控制(MAC)網路層(NWK)應用程式支援子層(APS) 應用層(APL)(P4)
    其中802.15.4 定義了物理層和介質訪問控制層Zigbee協議定義了網路層、應用程式支援子層和應用層(具體介紹見下面的補充)
  6. Zigbee特點:(自組網)(P5)
    高可靠性:採取了碰撞避免策略;MAC層採用了完全確認的資料傳輸模式;
    低成本、低功耗 :ZigBee模組的複雜度不高,ZigBee協議免專利費,再加之使用的頻段無需付費,所以它的成本較低;ZigBee的傳輸速率低,發射功率僅為1mW,而且採用了休眠模式,功耗低
    高安全 :採用高階加密標準(AES 128) 的對稱密碼;
    低資料速率



  7. Zigbee裝置型別:(P5)
    協調器(ZC Coordinator):主要負責無線網路的建立與維護;(每個ZigBee網路必須有一個)
    路由器(ZR Router):主要負責無線網路的路由;( (1)允許其他網路裝置加入 (2)多跳路由 (3)協助電池供電的子節點通訊(4)自己作為終端節點應用)
    終端節點(ZED End-device):主要負責無線網路資料的採集。(1)向路由節點傳遞數(2)沒有路由功能(3)低功耗(Zigbee的低功耗主要體現在這裡)(4)可選擇睡眠與喚醒。(路由因不斷轉發資料需電源供電,終端節點電池供電))


  8. Zigbee工作在ISM(工業、科學和醫療)頻帶,共規定了27個通道:(P7)
    2.4GHz頻段 共16個通道,通訊速率為250kbps
    915MHz頻段 共10個通道,通訊速率為40kbps
    896MHz頻段 共1個通道,通訊速率為20kbps


  9. Zigbee網路拓撲結構:星型;網路型;簇狀;(P8)
  10. Zigbee應用為:週期性 ;反覆; 間斷資料採集應用
  11. Zigbee模組開發一般包括兩個檔案:.h標頭檔案和.c檔案(P)
    .h檔案可理解為一份介面描述檔案;
    .c檔案主要功能是對.h檔案中宣告的外部函式進行具體實現。

補充:

  1. Zigbee網路中傳輸的三類資料:
    週期性資料:如家庭中水、電、氣三表資料的傳輸;
    間斷性資料:如電燈、家用電器的控制等資料的傳輸;
    反覆性的低反應時間的資料:如滑鼠、操作杆傳輸的資料。


  2. ZigBee裝置分類
    全功能裝置(FFD):可以擔任網路協調者,形成網路,讓其它的FFD或是精簡功能裝置(RFD)連結,FFD具備控制器的功能,可提供資訊雙向傳輸
    ~附帶由標準指定的全部 802.15.4 功能和所有特徵
    ~更多的儲存器、計算能力可使其在空閒時起網路路由器作用。
    ~也能用作終端裝置
    精簡功能裝置(RFD):RFD只能傳送資訊給FFD或從FFD接收資訊。
    ~附帶有限的功能來控制成本和複雜性
    ~在網路中通常用作終端裝置。
    ~ZigBee相對簡單的實現自然節省了費用。RFD由於省掉了記憶體和其他電路,降低了ZigBee部件的成本,而簡單的8位處理器和小協議棧也有助於降低成本。







Zigbee裝置型別與角色對應關係
在這裡插入圖片描述
3. ZigBee協議架構
物理層功能:PHY層由射頻收發器以及底層的控制模組構成;
1. 啟用和休眠射頻收發器;
2. 通道能量檢測(energy detect);
3. 檢測接收資料包的鏈路質量指示(link quality indication , LQI);
4. 空閒通道評估(clear channel assessment, CCA);
5. 收發資料。
資料鏈路層功能:MAC子層為高層訪問物理通道提供點到點通訊的服務介面
1. 協調器產生併發送信標幀,普通裝置根據協調器的信標幀與協議器同步;
2. 支援PAN網路的關聯(association)和取消關聯(disassociation)操作;
3. 支援無線通道通訊安全;
4. 使用CSMA-CA(載波偵聽多路訪問/衝突避免)機制訪問通道;
5. 支援時槽保障(guaranteed time slot, GTS)機制;
6. 支援不同裝置的MAC層間可靠傳輸。
網路層功能:
1. ZigBee網路層的主要功能就是提供一些必要的函式,確保ZIgBee的MAC層(IEEE 802.15.4-2003)正常工作,並且為應用層提供合適的服務介面。為了嚮應用層提供其介面,網路層提供了兩個必須的功能服務實體,它們分別為資料服務實體管理服務實體
2. 網路層資料實體(NLDE)通過網路層資料服務實體服務接入點(NLDE-SAP)提供資料傳輸服務
3. 網路層管理實體(NLME)通過網路層管理實體服務接入點(NLME-SAP)提供網路管理服務。網路層管理實體利用網路層資料實體完成一些網路的管理工作,並且,網路層管理實體完成對網路資訊庫(NIB)的維護和管理。
應用會聚層功能:該層主要負責把不同的應用對映到ZigBee網路上,具體而言包括:
1. 安全與鑑權
2. 多個業務資料流的會聚
3. 裝置發現
4. 服務發現























4.TCP/IP結構對應OSI結構: 在這裡插入圖片描述
5. Z-Stack協議棧檔案組織結構介紹
在這裡插入圖片描述

CC2530晶片相關

  1. CC2530微控制器是一款完全相容8051核心,支援802.15.4協議的無線射頻微控制器(P30)
    CC2530的Flash(非易失性儲存器)容量可選: 32KB 64KB 128KB 256KB
    CC2530有兩個晶振: 32MHz 晶振 32.768KHz(無線通訊時必須採用外部32M晶振

  2. I/O口控制
    CC2530內部自帶溫度感測器:
    使用步驟:
    1、使能溫度感測器
    2、連線溫度感測器到ADC
    3、初始化ADC,確定參考電壓、解析度等,啟動ADC讀取溫度資料
    補充:





Zigbee地址相關

  1. 裝置地址:(P134)
    64位IEEE地址:長地址又稱 MAC地址擴充套件地址(全球唯一)
    16位網路地址:短地址 又稱邏輯地址(協調器地址為0x0000,其他裝置入網時由協調器分配)(1)在網路中標識不同裝置;(2)在網路資料傳輸時指定目的地址和源地址;

  2. 網路地址:唯一標示網路中的一個節點(用網路地址來區分不同的節點);(P135)

  3. 網路地址最多可以分配65536個節點,地址分配取決於整個網路的架構,整個網路的架構由一下3個值決定:1、網路最大深度 2、每個父節點擁有的孩子節點最大數目 3、每個父節點擁有的孩子節點路由器的最大數目
    同一父節點相連的終端節點的網路地址是連續的
    同一父節點相連的路由器節點的網路地址通常是不連續的

  4. 埠:每個節點上最多支援240(1-240)個埠,每個節點上的所有埠共用一個發射/接收天線(用埠來區分同一節點的埠);

  5. PANID:Zigbee網路號 可手動設定(或自動隨機生成),如果指定的PANID被佔用則自動加1。
    ~PANID範圍是0X0001----0XFFFF;
    ~可以通過給不同的網路指定不同的網路ID號來區分網路,避免干擾;
    ~如果設定為0XFFFF,那麼協調器則隨機產生一個值作為自己的PANID;


    非易失性快閃記憶體條目ID號(NV操作用到的ID則定義在0x0201~0x0FFF 範圍內!) 在這裡插入圖片描述

  6. 資料傳送:呼叫**AF_DataRequest()**函式通過天線傳送資料(P139)

afStatus_t  AF_DataRequest( afAddrType_t *dstAddr, 
												endPointDesc_t *srcEP,
                          						uint16 cID, 
                          					    uint16 len, 
                          						uint8 *buf, 
                          						uint8 *transID,
                          						uint8 options,
                          						uint8 radius )
  1. 資料接收:呼叫**osal_msg_receive()**函式從訊息佇列中接收一個訊息(包含事件與資料)
    uint8 *osal_msg_receive( uint8 task_id )

  2. 資料儲存位置(結構):(P130)

typedef struct
{
   
   
  osal_event_hdr_t hdr;     /* OSAL Message header */
  uint16 groupId;           /* Message's group ID - 0 if not set */
  uint16 clusterId;         /* Message's cluster ID */
  afAddrType_t srcAddr;     /* Source Address, if endpoint is STUBAPS_INTER_PAN_EP,
                              				 it's an InterPAN message */
  uint16 macDestAddr;       /* MAC header destination short address */
  uint8 endPoint;           /* destination endpoint */
  uint8 wasBroadcast;       /* TRUE if network destination was a broadcast address */
  uint8 LinkQuality;        /* The link quality of the received data frame */
  uint8 correlation;        /* The raw correlation value of the received data frame */
  int8  rssi;               /* The received RF power in units dBm */
  uint8 SecurityUse;        /* deprecated */
  uint32 timestamp;         /* receipt timestamp from MAC */
  afMSGCommandFormat_t cmd; /* Application Data */
} afIncomingMSGPacket_t;

typedef struct
{
   
   
  byte   TransSeqNumber;
  uint16 DataLength;               // Number of bytes in TransData
  byte  *Data;
} afMSGCommandFormat_t;
  1. OSAL(系統抽象層)是一種支援多工執行的系統資源分配機制(P72)
    OSAL主要功能:
    任務註冊、初始化和啟動
    任務間的同步、互斥
    中斷處理
    儲存器分配和管理




補充:

  1. IEEE802.15.4網路的建立過程
    在這裡插入圖片描述
  2. int main( )主函式實現硬體的初始化其中包括
    在這裡插入圖片描述

事件驅動

  1. 首先記住 任務輪詢、事件驅動 必考;

  2. Zigbee將事件和任務的事件處理函式聯絡方法:(P74)
    1、建立一個事件表,儲存各個任務的對應事件
    2、建立另一個函式表,儲存各個任務事件處理函式地址
    3、將兩張表建立某種對應關係


  3. OSAL工作原理(輪詢)osal_start_system(void)
    通過tasksEvents指標訪問事件表的每一項,如果有時間發生,則查詢函式表找到事件處理函式進行處理,處理完後,繼續訪問事件表,檢視是否有事件發生,無限迴圈;(P75)

  4. 協議棧定義的事件成為系統強制事件:(P80)
    AF_INCOMING-MSG-CMD
    ZDO_STATE_CHANGE
    ZDO_CB_MSG
    AF_DATA_CONFIRM_CMD



  5. Zigbee協議棧為半開源

  6. Zigbee協議棧串列埠操作(P85)
    串列埠基本操作步驟:
    1、初始化串列埠,包括設定波特率、中斷等
    2、向傳送緩衝區傳送資料或從接收緩衝區讀取資料
    操作函式:



 uint8    HalUARTOpen(uint8 port,halUARTCfg_t *config); //初始化串列埠(設定波特率、中斷等)
 uint16  HalUARTRead(uint8 port,uint8 *buf,uint16 len); //從接受緩衝區讀取資料
 uint16  HalUARTWrite(uint8 port,uint8* buf,uint16  len);// 向緩衝區傳送資料
  1. 串列埠回撥函式:回撥函式不是由該函式實現方直接呼叫的,而是在特定的事件或條件發生的,由另外的一方呼叫,用於對該事件或條件進行響應。因此,串列埠回撥函式是在有串列埠操作(事件)發生時(自動觸發)呼叫的;(P89)

  2. 當應用有串列埠操作時,應該對應用程式模組的工程屬性的編譯預處理的Definedsymbols下拉列表框中輸入“HAL_UART=TRUE”。(即用條件編譯來控制是否編譯與該模組相關的程式,目的是為了節約儲存資源);(P93)

  3. 程式中波特率的設定要與上位機(如串列埠助手)一致;

  4. Zigbee協議棧NV操作(P120)
    NV(Non Volatile),即非易失性儲存器(Flash儲存器),即系統掉電,儲存器中的資料不掉失。主要用途儲存網路的配置引數,或掉電後,上電該節點還是加入原來的網路並且該節點的網路地址就可以從NV讀取。
    NV儲存器主要的操作有初始化NV儲存器、讀NV儲存器、寫NV儲存器。這些都在OSAL資料夾下中的OSAL_Nv.h和OSAL.h檔案中定義和實現。
    下面三個操作函式分別是:
    NV初始化函式:uint8 osal_nv_item_init( uint16 id, uint16 len, void *buf ),NV儲存器將該儲存器分成多個條目,每個條目都有一個ID號。 條目的分類見OSAL資料夾中的ZcomDef.h檔案,其中要知道的是:使用者應用程式定義的條目地址範圍為是0x0201到0x0FFF;
    NV寫操作函式:uint8 osal_nv_write( uint16 id, uint16 ndx, uint16 len, void *buf );
    NV讀取函式:uint8 osal_nv_read( uint16 id, uint16 ndx, uint16 len, void *buf );
    第一個引數:uint16:NV條目ID號
    第二引數:舉例條目開始的偏移量
    第三引數:要寫入的資料長度
    第四引數:執行要存放寫入或讀取資料函式緩衝區的指標









  5. 使用者只能使用條目ID範圍0x0201~0x0FFF
    可在OSAL資料夾下的ZcomDef.h檔案中新增自己的條目
    如:#define Test_NV 0x0201

  6. **函式名要考:**
    **事件新增函式**:osal_set_event()
    			函式原型:osal_set_event(  taskID, SYS_EVENT_MSG );
    			引數說明:  taskID:任務
    							 SYS_EVENT_MSG :事件
    **定時器函式**:osal_start_timerEx() (具有開啟和停止一個定時器的功能,定時器能用**1毫秒**的增量進行設定)
    			函式原型: uint8 osal_start_timerEx( uint8 taskID, uint16 event_id, uint16 timeout_value);
    			引數說明:taskID:任務
    							  event_id:事件
    							  timeout_value:定時毫秒數
    
    **記憶體拷貝函式**:osal_memcpy()
    **記憶體比較函式**:osal_memcmp()
    **字串長度函式**:osal_strlen()
    
    **無線傳送函式**:AF_DataRequest( afAddrType_t *dstAddr, endPointDesc_t *srcEP,
                       uint16 cID, uint16 len, uint8 *buf, uint8 *transID,
                       uint8 options, uint8 radius )
    **訊息接收函式**:uint8 *osal_msg_receive( uint8 task_id )
    

補充:

  1. SYS_EVENT_MSG是系統事件,也是協議棧已經定義好的系統事件。
    在檔案ZcomDef.h中,事件號是一個16bit的常量,使用叫作獨熱碼(one-hot code)編碼,也是一個位表示一個事件,方便進行event的提取,這樣一個task最多可以有16個event,SYS_EVENT_MSG已經佔用了0x8000,故自定義的事件只能有15個
  2. 事件的提取和清除可以用簡單的位操作指令實現,事件的提取可以用位操作 events & SYS_EVENT_MSG,事件的清除可以用異或操作實現,evets ^ SYS_EVENT_MSG;

Zigbee通訊相關

  1. Zigbee協議棧中的規範(Profile)和簇(Cluester)
    Zigbee網路中進行資料收發都是建立在應用規範基礎上的。每個應用規範都有一個ID來標示。在一個規範(Profile)下又提出了簇(Cluester)的概念,這個Cluester要理解為一個應用領域下的一個特定物件。簇是由命令組成的。

  2. 同一規範下的傳送命令(簇號)和接受命令(簇號)要相同才能通訊;

  3. Zigbee網路通訊必須建立在具體裝置節點的具體通訊埠:
    網路地址可以描述一個節點,使用者可使用簡單描述符來描述一個埠。(使用者可用的埠號是1-240)

  4. Zigbee通訊模式:點播 廣播 組播(這一點重點,我覺得可能考設計題和程式題,所以我會在下面著重補充)
    點播
    傳送模式:Addr16Bit
    傳送目的埠:目的節點的簡單描述符設定的工作埠
    傳送地址:目的節點的網路地址
    廣播
    傳送模式:AddrBroadcast
    傳送目的埠:目的節點的簡單描述符設定的工作埠
    傳送地址: 0xFFFF 全網傳送 包括休眠節點
    0xFFFD 只發往休眠節點
    0xFFFC 發往所有路由節點
    組播(同一組的節點才能通訊)
    傳送模式:AddrGroup
    傳送目的埠:目的節點的簡單描述符設定的工作埠
    傳送地址:組ID













  5. #include “aps_groups.h”
    1、設定組物件(ID 和 name)
    2、加入物件組 aps_AddGroup()
    3、退出組


  6. Zigbee協議棧網路管理
    Zigbee協議棧實現網路管理的函式:
    獲得該節點的網路地址:uint16 NLME_GetShortAddr(void)
    獲得該節點的MAC地址:byte * NLME_GetExtAddr(void)


     	獲得該節點的父節點網路地址:uint16 NLME_GetCoordShortAddr(void)
     	獲得該節點的父節點MAC地址:void NLME_GetCoordExtAddr(byte *buf)
    

藍芽

  1. 採用高速跳頻擴充套件,實現語音和資料在短距離上的穩定無縫無線連線
    在2.4GHz的ISM頻帶上設立79個頻寬為GHz的通道,用每秒鐘切換1600次的頻率的跳頻(Hobbing)擴充套件技術實現資訊的收發。
    藍芽系統中的功能模組分為:無線射頻單元、鏈路控制單元、鏈路管理單元、軟體結構

  2. 微微網: 1主裝置 7從裝置
  3. 藍芽技術採用了全開放的框架結構
  4. 藍芽技術的系統結構分為三大部分:
    1.底層硬體模組
    2.中間協議層
    3.高層應用


  5. 藍芽協議分為四層:
    1.核心協議:BaseBand、LMP、L2CAP、SDP;
    2.電纜替代協議:RFCOMM;
    3.電話傳送控制協議:TCS-Binary、AT 命 令 集;
    4.選用協議:PPP、UDP/TCP/IP、OBEX、WAP、vCard、vCal、IrMC、 WAE。



  6. 近場通訊NFC 及WIFI(瞭解一下,不考)

下面我整理了一下實驗的一些核心程式碼,大家可以結合教材一起看,應該會在程式碼題和設計題裡面考: