【Zigbee】进阶篇(1) Zigbee协议栈创建简单项目,协议栈、事件、消息学习
大家好,我是皮皮貓吖!
每文一言:夢想不會逃跑,會逃跑的永遠都是自己!
本篇文章:
主要是協議棧的介紹,使用協議棧完成一個簡單例子,協調器創建網絡的相關問題,學會在協議棧中自定義事件等。
正文如下:
一、Zigbee協議棧
1)Z-stack協議棧是什么?
Z-Stack協議棧是一個基于任務輪詢方式的操作系統,其任務調度和資源分配由操作系統抽象層OSAL管理著。即Z-Stack協議棧=OSAL操作系統+CC2530硬件模塊+AF無線網絡應用。
2)Zigbee協議棧分為應用層、網絡層、MAC層、物理層。
① 應用層:
Zigbee的應用層由應用支持子層、Zigbee設備對象、Zigbee應用框架、Zigbee設備模板和制造商定義的應用對象等組成。
應用支持子層通過一組通用的服務為網絡層和應用層之間提供接口,應用程序框架提供端點的管理和數據的收發功能,Zigbee設備對象提供網絡建立、發現網絡、加入網絡、應用端點的綁定和安全管理服務的功能。
② 網絡層:
網絡層主要實現網絡的建立、路由的實現以及網絡地址的分配。Zigbee網絡層的不同功能由不同的設備完成。其中Zigbee網絡中的設備有三種類型,及協調器、路由器和終端節點,分別實現不同的功能。
③ MAC層:
MAC層數據服務為物理層與網絡層之間的數據傳輸提供一個接口, 以實現數據發送、接收和處理排列中清除一個MAC層服務數據單元。
MAC層管理服務允許上層與MAC層管理實體之間傳輸管理指令, 其主要功能為設備通信鏈路的連接和斷開管理、信標管理、個域網信息庫管理、孤點管理、復位管理、接收管理、信道掃描管理、通信狀態管理、設備的狀態管理、啟動、網絡同步、輪詢管理等。
④ 物理層:
物理層定義了物理無線信道和MAC子層之間的接口,提供物理層數據服務和物理層管理服務。
物理層頻率范圍: 868/915 MHz 和 2.4 GHz。
2.4 GHz波段射頻:提供250kbps的數據速率和16個不同的信道。
868/915MHz波段射頻:868MHz支持1個數據速率為20kbps的信道,915MHz支持10個數據速率為40kbps的信道。
二、Z-stack協議棧
1)安裝、配置協議棧
我在學習Zigbee的時候,使用的是勝達電子的Zigbee開發板。在學習Zigbee協議棧的時候,使用的也是電子開發板配套的協議棧。
① 安裝勝達電子提供的協議棧,一路Next即可。最后在C盤下可以得到Zigbee協議棧文件夾:
② 協議棧文件夾:進入到協議棧的GenericApp文件夾,進行協議棧的學習
③ 協議棧相關配置:
-
配置Linker
-
配置生成.hex文件
- 開發板燒錄模式
2)練習:在協議棧的前提下,協調器顯示:C,路由器顯示:R,終端顯示:E
① 在APP文件夾中添加數碼管模塊文件:
② 在Zmain.c文件中,添加數碼管頭文件,并進行數碼管的初始化
③ 在FiveGroupApp.c(我該過名字,沒有改過名字的是GenericApp.c)文件中,添加協調器、路由器、終端初始化代碼:
④ 將代碼編譯到三個模塊中,選擇不同的選項卡進行編譯:
⑤ 三個模塊分別燒入協調器、路由器、終端的代碼,三個模塊上的數碼管分別顯示“C”、“R”、“E”字符。
3)為什么只更改了選項卡的內容,在三個模塊中燒入了看似相同的代碼,三個模塊卻顯示出了不同的內容?
選項選擇不同,就會導致參與編譯的配置文件不同,配置文件不同就會導致部分宏定義不同,宏定義不同就會導致工程里某些宏的值不同。
這些宏值不同就會影響程序執行的流程,就會導致出現不同的功能,所有有了不同功能的代碼版本:協調器、路由器、終端。
協調器:C、路由器:R、終端:E。
4)在選項卡里每一種版本模塊都貌似有2個分為不帶-Pro和帶Pro,他們的區別是什么?
Zigbee協議在發展過程中經歷了3個版本,其中Zigbee在07出的是最新的規范,這個規范有2個版本。
ZIgbee2007、ZigbeePRO之間的區別是:
兩個版本功能基本相同。但是,PRO版本功能稍微強大,在項目開發中一般都選擇PRO。
5)協議棧中信道相關配置:
① 信道、協調器創建PAN配置文件
② 信道配置參數:
-DDEFAULT_CHANLIST=0x00000800 // 11 - 0x0B #define DEFAULT_CHANLIST 0x00000800 相當于c語言的中的這個DEFAULT_CHANLIST:表明Zigbee模塊要工作的網絡,當有多個信道參數值進行或操作之后,把結果作為DEFAULT_CHANLIST的值。
② DEFAULT_CHANLIST的值對于路由器和終端協調器的意義分別是什么?
DEFAULT_CHANLIST 0x00001800是兩個信道的或操作(協調器建立網絡時,會在較好的信道上進行建立;終端和路由器會在兩個信道上選擇一個較好的網絡加入進去)
6)TI支持的信道【我手上的勝達開發板支持的信道】:
① 路由器和終端:
我可以在參與或操作的這些信道上(多個信道)選擇一個相對于我來說信號質量最佳的網絡,加入進去。
② 協調器:
我可以在參與或操作的這些信道上(多個信道)選擇一個最佳的信道。并在這個信道上創建自己的Zigbee網絡。
(可以解決:當某個信道上的數據包較多的時候,可以選擇其他比較空閑的信道傳輸數據,增加數據傳輸的穩定性,數據傳輸的效率。)可以自己選擇特定的信道創建網絡。
7)協調器創建網絡【PANID】
① PANID配置參數:
② 當DZDAPP_CONFIG_PAN_ID的值為非0xFFFF時:
- 路由器和終端
- 我必須要加入到PANID為DZDAPP_CONFIG_PAN_ID這樣一個Zigbee無線局域網
- 協調器
- 我要創建一個網絡,需要創建一個PANID為DZDAPP_CONFIG_PAN_ID的值的一個網絡
③ 當DZDAPP_CONFIG_PAN_ID為0xFFFF時:
- 路由器和終端
- 在加入網絡的時候我沒有PANID的限制,我可以加入到信道上,網絡狀態較好的網絡中
- 協調器
- 我可以隨機生成一個PANID,我的名字不是指定的PANID(0XFFFF)
8)問題:當2個節點下載了相同的協調器代碼,并且指定的PANID參數值為非0xffff,后果會怎樣?
① 先上電的協調器模塊會先創建PANID為非0xFFFF這樣一個Zigbee網絡,
② 后上電的模塊發現該信道上已經存在PANID為0xFFF8的網絡,它會創建一個PANID在0xFFF8基礎上加1的網絡。后上電的下載了協調器代碼的模塊會創建一個PANID為0xFFF9的網絡。
③ 如果后面還有燒錄了相同協調器代碼的模塊,產生的PANID依次往后加1。
9)Z-stack協議棧分層、事件
① 事件
在ZSTACK里,根據代碼,按照功能來劃分,可以將代碼分成不同的層。
比如,硬件操作相關硬件層。 網絡相關的代碼稱為網絡層。自己寫的應用程序部分叫應用層。
幾乎每一個層都是一個任務,系統為每一個任務(層)分配一個一字節的唯一數值編號。每一個任務都能處理一些它們能夠處理的事物。
我們把這個數值編號叫做任務ID。它們能夠處理的事物叫做事件。
//系統事件:調用任務名為task_id的事件名為event_flag的事件 uint8 osal_set_event( uint8 task_id, uint16 event_flag ) //系統延遲響應事件:timeout_value毫秒之后觸發任務名為taskID下的事件名為event_id的事件 uint8 osal_start_timerEx( uint8 taskID, uint16 event_id, uint16 timeout_value )② 注意:
- 每個任務只允許定義16個事件,并且事件名為0x8000 的是系統事件,不允許自定義事件的名字相同。
- 在自定義的事件中,如果要進行點亮LED燈的操作,或者其他相關的操作的時候。在進行功能實現之前,一些寄存器在協議棧會被默認使用,寄存器已經不是原來的初始化的樣子,在使用某個寄存器之前,需要重新配置。
③ 自定義事件
- 聲明自定義事件
- 定義事件處理內容
10)Z-stack協議棧消息:
① 消息
在ZSTACK里,任務事件定義的特點決定了每一個任務最多只能處理16種不同的事件,而系統在運行時候有許多事務需要處理,如果每一個事物處理都定義成1個事件,那么16種事件肯定是不夠用,所以引入了消息的概念。
② 消息處理事務的原理:
當需要應用層任務來處理某個事務的時候,首先給應用層任務會發送一個消息:調用osal_set_event(SDApp_TaskID,SYS_EVENT_MSG);函數。
然后,應用層就會進入SYS_EVENT_MSG中事件中進行處理。在這個事件中,判斷到底剛剛引發我們產生SYS_EVENT_MSG事件的是哪一種類型的消息,然后根據消息的類型做相應的處理。
而消息的類型可以自己定義,這樣一來消息的種類可以很多,那么應用層任務處理的事物種類就很多了。
//事件為0x8000為該任務的系統事件 #define SYS_EVENT_MSG 0x8000 // A message is waiting event③ 消息觸發系統事件
10)生成.hex文件
① 在原來生成.hex的基礎上,做如下步驟
資源鏈接:https://pan.baidu.com/s/1TURQuWAPN0rzHzGD9phy-w
提取碼:d9v7
希望本篇文章對大家有所幫助,后續會繼續分享Zigbee相關學習知識…
如果文章內容有錯誤的地方,請在留言處留下你的見解,方便大家共同學習。謝謝!
如有侵權或其他任何問題請聯系:QQ1370922071,本文主要用于學習交流,轉載請聲明!
作者:皮皮貓吖
總結
以上是生活随笔為你收集整理的【Zigbee】进阶篇(1) Zigbee协议栈创建简单项目,协议栈、事件、消息学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多媒体计算机技术未来的发展方向,多媒体技
- 下一篇: BIOS知识