zigbee通訊技術複習筆記
這門課對於我一個學嵌入式的來說,還是比較重要的,所以我還是以老師給出的大綱為主體,好好複習一下!
題型:選擇題24x1.5 判斷10x1 填空15x1 簡答4x5 程式1x5 另外一個設計題1x14
每個標題前半部分是老師的提綱知識點,補充下面是我看到的可能比較重要的或者可以瞭解的。
WPAN及ZigBee基礎
- Zigbee、藍芽、IEEE802.11b(WiFi)標準都是工作在2.4G頻段的無線通訊標準;Zigbee主要用在短距離無線控制系統,傳輸少量的控制資訊;(P2)
- 短距離無線網路主要分為:無線區域網(WLANs)和無線個域網(WPANs)(P3)
- 無線個域網所對應的通訊協議:(P3)
HR-WPANS:802.15.3
MR-WPANS:藍芽
LR-WPANS(低速率無線個域網):802.15.4 - Zigbee最大傳輸速率:250kbps。 ZigBee可工作在2.4GHz(全球流行)、868MHz(歐洲流行) 和915 MHz(美國流行)3個頻段上,分別具有最高250kbit/s、20kbit/s和40kbit/s的傳輸速率,它的傳輸距離在10-75m的範圍內, 但可以繼續增加 。
- Zigbee無線網路分層: 物理層(PHY) 介質訪問控制(MAC)網路層(NWK)應用程式支援子層(APS) 應用層(APL)(P4)
其中802.15.4 定義了物理層和介質訪問控制層;Zigbee協議定義了網路層、應用程式支援子層和應用層(具體介紹見下面的補充) - Zigbee特點:(自組網)(P5)
高可靠性:採取了碰撞避免策略;MAC層採用了完全確認的資料傳輸模式;
低成本、低功耗 :ZigBee模組的複雜度不高,ZigBee協議免專利費,再加之使用的頻段無需付費,所以它的成本較低;ZigBee的傳輸速率低,發射功率僅為1mW,而且採用了休眠模式,功耗低
高安全 :採用高階加密標準(AES 128) 的對稱密碼;
低資料速率 - Zigbee裝置型別:(P5)
協調器(ZC Coordinator):主要負責無線網路的建立與維護;(每個ZigBee網路必須有一個)
路由器(ZR Router):主要負責無線網路的路由;( (1)允許其他網路裝置加入 (2)多跳路由 (3)協助電池供電的子節點通訊(4)自己作為終端節點應用)
終端節點(ZED End-device):主要負責無線網路資料的採集。(1)向路由節點傳遞數(2)沒有路由功能(3)低功耗(Zigbee的低功耗主要體現在這裡)(4)可選擇睡眠與喚醒。(路由因不斷轉發資料需電源供電,終端節點電池供電)) - Zigbee工作在ISM(工業、科學和醫療)頻帶,共規定了27個通道:(P7)
2.4GHz頻段 共16個通道,通訊速率為250kbps
915MHz頻段 共10個通道,通訊速率為40kbps
896MHz頻段 共1個通道,通訊速率為20kbps - Zigbee網路拓撲結構:星型;網路型;簇狀;(P8)
- Zigbee應用為:週期性 ;反覆; 間斷資料採集應用;
- Zigbee模組開發一般包括兩個檔案:.h標頭檔案和.c檔案(P)
.h檔案可理解為一份介面描述檔案;
.c檔案主要功能是對.h檔案中宣告的外部函式進行具體實現。
補充:
- Zigbee網路中傳輸的三類資料:
週期性資料:如家庭中水、電、氣三表資料的傳輸;
間斷性資料:如電燈、家用電器的控制等資料的傳輸;
反覆性的低反應時間的資料:如滑鼠、操作杆傳輸的資料。 - 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晶片相關
- CC2530微控制器是一款完全相容8051核心,支援802.15.4協議的無線射頻微控制器(P30)
CC2530的Flash(非易失性儲存器)容量可選: 32KB 64KB 128KB 256KB
CC2530有兩個晶振: 32MHz 晶振 32.768KHz(無線通訊時必須採用外部32M晶振) - I/O口控制
CC2530內部自帶溫度感測器:
使用步驟:
1、使能溫度感測器
2、連線溫度感測器到ADC
3、初始化ADC,確定參考電壓、解析度等,啟動ADC讀取溫度資料
補充:
Zigbee地址相關
-
裝置地址:(P134)
64位IEEE地址:長地址又稱 MAC地址或 擴充套件地址(全球唯一)
16位網路地址:短地址 又稱邏輯地址(協調器地址為0x0000,其他裝置入網時由協調器分配)(1)在網路中標識不同裝置;(2)在網路資料傳輸時指定目的地址和源地址; -
網路地址:唯一標示網路中的一個節點(用網路地址來區分不同的節點);(P135)
-
網路地址最多可以分配65536個節點,地址分配取決於整個網路的架構,整個網路的架構由一下3個值決定:1、網路最大深度 2、每個父節點擁有的孩子節點最大數目 3、每個父節點擁有的孩子節點路由器的最大數目
同一父節點相連的終端節點的網路地址是連續的
同一父節點相連的路由器節點的網路地址通常是不連續的 -
埠:每個節點上最多支援240(1-240)個埠,每個節點上的所有埠共用一個發射/接收天線(用埠來區分同一節點的埠);
-
PANID:Zigbee網路號 可手動設定(或自動隨機生成),如果指定的PANID被佔用則自動加1。
~PANID範圍是0X0001----0XFFFF;
~可以通過給不同的網路指定不同的網路ID號來區分網路,避免干擾;
~如果設定為0XFFFF,那麼協調器則隨機產生一個值作為自己的PANID;非易失性快閃記憶體條目ID號(NV操作用到的ID則定義在0x0201~0x0FFF 範圍內!)
-
資料傳送:呼叫**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 )
-
資料接收:呼叫**osal_msg_receive()**函式從訊息佇列中接收一個訊息(包含事件與資料)
uint8 *osal_msg_receive( uint8 task_id ) -
資料儲存位置(結構):(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;
- OSAL(系統抽象層)是一種支援多工執行的系統資源分配機制(P72)
OSAL主要功能:
任務註冊、初始化和啟動
任務間的同步、互斥
中斷處理
儲存器分配和管理
補充:
- IEEE802.15.4網路的建立過程
- int main( )主函式實現硬體的初始化其中包括
事件驅動
-
首先記住 任務輪詢、事件驅動 必考;
-
Zigbee將事件和任務的事件處理函式聯絡方法:(P74)
1、建立一個事件表,儲存各個任務的對應事件
2、建立另一個函式表,儲存各個任務事件處理函式地址
3、將兩張表建立某種對應關係 -
OSAL工作原理(輪詢)osal_start_system(void)
通過tasksEvents指標訪問事件表的每一項,如果有時間發生,則查詢函式表找到事件處理函式進行處理,處理完後,繼續訪問事件表,檢視是否有事件發生,無限迴圈;(P75) -
協議棧定義的事件成為系統強制事件:(P80)
AF_INCOMING-MSG-CMD
ZDO_STATE_CHANGE
ZDO_CB_MSG
AF_DATA_CONFIRM_CMD -
Zigbee協議棧為半開源;
-
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);// 向緩衝區傳送資料
-
串列埠回撥函式:回撥函式不是由該函式實現方直接呼叫的,而是在特定的事件或條件發生的,由另外的一方呼叫,用於對該事件或條件進行響應。因此,串列埠回撥函式是在有串列埠操作(事件)發生時(自動觸發)呼叫的;(P89)
-
當應用有串列埠操作時,應該對應用程式模組的工程屬性的編譯預處理的Definedsymbols下拉列表框中輸入“HAL_UART=TRUE”。(即用條件編譯來控制是否編譯與該模組相關的程式,目的是為了節約儲存資源);(P93)
-
程式中波特率的設定要與上位機(如串列埠助手)一致;
-
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號
第二引數:舉例條目開始的偏移量
第三引數:要寫入的資料長度
第四引數:執行要存放寫入或讀取資料函式緩衝區的指標 -
使用者只能使用條目ID範圍0x0201~0x0FFF
可在OSAL資料夾下的ZcomDef.h檔案中新增自己的條目
如:#define Test_NV 0x0201 -
**函式名要考:** **事件新增函式**: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 )
補充:
- SYS_EVENT_MSG是系統事件,也是協議棧已經定義好的系統事件。
在檔案ZcomDef.h中,事件號是一個16bit的常量,使用叫作獨熱碼(one-hot code)編碼,也是一個位表示一個事件,方便進行event的提取,這樣一個task最多可以有16個event,SYS_EVENT_MSG已經佔用了0x8000,故自定義的事件只能有15個; - 事件的提取和清除可以用簡單的位操作指令實現,事件的提取可以用位與操作 events & SYS_EVENT_MSG,事件的清除可以用異或操作實現,evets ^ SYS_EVENT_MSG;
Zigbee通訊相關
-
Zigbee協議棧中的規範(Profile)和簇(Cluester)
Zigbee網路中進行資料收發都是建立在應用規範基礎上的。每個應用規範都有一個ID來標示。在一個規範(Profile)下又提出了簇(Cluester)的概念,這個Cluester要理解為一個應用領域下的一個特定物件。簇是由命令組成的。 -
同一規範下的傳送命令(簇號)和接受命令(簇號)要相同才能通訊;
-
Zigbee網路通訊必須建立在具體裝置節點的具體通訊埠:
網路地址可以描述一個節點,使用者可使用簡單描述符來描述一個埠。(使用者可用的埠號是1-240) -
Zigbee通訊模式:點播 廣播 組播(這一點重點,我覺得可能考設計題和程式題,所以我會在下面著重補充)
點播
傳送模式:Addr16Bit
傳送目的埠:目的節點的簡單描述符設定的工作埠
傳送地址:目的節點的網路地址
廣播
傳送模式:AddrBroadcast
傳送目的埠:目的節點的簡單描述符設定的工作埠
傳送地址: 0xFFFF 全網傳送 包括休眠節點
0xFFFD 只發往休眠節點
0xFFFC 發往所有路由節點
組播(同一組的節點才能通訊)
傳送模式:AddrGroup
傳送目的埠:目的節點的簡單描述符設定的工作埠
傳送地址:組ID -
#include “aps_groups.h”
1、設定組物件(ID 和 name)
2、加入物件組 aps_AddGroup()
3、退出組 -
Zigbee協議棧網路管理
Zigbee協議棧實現網路管理的函式:
獲得該節點的網路地址:uint16 NLME_GetShortAddr(void)
獲得該節點的MAC地址:byte * NLME_GetExtAddr(void)獲得該節點的父節點網路地址:uint16 NLME_GetCoordShortAddr(void) 獲得該節點的父節點MAC地址:void NLME_GetCoordExtAddr(byte *buf)
藍芽
- 採用高速跳頻擴充套件,實現語音和資料在短距離上的穩定無縫無線連線
在2.4GHz的ISM頻帶上設立79個頻寬為GHz的通道,用每秒鐘切換1600次的頻率的跳頻(Hobbing)擴充套件技術實現資訊的收發。
藍芽系統中的功能模組分為:無線射頻單元、鏈路控制單元、鏈路管理單元、軟體結構 - 微微網: 1主裝置 7從裝置
- 藍芽技術採用了全開放的框架結構
- 藍芽技術的系統結構分為三大部分:
1.底層硬體模組
2.中間協議層
3.高層應用 - 藍芽協議分為四層:
1.核心協議:BaseBand、LMP、L2CAP、SDP;
2.電纜替代協議:RFCOMM;
3.電話傳送控制協議:TCS-Binary、AT 命 令 集;
4.選用協議:PPP、UDP/TCP/IP、OBEX、WAP、vCard、vCal、IrMC、 WAE。 - 近場通訊NFC 及WIFI(瞭解一下,不考)
下面我整理了一下實驗的一些核心程式碼,大家可以結合教材一起看,應該會在程式碼題和設計題裡面考:
- No.9 軟連結與硬連結
- excel 中設定下拉選單,讓其一直顯示
- 曠廠練習生 | 小白進階之三個月發表一篇CVPR
- zigbee通訊技術複習筆記
- AAAI 2021線上分享 | 華為雲提出多輪閱讀理解框架,解決短文字的實體連結問題 - 知乎
- 投資筆記-每股兩千多的茅臺是否敢買
- Node.js 中的非同步迭代器
- 初學者福利!花兩天時間整理的STM32中的一些C語言知識點
- 如何在基於 Ubuntu 或 Debian 的 Linux 發行版中檢視一個軟體包的依賴 - 知乎
- 3分鐘教你如何在Word裡快速製作單斜線和多斜線表頭
- 資料庫:SQLServer分頁查詢整理
- 那一年,愛因斯坦輸得很慘很慘,被十幾個諾獎得主懟了一遍後,退出了群聊……...
- web前端微信小程式開發
- 2020年度總結了這 50 道 MySQL 高頻面試題!
- 【技術教程】網際網路視訊直播點播分析平臺EasyDSS配置公網IP後登入提示“服務不存在”,該如何排查?
- lutter可定製的上下滑出抽屜
- 原創 | 人工智慧的人文主義,如何讓AI更有愛
- Bug or Feature?藏在 requests_html 中的陷阱
- Python核心資料:Django Scrapy Hadoop 資料探勘 機器學習 Python精選視訊(限時福利免費領)
- 滴滴Java後臺3面題目:網路 記憶體溢位 各種鎖 高效能 訊息佇列