日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Zigbee】进阶篇(1) Zigbee协议栈创建简单项目,协议栈、事件、消息学习

發(fā)布時間:2024/8/1 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Zigbee】进阶篇(1) Zigbee协议栈创建简单项目,协议栈、事件、消息学习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

大家好,我是皮皮貓吖!

每文一言:夢想不會逃跑,會逃跑的永遠都是自己!


本篇文章:

主要是協議棧的介紹,使用協議棧完成一個簡單例子,協調器創(chuàng)建網絡的相關問題,學會在協議棧中自定義事件等。

正文如下:

一、Zigbee協議棧

1)Z-stack協議棧是什么?

Z-Stack協議棧是一個基于任務輪詢方式的操作系統(tǒng),其任務調度和資源分配由操作系統(tǒng)抽象層OSAL管理著。即Z-Stack協議棧=OSAL操作系統(tǒng)+CC2530硬件模塊+AF無線網絡應用。

2)Zigbee協議棧分為應用層、網絡層、MAC層、物理層。

① 應用層:

Zigbee的應用層由應用支持子層、Zigbee設備對象、Zigbee應用框架、Zigbee設備模板和制造商定義的應用對象等組成。

應用支持子層通過一組通用的服務為網絡層和應用層之間提供接口,應用程序框架提供端點的管理和數據的收發(fā)功能,Zigbee設備對象提供網絡建立、發(fā)現網絡、加入網絡、應用端點的綁定和安全管理服務的功能。

② 網絡層:

網絡層主要實現網絡的建立、路由的實現以及網絡地址的分配。Zigbee網絡層的不同功能由不同的設備完成。其中Zigbee網絡中的設備有三種類型,及協調器、路由器和終端節(jié)點,分別實現不同的功能。

③ MAC層:

MAC層數據服務為物理層與網絡層之間的數據傳輸提供一個接口, 以實現數據發(fā)送、接收和處理排列中清除一個MAC層服務數據單元。

MAC層管理服務允許上層與MAC層管理實體之間傳輸管理指令, 其主要功能為設備通信鏈路的連接和斷開管理、信標管理、個域網信息庫管理、孤點管理、復位管理、接收管理、信道掃描管理、通信狀態(tài)管理、設備的狀態(tài)管理、啟動、網絡同步、輪詢管理等。

④ 物理層:

物理層定義了物理無線信道和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開發(fā)板。在學習Zigbee協議棧的時候,使用的也是電子開發(fā)板配套的協議棧。

① 安裝勝達電子提供的協議棧,一路Next即可。最后在C盤下可以得到Zigbee協議棧文件夾:

② 協議棧文件夾:進入到協議棧的GenericApp文件夾,進行協議棧的學習

③ 協議棧相關配置:

  • 配置Linker

  • 配置生成.hex文件

  • 開發(fā)板燒錄模式

2)練習:在協議棧的前提下,協調器顯示:C,路由器顯示:R,終端顯示:E

① 在APP文件夾中添加數碼管模塊文件:

② 在Zmain.c文件中,添加數碼管頭文件,并進行數碼管的初始化

③ 在FiveGroupApp.c(我該過名字,沒有改過名字的是GenericApp.c)文件中,添加協調器、路由器、終端初始化代碼:

④ 將代碼編譯到三個模塊中,選擇不同的選項卡進行編譯:

⑤ 三個模塊分別燒入協調器、路由器、終端的代碼,三個模塊上的數碼管分別顯示“C”、“R”、“E”字符。

3)為什么只更改了選項卡的內容,在三個模塊中燒入了看似相同的代碼,三個模塊卻顯示出了不同的內容?

選項選擇不同,就會導致參與編譯的配置文件不同,配置文件不同就會導致部分宏定義不同,宏定義不同就會導致工程里某些宏的值不同。

這些宏值不同就會影響程序執(zhí)行的流程,就會導致出現不同的功能,所有有了不同功能的代碼版本:協調器、路由器、終端。

協調器:C、路由器:R、終端:E。

4)在選項卡里每一種版本模塊都貌似有2個分為不帶-Pro和帶Pro,他們的區(qū)別是什么?

Zigbee協議在發(fā)展過程中經歷了3個版本,其中Zigbee在07出的是最新的規(guī)范,這個規(guī)范有2個版本。

ZIgbee2007、ZigbeePRO之間的區(qū)別是:

兩個版本功能基本相同。但是,PRO版本功能稍微強大,在項目開發(fā)中一般都選擇PRO。

5)協議棧中信道相關配置:

① 信道、協調器創(chuàng)建PAN配置文件

② 信道配置參數:
-DDEFAULT_CHANLIST=0x00000800 // 11 - 0x0B #define DEFAULT_CHANLIST 0x00000800 相當于c語言的中的這個

DEFAULT_CHANLIST:表明Zigbee模塊要工作的網絡,當有多個信道參數值進行或操作之后,把結果作為DEFAULT_CHANLIST的值。

② DEFAULT_CHANLIST的值對于路由器和終端協調器的意義分別是什么?

DEFAULT_CHANLIST 0x00001800是兩個信道的或操作(協調器建立網絡時,會在較好的信道上進行建立;終端和路由器會在兩個信道上選擇一個較好的網絡加入進去)

6)TI支持的信道【我手上的勝達開發(fā)板支持的信道】:

① 路由器和終端:

