[ZigBee] 15、Zigbee协议栈应用(一)——Zigbee协议栈介绍及简单例子(长文,OSAL及Zigbee入门知识)...
?
?
1、Zigbee協(xié)議棧簡介
協(xié)議是一系列的通信標準,通信雙方需要按照這一標準進行正常的數據發(fā)射和接收。協(xié)議棧是協(xié)議的具體實現(xiàn)形式,通俗講協(xié)議棧就是協(xié)議和用戶之間的一個接口,開發(fā)人員通過使用協(xié)議棧來使用這個協(xié)議,進而實現(xiàn)無線數據收發(fā)。
如圖1所示:Zigbee協(xié)議分為兩部分,IEEE 802.15.4定義了PHY(物理層)和MAC(介質訪問層)技術規(guī)范;Zigbee聯(lián)盟定義了NWK(網絡層)、APS(應用程序支持層)、APL(應用層)技術規(guī)范。Zigbee協(xié)議棧就是將各個層定義的協(xié)議都集合在一起,以函數的形式實現(xiàn),并給用戶提供API(應用層),用戶可以直接調用。
圖1 ZigBee無線網絡協(xié)議層的架構圖
?
2、如何理解Zigbee協(xié)議棧
協(xié)議棧是協(xié)議的實現(xiàn),可以理解為代碼,庫函數,供上層應用調用,協(xié)議較底下的層與應用是相互獨立的。商業(yè)化的協(xié)議棧只提供你接口(其實和互聯(lián)網行業(yè)的API模式很像)。就像你調用地圖API時不需要關心底層地圖是怎么根據位置或坐標繪制的,你也不用關心協(xié)議棧底層的實現(xiàn),除非你想做協(xié)議研究。每個廠家的協(xié)議棧是有區(qū)別的,比如TI的BLE協(xié)議棧和nordic的BLE協(xié)議棧就有很大的不同(多說一點,TI的BLE協(xié)議棧更像是安卓的BLE結構,所以會安卓藍牙的人可能能看懂TI的代碼)。
?
3、如何使用Zigbee協(xié)議棧
以簡單的無線數據通信為例,其一般步驟為:
① 組網:調用協(xié)議棧組網函數、加入網絡函數,實現(xiàn)網絡的建立和節(jié)點的加入
② 發(fā)送:發(fā)送節(jié)點調用協(xié)議棧的發(fā)送函數,實現(xiàn)數據無線發(fā)送
③ 接收:接收節(jié)點調用協(xié)議棧的無線接收函數,實現(xiàn)無線數據接收
由于協(xié)議棧都把這些函數都封裝好了,因此我們用起來比較方便。下面是協(xié)議棧無線發(fā)送函數:
如果想更好的應用協(xié)議棧就需要對協(xié)議棧提供的這些函數及其參數的具體作用和意義進行細致的了解,這個在接下來中會詳細介紹。
?
4、安裝Zigbee協(xié)議棧
從我百度共享的所有本系列資料中下載004解壓并安裝:
圖2 ZigBee協(xié)議棧下載路徑
?
安裝好之后在win7開始按鈕下會有如下文件結構:
? ? ? ? ? ? ? ? ??圖3 ZigBee協(xié)議安裝完成后的文件結構
其中:
?
5、基于協(xié)議棧的無線收發(fā)控制LED工程講解(一)
從網盤下載ZStack-2.3.1a壓縮文件:
? 圖4 工程源碼所在云盤目錄
用IAR打開..?\ZStack-2.5.1a\Projects\zstack\Samples\SampleApp\CC2530DB目錄下的工程文件,注意不要把001Stack-2.5.1a放在比較深的文件夾內,否則IAR打開工程時可能一直卡打不開,也最好不要有中文!打開后工程及結構如下:(有點眼花繚亂,不要緊,后面會結合源碼一步步分析)
圖5 工程整體架構
?
6、基于協(xié)議棧的無線收發(fā)控制LED工程講解(二)
在IAR中選擇XXXXEB,第一遍要rebuild all,下載好協(xié)調器之后,再切換到EndDeviceEB編譯下載到另一個板子做終端設備:
圖6 編譯工程
?
兩個節(jié)點程序下載好之后上電會看到:組網成功后D1閃爍。
圖7 實驗現(xiàn)象
?
7、基于協(xié)議棧的無線收發(fā)控制LED工程講解(三)
main code:
1 int main( void ) 2 { 3 osal_int_disable( INTS_ALL );// Turn off interrupts 關中斷 4 HAL_BOARD_INIT();// Initialization for board related stuff such as LEDs 5 zmain_vdd_check();// Make sure supply voltage is high enough to run 檢查芯片是否上電正常 6 InitBoard( OB_COLD );// Initialize board I/O 初始化I/O,LED,Timer等 7 HalDriverInit();// Initialze HAL drivers 初始化硬件抽象層驅動模塊 8 osal_nv_init( NULL );// Initialize NV System 初始化flash存儲器 9 znpTestRF();// Initialize and check the ZNP RF Test Mode NV items. 10 ZMacInit();// Initialize the MAC 初始化MAC層 11 zmain_ext_addr();// Determine the extended address 確定IEEE64位地址 12 13 #if defined ZCL_KEY_ESTABLISH 14 zmain_cert_init();// Initialize the Certicom certificate information. 15 #endif 16 17 zgInit();// Initialize basic NV items 初始化非易失變量 18 19 #ifndef NONWK 20 afInit();// Since the AF isn't a task, call it's initialization routine 21 #endif 22 23 osal_init_system();// Initialize the operating system 初始化OS(重點介紹1) 24 osal_int_enable( INTS_ALL );// Allow interrupts 使能中斷 25 InitBoard( OB_READY );// Final board initialization 最終板載初始化 26 zmain_dev_info();// Display information about this device 顯示設備信息(這里有LCD屏幕) 27 28 #ifdef LCD_SUPPORTED/* Display the device info on the LCD 將信息顯示在LCD上*/ 29 zmain_lcd_init(); 30 #endif 31 32 #ifdef WDT_IN_PM1 33 WatchDogEnable( WDTIMX );/* If WDT is used, this is a good place to enable it. */ 34 #endif 35 36 osal_start_znp(); // No Return from here 執(zhí)行操作系統(tǒng)(重點介紹2) 37 38 return 0; // Shouldn't get here. 39 } // main()代碼有點難懂,核心是執(zhí)行初始化工作,包括硬件抽象層、網絡層、任務等。然后執(zhí)行osal_start_znp() ,進入一個死循環(huán),不斷對任務進行遍歷執(zhí)行。這里我們需要重點了解兩個函數:
?
?
① 操作系統(tǒng)初始化函數
在操作系統(tǒng)初始化中需重點關注的是操作系統(tǒng)任務初始化osalInitTasks函數,操作系統(tǒng)初始化函數中主要來創(chuàng)建任務,taskID是任務ID,每增加一個任務ID++,同時ID越小表示該任務優(yōu)先級越高!其中藍框內的函數是要根據系統(tǒng)想完成的任務做修改的地方,其他都是官方提供的基本不用變的任務。
?
② 操作系統(tǒng)啟動函數
?
執(zhí)行OS的函數就是個大循環(huán),不斷取出當前優(yōu)先級最高的待處理事件進行處理,處理的核心思想在osal_run_task函數內:通過調用一個函數指針來遠程調用一個事件處理函數!
?
8、小結
至此,我們講到任務如何建立、如何處理等,其中有一個環(huán)節(jié)沒有講——如何從events=(tasksArr[idx])(idx,event)關聯(lián)到每個具體任務的事件處理函數的?這個其實我在CC2540/CC2541的前兩篇中已有詳細介紹:[接下來會針對具體通信梳理流程!]
1、CC2541藍牙4.0芯片中級教程——基于OSAL操作系統(tǒng)的運行流程了解+定時器和串口例程了解
2、CC2541芯片中級教程-OSAL操作系統(tǒng)(進一步了解-OLED && 普通按鍵和5方向按鍵-中斷!!!)這個系統(tǒng)驅動層和應用層不一樣~
3、CC2541芯片中級教程-OSAL操作系統(tǒng)(ADC光敏電阻和修改串口波特率)
4、CC2541芯片中級教程-OSAL操作系統(tǒng)(簡單AT指令實現(xiàn)+IIC軟件和硬件實現(xiàn)驅動MPU6050)
5、CC2541芯片中級教程-OSAL操作系統(tǒng)(PWM+看門狗)
?
?
Zigbee系列文章:
[ZigBee] 1、 ZigBee簡介
[ZigBee] 2、 ZigBee開發(fā)環(huán)境搭建
[ZigBee] 3、ZigBee基礎實驗——GPIO輸出控制實驗-控制Led亮滅
[ZigBee] 4、ZigBee基礎實驗——中斷
[ZigBee] 5、ZigBee基礎實驗——圖文與代碼詳解定時器1(16位定時器)(長文)
[ZigBee] 6、ZigBee基礎實驗——定時器3和定時器4(8 位定時器)
[ZigBee] 7、ZigBee之UART剖析(ONLY串口發(fā)送)
[ZigBee] 8、ZigBee之UART剖析·二(串口收發(fā))
[ZigBee] 9、ZigBee之AD剖析——AD采集CC2530溫度串口顯示
[ZigBee] 10、ZigBee之睡眠定時器
[ZigBee] 11、ZigBee之睡眠定時器二
[ZigBee] 12、ZigBee之看門狗定時器——餓了就咬人的GOOD DOG
[ZigBee] 13、ZigBee基礎階段性回顧與加深理解——用定時器1產生PWM來控制LED亮度(七色燈)
[ZigBee] 14、Zigbee無線通信前奏——BasicRF 簡單無線點對點傳輸協(xié)議
?
?
PS:如果您覺得還不錯,點個贊,讓更多人受益~
@beautifulzzzz?2016-07-31 continue~??
e-mail:beautifulzzzz@qq.com?
sina:http://weibo.com/beautifulzzzz?is_all=1
?
總結
以上是生活随笔為你收集整理的[ZigBee] 15、Zigbee协议栈应用(一)——Zigbee协议栈介绍及简单例子(长文,OSAL及Zigbee入门知识)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MATLAB函数速查手册
- 下一篇: 学习网站及编程电子书下载网站