0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一文讀懂zigbee技術(shù)的協(xié)議原理

電子設(shè)計(jì) ? 來(lái)源:互聯(lián)網(wǎng) ? 作者:佚名 ? 2017-11-27 13:59 ? 次閱讀

一.前言

從今天開(kāi)始,我們要正式開(kāi)始進(jìn)行zigbee相關(guān)的通信實(shí)驗(yàn)了,我所使用的協(xié)議棧是ZStack 是TI ZStack-CC2530-2.3.0-1.4.0版本,大家也可以從TI的官網(wǎng)上直接下載TI公司為cc2530寫(xiě)的協(xié)議棧代碼,畢竟,我們作為初學(xué)者,應(yīng)該先不要去深究協(xié)議棧是怎么用代碼編寫(xiě)的,畢竟zigbee已經(jīng)相當(dāng)成熟了,我們應(yīng)該先學(xué)會(huì)使用zigbee協(xié)議棧進(jìn)行通信,并能應(yīng)用于實(shí)際項(xiàng)目中,比如說(shuō)智能家具,不知道大家是不是有同感,所以下面我就先給大家介紹一下zigbee通信的原理以及體系架構(gòu)。

二.ZStack 體系架構(gòu)

ZStack 的體系結(jié)構(gòu)由稱(chēng)為層的各模塊組成。每一層為其上層提供特定的服務(wù):即由數(shù)據(jù)服務(wù)實(shí)體提供數(shù)據(jù)傳輸服務(wù);管理實(shí)體提供所有的其他管理服務(wù)。每個(gè)服務(wù)實(shí)體通過(guò)相應(yīng)的服務(wù)接入點(diǎn)(SAP) 為其上層提供一個(gè)接口,每個(gè)服務(wù)接入點(diǎn)通過(guò)服務(wù)原語(yǔ)來(lái)完成所對(duì)應(yīng)的功能。

ZStack 根據(jù)IEEE 802.15.4 和ZigBee 標(biāo)準(zhǔn)分為物理層,介質(zhì)接入控制層,網(wǎng)絡(luò)層,應(yīng)用層。物理層提供了基礎(chǔ)的服務(wù),數(shù)據(jù)傳輸和接收,網(wǎng)絡(luò)層提供了各個(gè)節(jié)點(diǎn)連入的服務(wù),是zigbee網(wǎng)絡(luò)通信的關(guān)鍵,應(yīng)用層是我們關(guān)注的重點(diǎn),提供了應(yīng)用的框架和ZDO。大家如果想了解體系結(jié)構(gòu)的具體內(nèi)容,可以自己去看說(shuō)明文檔,下面我給大家介紹一下zigbee工作原理。

ZStack 采用操作系統(tǒng)的思想來(lái)構(gòu)建,采用事件輪循機(jī)制,而且有一個(gè)專(zhuān)門(mén)的Timer2 來(lái)負(fù)責(zé)定時(shí)。從CC2530 工作開(kāi)始,Timer2 周而復(fù)始地計(jì)時(shí),有采集、發(fā)送、接收、
顯示…等任務(wù)要執(zhí)行時(shí)就執(zhí)行。當(dāng)各層初始化之后,系統(tǒng)進(jìn)入低功耗模式,當(dāng)事件發(fā)生時(shí),喚醒系統(tǒng),開(kāi)始進(jìn)入中斷處理事件,結(jié)束后繼續(xù)進(jìn)入低功耗模式。如果同時(shí)有幾個(gè)事件發(fā)生,判斷優(yōu)先級(jí),逐次處理事件。這種軟件構(gòu)架可以極大地降級(jí)系統(tǒng)的功耗。

整個(gè)ZStack 的主要工作流程,如圖所示,大致分為以下6 步:
(1) 關(guān)閉所有中斷;
(2) 芯片外部(板載外設(shè))初始化;
(3) 芯片內(nèi)部初始化;
(4) 初始化操作系統(tǒng);
(5) 打開(kāi)所有中斷;
(6) 執(zhí)行操作系統(tǒng)。

這就是zigbee處理任務(wù)的大致過(guò)程。

三.代碼分析

協(xié)議棧的代碼很多,而且很復(fù)雜,上圖就明白了。。。