我可以在參與或操作的這些信道上(多個信道)選擇一個相對于我來說信號質量最佳的網絡,加入進去。

② 協調器:

我可以在參與或操作的這些信道上(多個信道)選擇一個最佳的信道。并在這個信道上創(chuàng)建自己的Zigbee網絡。

(可以解決:當某個信道上的數據包較多的時候,可以選擇其他比較空閑的信道傳輸數據,增加數據傳輸的穩(wěn)定性,數據傳輸的效率。)可以自己選擇特定的信道創(chuàng)建網絡。

7)協調器創(chuàng)建網絡【PANID】

① PANID配置參數:

② 當DZDAPP_CONFIG_PAN_ID的值為非0xFFFF時:
  • 路由器和終端
    • 我必須要加入到PANID為DZDAPP_CONFIG_PAN_ID這樣一個Zigbee無線局域網
  • 協調器
    • 我要創(chuàng)建一個網絡,需要創(chuàng)建一個PANID為DZDAPP_CONFIG_PAN_ID的值的一個網絡
③ 當DZDAPP_CONFIG_PAN_ID為0xFFFF時:
  • 路由器和終端
    • 在加入網絡的時候我沒有PANID的限制,我可以加入到信道上,網絡狀態(tài)較好的網絡中
  • 協調器
    • 我可以隨機生成一個PANID,我的名字不是指定的PANID(0XFFFF)

8)問題:當2個節(jié)點下載了相同的協調器代碼,并且指定的PANID參數值為非0xffff,后果會怎樣?

① 先上電的協調器模塊會先創(chuàng)建PANID為非0xFFFF這樣一個Zigbee網絡,

② 后上電的模塊發(fā)現該信道上已經存在PANID為0xFFF8的網絡,它會創(chuàng)建一個PANID在0xFFF8基礎上加1的網絡。后上電的下載了協調器代碼的模塊會創(chuàng)建一個PANID為0xFFF9的網絡。

③ 如果后面還有燒錄了相同協調器代碼的模塊,產生的PANID依次往后加1。

9)Z-stack協議棧分層、事件

① 事件

在ZSTACK里,根據代碼,按照功能來劃分,可以將代碼分成不同的層。

比如,硬件操作相關硬件層。 網絡相關的代碼稱為網絡層。自己寫的應用程序部分叫應用層。

幾乎每一個層都是一個任務,系統(tǒng)為每一個任務(層)分配一個一字節(jié)的唯一數值編號。每一個任務都能處理一些它們能夠處理的事物。

我們把這個數值編號叫做任務ID。它們能夠處理的事物叫做事件。

//系統(tǒng)事件:調用任務名為task_id的事件名為event_flag的事件 uint8 osal_set_event( uint8 task_id, uint16 event_flag ) //系統(tǒng)延遲響應事件:timeout_value毫秒之后觸發(fā)任務名為taskID下的事件名為event_id的事件 uint8 osal_start_timerEx( uint8 taskID, uint16 event_id, uint16 timeout_value )
② 注意:
  • 每個任務只允許定義16個事件,并且事件名為0x8000 的是系統(tǒng)事件,不允許自定義事件的名字相同。
  • 在自定義的事件中,如果要進行點亮LED燈的操作,或者其他相關的操作的時候。在進行功能實現之前,一些寄存器在協議棧會被默認使用,寄存器已經不是原來的初始化的樣子,在使用某個寄存器之前,需要重新配置。
③ 自定義事件
  • 聲明自定義事件

  • 定義事件處理內容

10)Z-stack協議棧消息:

① 消息

在ZSTACK里,任務事件定義的特點決定了每一個任務最多只能處理16種不同的事件,而系統(tǒng)在運行時候有許多事務需要處理,如果每一個事物處理都定義成1個事件,那么16種事件肯定是不夠用,所以引入了消息的概念。

② 消息處理事務的原理:

當需要應用層任務來處理某個事務的時候,首先給應用層任務會發(fā)送一個消息:調用osal_set_event(SDApp_TaskID,SYS_EVENT_MSG);函數。

然后,應用層就會進入SYS_EVENT_MSG中事件中進行處理。在這個事件中,判斷到底剛剛引發(fā)我們產生SYS_EVENT_MSG事件的是哪一種類型的消息,然后根據消息的類型做相應的處理。

而消息的類型可以自己定義,這樣一來消息的種類可以很多,那么應用層任務處理的事物種類就很多了。

//事件為0x8000為該任務的系統(tǒng)事件 #define SYS_EVENT_MSG 0x8000 // A message is waiting event
③ 消息觸發(fā)系統(tǒng)事件

10)生成.hex文件

① 在原來生成.hex的基礎上,做如下步驟


資源鏈接:https://pan.baidu.com/s/1TURQuWAPN0rzHzGD9phy-w

提取碼:d9v7


希望本篇文章對大家有所幫助,后續(xù)會繼續(xù)分享Zigbee相關學習知識…

如果文章內容有錯誤的地方,請在留言處留下你的見解,方便大家共同學習。謝謝!

如有侵權或其他任何問題請聯系:QQ1370922071,本文主要用于學習交流,轉載請聲明!

作者:皮皮貓吖


總結

以上是生活随笔為你收集整理的【Zigbee】进阶篇(1) Zigbee协议栈创建简单项目,协议栈、事件、消息学习的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。