zigbee協議棧與zigbee協議
協議是一系列的通訊標準,通訊雙方需要共同按照這一標準進行正常的資料發射和接收。協議棧是協議的具體實現形式,簡單地說就是協議棧是協議和使用者之間的乙個介面。開發人員通過協議棧來使用這個協議。進而實現資料的收發。
zigbee的體系結構由稱為層的各模組組成。每一層為其上層提供特定的服務:即由資料服務實體提供資料傳輸服務;管理實體提供所有的其他管理服務。毎個服務實體懣過相應的服務接入點(sap為其上層提供乙個介面,每個服務接入點通過服務原語來完成所對應的功能, zigbee協議的體系結構如下圖所示:
zigbee基本概念
裝置型別(乙個網路必須最少有乙個協調器,多個路由器和多個終端裝置)
網路結構
上圖是乙個簡單的zigbee網路示意圖,其中紅色節點為coordinator,黃色節點為router,綠色節點為end-device。
協議棧規範
協議棧規範由zigbee聯盟定義指定。在同一網路中的裝置必須符同乙個協議棧規範。
zigbee聯盟為zigbee協議棧2007定義了兩個規範:zigbee個zigbee pro。所有的裝置只要遵守了該規範,即使在不同的廠商買的不同的裝置同樣可以形成網路。
如果開發正改變了規範,它的裝置只能在自己的產品中使用。不能與其他的產品通訊,更改網路之後的規範稱之為「特定網路」規範。
協議棧id號可以通過查詢裝置傳送的beacon幀獲得。在裝置加入網路之前,首先需要確認協議棧規範的id,「特定網路」規範id號為0;zigbee協議棧規範的id號為1;zigbee pro協議的id號為2.協議棧規範的id(stack_proflle_id)在nwk_globals.h中定義:
// nwk_globals.h
// controls various stack parameter settings
#define network_specific 0
#define home_controls 1
#define zigbeepro_profile 2
#define generic_star 3
#define generic_tree 4
#if defined ( zigbeepro )
#define stack_profile_id zigbeepro_profile
#else
#define stack_profile_id home_controls
#endif
// 在fwconfig.cfg檔案定義
/* enable zigbee-pro */
-zigbeepro
拓撲結構
支援星狀、樹(簇)狀和網狀三種網路拓撲結構。
在z-stack中網路拓撲結構定義如下:
// controls the operational mode of network
#define nwk_mode_star 0
#define nwk_mode_tree 1
#define nwk_mode_mesh 2
#if ( stack_profile_id == zigbeepro_profile )
#define max_node_depth 20
#define nwk_mode nwk_mode_mesh // 網狀網路
#define security_mode security_commercial
#if ( secure != 0 )
#define use_nwk_security 1 // true or false
#define security_level 5
#else
#define use_nwk_security 0 // true or false
#define security_level 0
#endif
信標與非信標模式
zigbee網路的工作模式可分為信標(beaeon)和非信標(non-beaeon)兩種模式。
位址定義
zigbee裝置有兩種型別的位址。一種是64位ieee位址,即mac位址,另一種是16位網路位址。
位址分配機制,zigbee 2007 pro使用隨機位址分配機制,對新加入的節點使用隨機位址分配,為保證網路內位址分配不重複,使用其餘的隨機位址再進行分配。當乙個節點加入時,將接收到父節點的的隨機分配位址然後後產生」裝置宣告「(包含分配到的網路位址和ieee位址)傳送至網路中的其餘節點。如果另乙個節點有著同樣的網路位址,則通過路由器廣播「網路狀態-位址衝突」至網路中的所有節點。所有發生網路位址衝突的節點更改自己的網路位址,然後再發起「裝置宣告」檢測新的網路位址是否衝突。
終端裝置不會廣播「位址衝突」,他們的父節點會幫助完成。如果乙個終端裝置發生了」位址衝突「,他們的父節點傳送」重新加入「訊息至終端設裝置,並要求他們更改網路位址,然後終端裝置再發起」裝置宣告「檢測新的網路位址是否衝突。
當接收到「裝置宣告」後,關聯表和繫結表將被更新使用心得網路位址,但是路由表不會被更新。
在每個路由加如網路之前,定址方案需要知道和配是一些引數。
#if ( stack_profile_id == zigbeepro_profile )
uint8 cskiprtrs[1] = ;
uint8 cskipchldrn[1] = ;
這三個引數的值在z-stack中分別由變數cskipchlarn、cskiprtrs、max_node_depth決定。這三個變數可以在nwk中的nwk_globals.c和nwk_globals.h兩個檔案中找到。
定址為了向乙個在zigbee網路中的裝置傳送資料,應用程式通常使用af_datarequest()函式。資料報將要傳送給乙個afaddtype_t(在af.h中定義)型別的目標裝置。
typedef struct
addr;
afaddrmode_t addrmode;
uint8 endpoint;
uint16 panid; // used for the inter_pan feature
} afaddrtype_t;
typedef enum
afaddrmode_t;
因為在zigbee網路中,資料報可以單點傳送(unicast),多點傳送(multicast)或則廣播傳送,所以必須有位址模式引數。乙個單點傳送資料報只傳送給乙個裝置,多點傳送資料報則要傳送一組裝置。二廣播資料則要傳送給網路中的所有節點。裝置
重要裝置位址
應用程式可能需要知道它的裝置位址和父親位址。使用下面的函式獲取裝置位址(在 zstackap中定義)
如何使用zigbee協議棧(一般步驟)
組網:呼叫協議棧的組網函式、加入網路函式,實現網路的建立與節點的加入。
傳送:傳送節點呼叫協議棧的無線資料傳送函式,實現無線資料傳送。
接收:接收節點呼叫協議棧的無線資料接收函式,實現無線資料接收
協議棧工作流程
自己新增的應用任務程式在zstack中的呼叫過程:
作業系統 作業系統介面
介面表現為函式呼叫,由作業系統提供,連線作業系統和應用軟體。出於安全性考慮,應用程式不能直接在記憶體中任意訪問 將核心程式和使用者程式隔離 通過比較訪問資料段cpl和rpl的特權級和當前段dpl的特權級之間的關係 應用程式呼叫庫函式printf printf呼叫庫中的write函式 write將函式...
作業系統(作業系統引論)
方便性 方便使用者進行操作計算機 有效性提高系統資源的利用率 提高系統的吞吐量,加速程式的執行 可擴充性 方便地增添新的模組和功能,以及對原有的功能模組進行修改 開放性能夠遵循世界標準規範 os作為使用者和計算機硬體系統之間的介面 使用者能夠通過作業系統來使用計算機系統 os作為計算機資源的管理者 ...
作業系統 作業系統 一 作業系統概述
好好學習,天天向上本文已收錄至我的github倉庫daydayup 歡迎star 之前一直沒有系統地學過作業系統,感覺自己在平時的學習過程中對於某些概念理解得一塌糊塗,比如中斷 記憶體 程序和執行緒等。所以打算系統的學習一下作業系統。一開始我是在b站看哈工大的李治軍老師講的,但是一上來就開始從彙編 ...