這還只是一部分,所以我們先不用太過(guò)于專(zhuān)注于協(xié)議棧的編寫(xiě),而是要學(xué)會(huì)如何用,我們主要學(xué)習(xí)和配置的就是圖中SampleApp.c這個(gè)文件,它主要就是應(yīng)用于應(yīng)用的,我們面對(duì)不同的應(yīng)用,只要修改它和底層的配置文件就行了。它里面有6個(gè)非常重要的函數(shù),這6 個(gè)函數(shù),有關(guān)于初始化用戶(hù)功能
的;有關(guān)于所有事件的 處理的;有按鍵服務(wù)功能編寫(xiě)的;有接收數(shù)據(jù)的處理的;有數(shù)據(jù)發(fā)送函數(shù)的編寫(xiě)的。下面我們就對(duì)這6 個(gè)函數(shù)進(jìn)行分析:

void SampleApp_Init( uint8 task_id )

這是一個(gè)用戶(hù)用于初始化任務(wù)的函數(shù),它是在系統(tǒng)初始化階段被調(diào)用的,而且,在調(diào)用它的時(shí)候,它里面應(yīng)該有相應(yīng)任務(wù)的初始化(也就是說(shuō),用戶(hù)有什么初始化,都是放在這個(gè)函數(shù)里),比如:硬件初始化、數(shù)據(jù)表初始化、電源初始化等等。

uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events )

這是一個(gè)事件處理函數(shù)(所有事件都是它管理),當(dāng)有已登記的事件發(fā)生時(shí),它就被主函數(shù)調(diào)用來(lái)對(duì)事件進(jìn)行處理,這些事件包括:定時(shí)器、消息、以及用戶(hù)定義的事件等
等。
這個(gè)函數(shù)的功能包括:按鍵處理,數(shù)據(jù)接收,數(shù)據(jù)發(fā)送。當(dāng)然,用戶(hù)可以自己添加其它事件,我們就在這個(gè)函數(shù)添加自己的串口事件。

void SampleApp_HandleKeys( uint8 shift, uint8 keys )

這個(gè)函數(shù)是給SampleApp_ProcessEvent( uint8 task_id, uint16 events )調(diào)用的:當(dāng)按鍵按下后,就會(huì)執(zhí)行SampleApp_ProcessEvent 函數(shù)里的case KEY_CHANGE ,這個(gè)case 的服務(wù)函數(shù)就是SampleApp_HandleKeys( uint8 shift, uint8 keys ),我們可以在這個(gè)函數(shù)里添加按鍵判斷,判斷哪個(gè)按鍵,然后執(zhí)行相關(guān)任務(wù)。

void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )

這個(gè)函數(shù)管理所有接收到的數(shù)據(jù),至于數(shù)據(jù)來(lái)自哪個(gè)設(shè)備,它是根據(jù)簇ID 來(lái)分辨的。
函數(shù)里面就是一個(gè)switch 語(yǔ)句,關(guān)鍵是case 及其后面的服務(wù)函數(shù)。用戶(hù)可以根據(jù)不同的功能,定義不同的簇ID(在SampleApp.h 里進(jìn)行),然后在這個(gè)switch 語(yǔ)句里添加一個(gè)以簇ID 來(lái)命名的case,并在case 里面編寫(xiě)自己的應(yīng)用程序。

void SampleApp_SendPeriodicMessage( void )

這個(gè)函數(shù),是一個(gè)周期性數(shù)據(jù)發(fā)送函數(shù),它是設(shè)備設(shè)置為周期性廣播的時(shí)候調(diào)用的,它是我們?cè)O(shè)置發(fā)送數(shù)據(jù)的地方。

void SampleApp_SendFlashMessage( uint16 flashTime )

這個(gè)函數(shù)是void SampleApp_HandleKeys( uint8 shift, uint8 keys )函數(shù)的一個(gè)服務(wù)函數(shù),我們也是極少用到這個(gè)函數(shù)的,故不作詳解。

上述就是常用的6個(gè)函數(shù),對(duì)于初學(xué)者,會(huì)使用zigbee協(xié)議進(jìn)行應(yīng)用就夠了,先對(duì)驅(qū)動(dòng)進(jìn)行移植,在進(jìn)行硬件進(jìn)行初始化,在修改這6個(gè)函數(shù),就可以對(duì)zigbee進(jìn)行簡(jiǎn)單的應(yīng)用了,今天就先寫(xiě)到這里了,協(xié)議棧代碼太多了我就不貼出來(lái)了,需要的朋友聯(lián)系我,大家相互學(xué)習(xí),這只是我的一點(diǎn)體會(huì)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • ZigBee技術(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    115

    瀏覽量

    42358
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    讀懂ZigBee技術(shù)的前世今生

    下文采用問(wèn)答形式向你詳細(xì)地介紹了方方面面,不夸口的說(shuō),你所需要知道的關(guān)于 ZigBee切,在這里基本可以了解到!
    發(fā)表于 06-14 15:19 ?5208次閱讀

    讀懂zigbee通信技術(shù)的特點(diǎn)和性能

    | 傳感器技術(shù)(WW_CGQJS)ZigBee技術(shù)被認(rèn)為是最有可能像WiFi、藍(lán)牙樣改變我們現(xiàn)在生活的
    的頭像 發(fā)表于 11-23 07:46 ?2.9w次閱讀

    TI_06版Zigbee協(xié)議棧學(xué)習(xí)_02 - Zigbee技術(shù) -

    TI_06版Zigbee協(xié)議棧學(xué)習(xí)_02 - Zigbee技術(shù) -
    發(fā)表于 08-12 23:53

    TI_06版Zigbee協(xié)議棧學(xué)習(xí)_03 - Zigbee技術(shù)

    TI_06版Zigbee協(xié)議棧學(xué)習(xí)_03 - Zigbee技術(shù)
    發(fā)表于 08-12 23:54

    TI_06版Zigbee協(xié)議棧學(xué)習(xí)_04 - Zigbee技術(shù)

    TI_06版Zigbee協(xié)議棧學(xué)習(xí)_04 - Zigbee技術(shù)
    發(fā)表于 08-12 23:57

    讀懂接口模塊的組合應(yīng)用有哪些?

    讀懂接口模塊的組合應(yīng)用有哪些?
    發(fā)表于 05-17 07:15

    讀懂如何去優(yōu)化AC耦合電容?

    讀懂如何去優(yōu)化AC耦合電容?
    發(fā)表于 06-08 07:04

    讀懂ZigBee指的是什么

    ZigBee指的是什么?ZigBee網(wǎng)絡(luò)的般特性有哪些?ZigBee網(wǎng)絡(luò)的硬件和軟件有哪些?
    發(fā)表于 09-24 13:31

    讀懂什么是NEC協(xié)議

    讀懂什么是NEC協(xié)議
    發(fā)表于 10-15 09:22

    讀懂中斷方式和輪詢(xún)操作有什么區(qū)別嗎

    讀懂中斷方式和輪詢(xún)操作有什么區(qū)別嗎?
    發(fā)表于 12-10 06:00

    zigbee技術(shù)_zigbee協(xié)議

    Zigbee是IEEE 802.15.4協(xié)議的代名詞。根據(jù)這個(gè)協(xié)議規(guī)定的技術(shù)種短距離、低功耗的無(wú)線通信
    發(fā)表于 09-07 16:22 ?4477次閱讀
    <b class='flag-5'>zigbee</b><b class='flag-5'>技術(shù)</b>_<b class='flag-5'>zigbee</b><b class='flag-5'>協(xié)議</b>

    讀懂NB-IoT 的現(xiàn)狀、挑戰(zhàn)和前景

    讀懂 NB-IoT 的現(xiàn)狀、挑戰(zhàn)和前景
    的頭像 發(fā)表于 02-28 15:42 ?6317次閱讀

    讀懂MCU的特點(diǎn)、功能及如何編寫(xiě)

    讀懂MCU的特點(diǎn)、功能及如何編寫(xiě)
    發(fā)表于 12-05 09:51 ?24次下載
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>讀懂</b>MCU的特點(diǎn)、功能及如何編寫(xiě)

    讀懂,什么是BLE?

    讀懂,什么是BLE?
    的頭像 發(fā)表于 11-27 17:11 ?2124次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>讀懂</b>,什么是BLE?

    讀懂車(chē)規(guī)級(jí)AEC-Q認(rèn)證

    讀懂車(chē)規(guī)級(jí)AEC-Q認(rèn)證
    的頭像 發(fā)表于 12-04 16:45 ?865次閱讀