ZigBee学习笔记CC2530

合集下载

zigbee学习笔记

zigbee学习笔记

关于ZIGBEE技术Zigbee的由来在蓝牙技术的使用过程中,人们发现蓝牙技术尽管有许多优点,但仍存在许多缺陷。

对工业,家庭自动化控制和遥测遥控领域而言,蓝牙技术显得太复杂,功耗大,距离近,组网规模太小等,而工业自动化对无线通信的需求越来越强烈。

正因此,经过人们长期努力,Zigbee协议在2003年中通过后,于2004正式问世了。

Zigbee是什么Zigbee是一个由可多到65000个无线数传模块组成的一个无线数传网络平台,十分类似现有的移动通信的CDMA网或GSM网,每一个Zigbee网络数传模块类似移动网络的一个基站,在整个网络范围内,它们之间可以进行相互通信;每个网络节点间的距离可以从标准的75米,到扩展后的几百米,甚至几公里;另外整个Zigbee网络还可以与现有的其它的各种网络连接。

例如,你可以通过互联网在北京监控云南某地的一个Zigbee控制网络。

不同的是,Zigbee网络主要是为自动化控制数据传输而建立,而移动通信网主要是为语音通信而建立;每个移动基站价值一般都在百万元人民币以上,而每个Zigbee―基站‖却不到1000元人民币;每个Zigbee 网络节点不仅本身可以与监控对对象,例如传感器连接直接进行数据采集和监控,它还可以自动中转别的网络节点传过来的数据资料; 除此之外,每一个Zigbee网络节点(FFD)还可在自己信号覆盖的范围内,和多个不承担网络信息中转任务的孤立的子节点(RFD)无线连接。

每个Zigbee网络节点(FFD和RFD)可以可支持多到31个的传感器和受控设备,每一个传感器和受控设备终可以有8种不同的接口方式。

可以采集和传输数字量和模拟量。

Zigbee技术的应用领域Zigbee技术的目标就是针对工业,家庭自动化,遥测遥控,汽车自动化、农业自动化和医疗护理等,例如灯光自动化控制,传感器的无线数据采集和监控,油田,电力,矿山和物流管理等应用领域。

另外它还可以对局部区域内移动目标例如城市中的车辆进行定位.通常,符合如下条件之一的应用,就可以考虑采用Zigbee技术做无线传输:1.需要数据采集或监控的网点多;2.要求传输的数据量不大,而要求设备成本低;3.要求数据传输可性高,安全性高;4.设备体积很小,不便放置较大的充电电池或者电源模块;5.电池供电;6.地形复杂,监测点多,需要较大的网络覆盖;7.现有移动网络的覆盖盲区;8.使用现存移动网络进行低数据量传输的遥测遥控系统。

ZigBee学习电子笔记

ZigBee学习电子笔记

第一讲第二讲2530通用I/O口有21个:P0/P1/口个8个;P2口5个,其中,P1_0、P_1有20mA的驱动能力,其余只有4mA2.IO口配置相关的寄存器(3个)PxSEL: P0SEL、P1SEL、P2SEL,每个寄存器是1byte,分别用来设定3个口的工作模式。

IO的两种工作模式:1.普通IO口模式:点灯、监测按键输入2.片上外设模式:作为串口或者其他非普通IO口PxDIR:P0DIR/P1DIR/P2DIR,每个寄存器占一个字节,用来设定IO口作为输入还是输出PxINP:P0INP/P1INP/P2INP:输入情况下,注意P2INP寄存器后3位的用法(见下图):输出示例(以P0_0为例):1)设置P0_0为普通IO口工作模式,非片上外设:P0SEL=0xFE(&11111110) 2)让P0_0作为输出用,非输入监测用:P0DIR=0x01(+ 00000001)3)输出(如P0_0=0或P0_0=1等)。

输入示例(让P1_2作为输入):1)设置P1_2为普通IO口工作模式,非片上外设:P1SEL=0xfd(11111011)2)让P1_2作为输入检测用,非输出用P1DIR=0xfd(11111011)3)选择上拉、下拉或三态中的一种输入(因为上电的时候寄存器默认为0,所以IO口都默认工作在普通IO口输入、上下拉模式)4)检测用:If (P1_2= =0 or 1){}Else{}总结:由此可见,当芯片上电初始化后,3组IO口默认工作在普通IO口下的输入监测、上拉输入模式。

自己编程示例:第三讲:外部中断检测中断有3级开关:CPU中断总开关------IO口组中断开关---------IO组内某口中断开关中断信号触发类型选择:上升、下降因此,某IO口产生中断需配置:1)CPU中断开关打开;EA=1;2)该口所在的IO组中断打开;P0组的中断开关在IEN1的第5位;P1组的中断开关在IEN2的第4位;P2组的中断开关在IEN2的第1位;3)该口中断打开;P0IEN;8位寄存器。

基于CC2530的Zigbee无线传感网络的设计与实现

基于CC2530的Zigbee无线传感网络的设计与实现

基于CC2530的Zigbee无线传感网络的设计与实现二、硬件设计1. CC2530芯片CC2530是德州仪器(TI)公司推出的一款具有Zigbee通信功能的片上系统(SoC)芯片,集成了802.15.4无线通信功能以及8051微控制器。

CC2530具有低功耗、快速响应、可靠性高等特点,适合用于构建Zigbee传感网络。

2. 传感器节点传感器节点是Zigbee网络中的重要组成部分,它可以通过各种传感器采集环境信息,并通过无线网络发送到协调器节点。

传感器节点通常包括温度传感器、湿度传感器、光敏传感器等,以满足不同的监测需求。

3. 协调器节点协调器节点是Zigbee网络中的核心节点,负责网络管理、数据协调、安全认证等功能。

在本设计中,我们选择CC2530作为协调器节点的芯片,通过其内置的Zigbee功能实现网络连接和数据传输。

4. 网络拓扑在设计Zigbee无线传感网络时,需要考虑网络拓扑结构,一般可以选择星型、网状或者混合型拓扑结构。

根据实际应用需求,可以灵活选择合适的网络拓扑结构。

三、软件开发1. Zigbee协议栈在基于CC2530的Zigbee无线传感网络中,需要使用Zigbee协议栈来实现Zigbee协议的各层功能,包括PHY层、MAC层、网络层和应用层等。

TI 公司提供了针对CC2530芯片的Z-Stack协议栈,可以帮助开发者快速实现Zigbee通信功能。

2. 网络配置在软件开发过程中,需要对Zigbee网络进行配置,包括节点连接、网络路由、数据传输等方面。

通过Z-Stack协议栈提供的API接口,可以方便地进行网络配置和管理。

3. 数据处理在传感节点和协调器节点之间,需要进行数据的采集、传输和处理。

通过Z-Stack提供的数据传输接口和协议栈功能,可以实现传感数据的采集和传输,以及协调器节点的数据处理和分发。

3. 安全认证在Zigbee网络中,安全认证是至关重要的一环。

通过Z-Stack协议栈提供的安全认证接口,可以实现节点之间的安全通信,保障网络数据的安全性。

CC2530控制光敏传感器

CC2530控制光敏传感器
WeBee 团队
Zigbee 组网实验教程
3、 光敏传感器
前言:这一节我们我学习传感器部分内容中的光敏传感器,这一类型的传感器 跟前面温湿度的传感器最大的区别就是控制简单,只有硬件电路搭好了, 给 CC2530 的 IO 口一个高低电平就是反映外界情况。所以我们用起来就 很方便。
传感器介绍: 光敏传感器是最常见的传感器之一,它的种类繁多,主要有:光电管、光 电倍增管、光敏电阻、光敏三极管、太阳能电池、红外线传感器、紫外线 传感器、光纤式光电传感器、色彩传感器、CCD 和 CMOS 图像传感器等。 它的敏感波长在可见光波长附近,包括红外线波长和紫外线波长。光传感 器不只局限于对光的探测,它还可以作为探测元件组成其他传感器,对许 多非电量进行检测,只要将这些非电量转换为光信号的变化即可。光传感 器是目前产量最多、应用最广的传感器之一,它在自动控制和非电量电测 技术中占有非常重要的地位。最简单的光敏传感器是光敏电阻,当光子冲 击接合处就会产生电流。
22. void InitLed(void)
23. {
P1DIR |= 0x01; //P1_0 定义为输出
LED1 = 1;
//LED1 灯熄灭
24. }
25. /**************************** 光敏电阻初始化函数
26. *****************************/ 27. void LightInit() 28. {
16. {
17. uint i,j;
18. for(i=xms;i>0;i--)
for(j=587;j>0;j--);
19. }
20. /**************************** LED 初始化函数

CC2530学习路线-基础实验-GPIO按键控制LED灯亮灭(2)

CC2530学习路线-基础实验-GPIO按键控制LED灯亮灭(2)

CC2530学习路线-基础实验-GPIO按键控制LED灯亮灭(2)⽬录1.前期预备知识1.1 新⼤陆Zigbee模块按键电路图由上图可知,Zigbee模块的SW1按钮连接在P1.2端⼝上,当SW1导通,P1.2电平从3.3V被拉低接地。

所以P1.2输⼊模式为下拉输⼊.1.2 CC2530相关寄存器寄存器名称寄存器作⽤寄存器描述P1 (0x90)*控制端⼝1的⾼低电平端⼝1.通⽤I/O。

可以通过SFR位寻址P1SEL(0xF4)端⼝1 8个⼦端⼝的功能选择P1SEL的8个bit分别代表 => P1.7~P1.0的功能选择.值为 0:代表通⽤I/0(GPIO)功能.值为 1 : 代表外设功能P1DIR(0xFE)端⼝1 输⼊输出选择P1DIR的bit定义同P1SEL;值为 0:代表从外部输⼊信号⾄CC2530;值为 1:代表从CC2530输出信号⾄外部P1INP (0xF6)端⼝1 输⼊模式选择P1INP定义为P1.7~P1.2的I/O输⼊模式。

其中P1.0和P1.1是没有上拉/下拉功能。

值为 0:上拉/下拉。

值为 1:三态(⾼电平、低电平、⾼阻态)P2INP (0xINP)端⼝2 输⼊模式及其它端⼝选择P2INP⽐较特殊,因为P2端⼝引出的引脚只有3个,所以P2INP还有其它功能。

bit 0 ~ 4 : P2.4~P2.0的输⼊模式。

0 : 上拉/下拉; 1:三态bit 5 : 设置端⼝0上拉/下拉选择。

对端⼝P0上⾯的所有引脚设置为上拉/下拉输⼊ 0 : 上拉; 1: 下拉bit 6 : 同bit 5功能,但是是设置端⼝1上所有引脚bit 7 : 同bit5功能,但是是设置端⼝2上的所有引脚P1IEN(0x8D)端⼝1 中断屏蔽端⼝P1.7~P1.0的中断使能(也就是说中断是否Enable*(打开))0 : 中断禁⽤1 : 中断使能PICTL(0x8C)端⼝中断控制 P0ICON(bit0)端⼝0、1、2输⼊模式下的中断配置。

ZigBee芯片CC2530寄存器配置说明

ZigBee芯片CC2530寄存器配置说明

CC2530寄存器配置说明ZigBee的基础实验(1)这是飞比FB2530EB V2.0提供的芯片I/O对应表*more607*2011/11/17 22:13*飞比CC2530EB模块*/#include <ioCC2530.h>#define uint unsigned int#define uchar unsigned char//定义控制灯的端口#define RLED P1_0 //定义LED1为P1.0口控制#define GLED P1_1 //定义LED2为P1.1口控制#define YLED P1_4 //定义LED3为P1.4口控制#define BLED P0_1 //定义LED4为P0.1口控制#define S1 P0_1 //定义S1为P0.1口控制(注意:因为端口复用所以需要设置P0DIR,//在程序中复用比较难,所以本程序就不用来做按键了)#define S2 P0_3 //定义S2为P0.3口控制(我将P10的针脚接到P14针脚上,所以是P0.3口)#define S6 P1_2 //定义S6为P1.2口控制//函数声明void InitIO(void); //初始化LED控制IO口函数void InitKey(void); //初始化按键void keyScan(void); //按键输入//全局变量int times; //计数器void InitIO(void) //初始化IO口程序{P1DIR |= 0x13; //P1_0、P1_1、P1_4定义为输出P0DIR |= 0x02; //P0_1定义为输出RLED = 1;GLED = 1;YLED = 1;BLED = 1; //将4盏LED灯都打开}void InitKey(void)//初始化按键{P1SEL &= 0xFB; //定义为输入P1DIR &= 0xFB; //按钮s6的P1INP |= 0x06; //拉高电压P0SEL &= 0xFB; //定义为输入P0DIR &= 0xFB; //按钮s6的P0INP |= 0x06; //拉高电压}void keyScan(void){if(S6 == 0)times ++;//增加值while(S6 == 0);if(S2 == 0)times=0;//清空值while(S2 == 0 );}void main(void){times = 0;InitIO(); //初始化while(1) //死循环让循环内的代码不断执行{keyScan();if(times>4)times = 0;if(times == 0)//灯全灭{RLED = 0;GLED = 0;YLED = 0;BLED = 0;}if(times == 1)//亮一灯{RLED = 1;GLED = 0;YLED = 0;BLED = 0;}if(times == 2)//亮两个灯{RLED = 1;GLED = 1;YLED = 0;BLED = 0;}if(times == 3)//亮三个灯{RLED = 1;GLED = 1;YLED = 1;BLED = 0;}if(times == 4)//全亮{RLED = 1;GLED = 1;YLED = 1;BLED = 1;}}}来自:/j_evil/blog/static/163211317201161211362979/数据手册P0SEL(P1SEL相同):各个I/O口的功能选择,0为普通I/O功能,1为外设功能P2SEL:(D0到D2位)端口2 功能选择和端口1 外设优先级控制什么是外设优先级:当PERCFG分配两个外设到相同的引脚时,需要设置这两个外设的优先级,确定哪一个外设先被响应ERCFG:设置部分外设的I/O位置,0为默认I位置1,1为默认位置2P0DIR(P1DIR相同):设置各个I/O的方向,0为输入,1为输出P2DIR :D0~D4设置P2_0到P2_4的方向 D7、D6位作为端口0外设优先级的控制P0INP(P1INP意义相似) :设置各个I/O口的输入模式,0为上拉/下拉,1为三态模式需要注意的是:P1INP中,只有D7~D2分别设置对应I/O口的输入模式。

ZIGBEE学习笔记

ZIGBEE学习笔记

1、ZigBee协议栈:ZigBee协议是一系列的通信标准,通信双方需要共同按照这一标准进行正常的数据发射和接收。

协议栈是协议的具体实现形式,通俗点来理解就是协议栈是协议和用户之间的一个接口,开发人员通过使用协议栈来遵循和使用这个协议的,进而实现无线数据收发。

2、ZigBee无线网络协议层的架构:ZigBee协议分为两部分---IEEE 802.15.4和ZigBee,IEEE 802.15.4定义了PHY (物理层)和MAC(介质访问层)技术规范;ZigBee联盟定义了NWK(网络层)、APS(应用程序支持子层)、APL(应用层)技术规范。

ZigBee协议栈就是将各个层定义的协议都集合在一起,以函数的形式实现,并给用户提供API(应用层),用户可以直接调用---学习Zigbee就是熟悉API和学习如何使用对应函数。

3、用户实现简单的无线数据通信的一般步骤:---组网:调用协议栈的组网函数、加入网络函数,实现网络的建立与节点的加入。

---发送:发送节点调用协议栈的无线数据发送函数,实现无线数据发送。

---接收:接收节点调用协议栈的无线数据接收函数,实现无线数据接收。

4、Z-STACK协议栈工作原理:Z-stack可以看做是一个小型的操作系统(本质是大型的程序),用于实现底层和网络层的内容,Z-stack将复杂部分屏蔽掉。

用户通过API函数就可以轻易用ZigBee。

5、协调器、路由器、终端:Router----路由器Coodinator----协调器EndDevice----终端设备(1)协调器:(coordinator)每个zigbee网络只允许有一个zigbee的协调器,协调器首先选择一个信道和网络标识(PAN ID),然后开始这个网络.因为协调器是整个网络的开始,他具有网络的最高权限,是整个网络的维护者,还可以保持间接寻址用的表格绑定,同时还可以设计安全中心和执行其他动作,保持网络其他设备的通信。

飞比”Zigbee论坛CC2530开发板学习教程

飞比”Zigbee论坛CC2530开发板学习教程

“飞比”Zigbee论坛CC2530开发板学习教程(一)--前言“奥特曼Zigbee读书日记”已经写到第六部分了,首先非常感谢广大网友的支持与长期关注,此系列笔记会继续按照开源的方向进行深入的学习及更新。

同时,应广大网友的要求,也由于CC2530替代CC2430的强劲动力,经论坛管理团队讨论,最终决定在最近的一段时间内暂停“奥特曼Zigbee读书日记”的更新,而推出更偏向于应用,且更贴近市场的教程--“飞比”Zigbee论坛CC2530开发板学习教程。

本教程将着眼于TI公司的新一代 2.4G Zigbee IC-CC2530及最新的Zigbee协议-Zstack2007的应用学习。

所采用的硬件平台为CC2530的官方开发板-CC2530DK (SmartRF05EB)。

少一点炒作,多做一点实事--本站致力于营造一个“潜心学习、踏实做事”的氛围,希望广大Zigbee技术的爱好者、从业者积极参与,一起为中国的“无线单片机”技术献出自己的微薄之力。

[注:本文源自--“飞比”Zigbee论坛,为尊重劳动者成果,如需转载请保留此行,并通知作者]在这一章里,首先介绍下本套教程的整体思路及具体会涉及到的例程。

需要声明的一点是,本教程不是单片机的入门教程,需要读者对单片机及C语言有一定的基础,它关注的是Zigbee协议的基本概念及TI公司公开发行的免费Zigbee协议-Zstack 2007的应用。

首先着眼于TI公司提供的学习例程的讲解,这其中不但包括Zstack 2007的例程,同时会介绍TI的一些简化协议,如Basic RF/SimpliciTI等;然后会将“奥特曼Zigbee读书日记”中介绍的开源协议-MSSTATE LRWPAN,移植到CC2530DK中;最后,我们再来一起进入一个具体的应用领域-智能家居,学习一下TI的专用Zigbee遥控器协议RemoTI。

以下为具体采用的平台及相应的例程:(以下例程很多是CC2430及CC2530中共用的,本教程将同时适用)1、TI Basic RF----Light Switch----PER test2、Zstack 2007-----Sample App-----Generic App-----Home Automation-----Serial App-----Transmit App-----Simple App-----OAD/ENP/ESP等,待定3、MSSTATE LRWPAN ---- 平台移植及Ping Pong例程4、RemoTI声明:本教程中采用的源代码均来源于官方网站,并在此基础上进行修改,本站尊重原作者的劳动,将保留所有源文件的版权信息,并将标明本站进行的修改。

Zigbee无线传输技术学习

Zigbee无线传输技术学习

目录第一章 ZIGBEE核心板(CC2530) (1)1、产品概述 (1)2、原理说明 (2)第二章 ZIGBEE节点 (4)1、产品概述 (4)2、通用节点原理 (4)3、传感器节点原理 (6)第三章 CC2530功能说明 (9)1、CC2530芯片概览 (9)2、CC2530重要寄存器 (11)第四章软件开发环境入门 (17)1、建立模板工程样例 (18)1)建立新工程 (18)2)添加工程文件 (21)3)配置工程选项 (23)4)编译和链接 (27)2、下载和调试 (28)1)安装仿真器驱动 (28)2)调试和运行 (30)第五章基础实验 (33)实验一、LED发光二极管实验 (33)实验二、串口收发数据实验 (35)实验三、按键控制实验 ............................. 错误!未定义书签。

实验四、液晶显示实验 ............................. 错误!未定义书签。

实验五、电池监测实验 ............................. 错误!未定义书签。

实验六、空气温湿度传感器实验 ..................... 错误!未定义书签。

实验七、三轴加速度传感器实验 ..................... 错误!未定义书签。

实验八、人体红外传感器实验 ....................... 错误!未定义书签。

实验九、可燃气体传感器实验 ....................... 错误!未定义书签。

实验十、干簧管与霍尔开关传感器实验 ............... 错误!未定义书签。

实验十一、接近开关与红外对射传感器实验 ........... 错误!未定义书签。

实验十二、声光传感器实验 ......................... 错误!未定义书签。

实验十三、按键实验............................... 错误!未定义书签。

cc2530工作原理(一)

cc2530工作原理(一)

cc2530工作原理(一)CC2530工作原理简介CC2530是一款常见的无线通信芯片,广泛应用于物联网领域。

它采用TI公司的Zigbee技术,具有低功耗、长距离传输、自组网等特点。

本文将从浅入深解释CC2530的工作原理。

Zigbee无线通信技术Zigbee是一种低功耗、短距离、低速率的无线通信技术。

它基于IEEE 标准,并在其上添加了网络协议和应用层协议。

Zigbee网络采用网状拓扑结构,由一个协调器和多个终端设备组成。

CC2530芯片作为终端设备连接到Zigbee网络中。

CC2530芯片结构CC2530芯片包括处理器、收发器、外设等组件。

•处理器:CC2530采用8051内核的8位微控制器,用于控制全芯片的各个模块。

•收发器:CC2530集成了的射频收发电路,可以与其他设备进行无线通信。

•外设:CC2530还包含了GPIO、UART、I2C等外设接口,用于连接外部设备。

CC2530的工作原理步骤1.启动和初始化:CC2530芯片上电后,处理器将通过引脚配置、时钟设置等完成初始化。

2.Zigbee网络加入:CC2530通过射频收发电路与协调器进行通信,发送加入网络的请求。

3.网络配置:协调器接收到CC2530的请求后,根据网络配置规则为CC2530分配网络地址,并将其加入到Zigbee网络中。

4.数据收发:CC2530可以通过射频收发电路与其他设备进行数据收发。

它采用插槽访问方式,即在协调器规定的时间插槽内完成数据传输。

5.自组网:CC2530可以自动组网,根据网络拓扑结构自动选择路由路径,实现数据的可靠传输。

6.低功耗管理:CC2530具有低功耗特性,可以根据需要切换不同的功耗模式,延长电池寿命。

总结CC2530是一款基于Zigbee无线通信技术的芯片,通过与协调器的通信,实现与其他设备之间的无线数据收发。

它采用自组网和低功耗管理技术,为物联网应用提供了一种可靠的通信解决方案。

以上就是CC2530的工作原理的简要介绍,希望对读者有所帮助。

基于CC2530及ZigBee协议栈设计无线网络传感器节点

基于CC2530及ZigBee协议栈设计无线网络传感器节点

基于CC2530及ZigBee协议栈设计无线网络传感器节点基于CC2530及ZigBee协议栈设计无线网络传感器节点近年来,随着物联网技术的快速发展,无线传感器网络(WSN)应用正在不断增加。

无线传感器节点作为WSN的重要组成部分,可以实时监测环境中的各种参数,并将数据传输到数据中心进行处理和分析。

本文将介绍基于CC2530芯片和ZigBee协议栈设计的无线网络传感器节点。

一、CC2530芯片介绍CC2530芯片是德州仪器(Texas Instruments)公司推出的一款低功耗、高性能的无线SoC芯片。

它集成了8051微控制器核心和IEEE 802.15.4无线收发器,提供丰富的外设接口,并支持多种通信协议,如ZigBee、RF4CE、ZigBee RF4CE、SP100和6LoWPAN。

其低功耗特性使其成为设计低功耗无线传感器节点的理想选择。

二、ZigBee协议栈简介ZigBee是一种低功耗、短距离无线通信技术,主要用于自动化控制、智能家居和工业应用。

ZigBee协议栈分为应用层、网络层、MAC层和物理层。

应用层负责定义各种应用场景下的数据交换格式和协议,网络层负责网络拓扑管理和路由选择,MAC层负责对数据进行处理和封装,物理层负责无线信号的发送和接收。

三、无线网络传感器节点设计基于CC2530芯片和ZigBee协议栈,设计了一种低功耗的无线网络传感器节点。

该节点由CC2530芯片、传感器模块、电源管理模块和外设接口组成。

1. CC2530芯片:作为无线SoC芯片,CC2530芯片集成了8051微控制器核心和无线收发器。

8051微控制器核心负责控制节点的各种操作,如数据采集、数据处理和通信控制。

无线收发器负责与其他节点进行通信,通过ZigBee协议栈实现数据的传输和接收。

2. 传感器模块:传感器模块负责实时监测环境中的各种参数,如温度、湿度、光照等。

通过与CC2530芯片的接口进行数据传输,将采集到的数据传送给CC2530芯片进行处理和分析。

Zigbee无线单片机CC2530介绍

Zigbee无线单片机CC2530介绍

第三章 ZigBee无线单片机TI 公司的CC2530是真正的系统级SoC芯片,适用于2.4GHz IEEE 802.15.4,ZigBee和RF4CE应用。

CC2530包括了极好性能的一流的RF收发器,工业标准增强型8051 MCU,系统中可编程的闪存,8KB RAM,具有不同的运行模式,使得它尤其适应超低功耗要求的系统,以及许多其它功能强大的特性,结合德州仪器的业界领先的黄金单元ZigBee 协议栈(Z-Stack™),提供了一个强大和完整的ZigBee 解决方案。

CC2530可广泛应用在2.4-GHz IEEE 802.15.4系统, RF4CE遥控控制系统,ZigBee系统,家庭/建筑物自动化,照明系统,工业控制和监视,低功耗无线传感器网络,消费类电子和卫生保健等领域。

3.1 CC2530芯片的特点CC2530是一个真正的用于2.4-GHz IEEE 802.15.4与Zigbee应用的SOC解决方案。

这种解决方案能够提高性能并满足以ZigBee为基础的2.4 GHz ISM波段应用对低成本、低功耗的要求。

它结合了一个高性能2.4 GHz DSSS(直接序列扩频)射频收发器核心和一颗工业级小巧、高效的8051控制器。

CC2530芯片方框图如图3.1所示。

内含模块大致可以分为三类:CPU 和内存相关的模块;外设、时钟和电源管理相关的模块,以及射频率相关的模块。

CC2530在单个芯片上整合了8051兼容微控制器、ZigBee 射频(RF)前端、内存和FLASH存储器等,还包含串行接口(UART)、模/数转换器(ADC)、多个定时器(Timer)、AESl28安全协处理器、看门狗定时器(WatchDog Timer)、32 kHz晶振的休眠模式定时器、上电复位电路(Power 0n Reset)、掉电检测电路(Brown Out Detection)以及21个可编程IO口等外设接口单元。

CC2530芯片采用O.18um CMOS工艺生产,工作时的电流损耗为20 mA;在接收和发射模式下,电流损耗分别低于30 mA或40 mA。

基于CC2530的ZigBee无线传感器网络的设计与实现

基于CC2530的ZigBee无线传感器网络的设计与实现

基于CC2530的ZigBee无线传感器网络的设计与实现基于CC2530的ZigBee无线传感器网络的设计与实现一、引言近年来,随着无线通信技术的快速发展,无线传感器网络(Wireless Sensor Network,简称WSN)已经成为了研究的热点之一。

WSN是由大量的分布式感知节点组成的网络,这些感知节点可以自动地收集、处理并传输周围环境中的信息。

而ZigBee无线传感器网络提供了一种低功耗、低成本、低数据速率的解决方案,被广泛用于环境监测、物联网和智能家居等领域。

本文将基于CC2530芯片,设计并实现一个ZigBee无线传感器网络,探讨其在物联网中的应用。

二、ZigBee无线传感器网络的架构ZigBee无线传感器网络的架构包括感知层、网络层和应用层。

(一)感知层感知层是ZigBee无线传感器网络中的底层,由一系列具备感知、采样和处理能力的传感器节点组成。

这些传感器节点能够感知周围环境中的各种信息,并将数据采样后发送到网络层。

(二)网络层网络层负责传感器节点之间的通信和数据传输。

每个传感器节点都有一个唯一的地址,通过网络层可以实现节点之间的无线通信。

网络层采用了自组织、自适应和多跳中继的方式,能够灵活地组网并保持网络的稳定性和可靠性。

(三)应用层应用层是ZigBee无线传感器网络中的最顶层,负责数据的处理和应用。

通过应用层,可以实现对传感器节点的控制和监测。

例如,在环境监测中,可以通过应用层实时地获取温度、湿度等数据,并进行相应的控制和分析。

三、CC2530芯片的选用与介绍CC2530芯片是由德州仪器(Texas Instruments)推出的一款专用于无线传感器网络的低功耗SoC芯片。

该芯片集成了处理器、射频收发器和外围接口等功能,具备良好的性能和低功耗特性。

CC2530芯片采用了IEEE 802.15.4标准的ZigBee协议栈,支持多种网络拓扑结构以及多种通信方式,适用于不同场景下的应用需求。

基于CC2530的ZigBee无线传感器网络的设计与实现

基于CC2530的ZigBee无线传感器网络的设计与实现

基于CC2530的ZigBee无线传感器网络的设计与实现随着物联网技术的迅猛发展,无线传感器网络在各个领域发挥着重要作用。

ZigBee作为一种低功耗、低数据传输率、广域无线通信技术,逐渐成为无线传感器网络中的主流技术之一。

本文将以CC2530为硬件平台,设计并实现一个基于ZigBee的无线传感器网络。

首先,我们将介绍CC2530这款硬件平台的特点和功能。

CC2530是德州仪器(Texas Instruments)推出的一款具有微控制器和无线收发器功能的系统级芯片。

它集成了强大的处理能力和丰富的外设接口,可以支持多种无线通信标准,包括ZigBee。

为了简化设计和开发过程,我们选择CC2530作为我们的硬件平台。

其次,我们将讨论无线传感器网络的设计思路和目标。

无线传感器网络由大量分布在空间中的无线传感器节点组成,这些节点可以收集、传输和处理环境中的各种信息。

基于ZigBee的无线传感器网络具有低功耗、低成本和易于扩展的优势。

我们的设计目标是实现一个具备稳定性、可靠性和高性能的无线传感器网络。

然后,我们将详细介绍无线传感器网络的硬件组成和功能模块。

无线传感器网络通常由无线传感器节点、协调器和基站组成。

无线传感器节点负责数据采集和传输,协调器负责网络管理和节点通信,基站则负责数据处理和存储。

我们将详细介绍这些硬件组成和各自的功能模块,并阐述它们之间的关系和通信方式。

接下来,我们将介绍无线传感器网络的软件设计和实现。

在无线传感器网络中,软件设计起着至关重要的作用。

我们将采用CC2530的软件开发工具包,对协调器和无线传感器节点的软件进行开发和调试。

在软件设计中,我们将涉及到无线通信协议的选择、节点的路由算法、数据采集和处理算法等。

最后,我们将对设计实现的无线传感器网络进行测试和评估。

我们将利用实际的场景和环境,对无线传感器网络的性能和可靠性进行测试。

通过数据分析和对比,我们将评估无线传感器网络在不同场景和环境下的适用性,并提出可能的改进和优化方案。

ZigBee学习笔记CC2530

ZigBee学习笔记CC2530

已入门选手进一步学习的重点我发现最近群里很多人已经可以算是大致入门了,能够在原有例子的基础上进行一些简单工作,实现数据传输。

但是我也发现很多人开始把精力投入到钻研协议栈代码细节上面去了,实际上这种学习方式是有问题的。

第一:如果从应用的角度看,协议栈的一些实现细节是没有必要钻研的,这就好比是现在的PC机,已经有了Windows系统了,我们在这个系统之上实现自己应用程序的时候其实并不需要对Windows内部实现细节过多地关注,只要能够自由地在Windows下开发应用程序(其实就是调用大量的API函数)就可以了;第二:如果想从协议栈本身入手去做一些深入的工作,Zstack是不适合的,因为它不是完全开源,真想在路由算法、加密算法等方面做工作的话,目前TinyOS这样的开源协议栈才是首选。

所以,进一步学习的重点应该是:在什么时间什么地点调用什么函数的问题!那么如何来提高这方面的技能呢?1、浏览ZDP和ZDO相关代码,熟悉一下都有什么函数,这两个部分都做了什么,学习的过程中千万不要去钻研代码实现的细节,只要了解其流程以及都作了什么就可以了,否则你一定会迷失在那成千上万行的代码之中而不能自拔。

ZDP和ZDO的实现文件里面有大量的函数在以后具体应用中可以去调用。

2、典型例子中的ZDO消息使用其实只有那么几个例子,比如:ZDO_RegisterForZDOMsg(TaskID,End_Device_Bind_rsp)这样的,这是讲底层的一些事件消息引入到应用层的注册方法。

在深入应用的时候那么几个典型的消息注册是不够用的,比如我在一个应用中就注册了以下:ZDO_RegisterForZDOMsg( TaskID, End_Device_Bind_rsp ); // 我自己解析End_Device_Bind_rspZDO_RegisterForZDOMsg( TaskID, Match_Desc_rsp ); //我自己解析Match_Desc_rspZDO_RegisterForZDOMsg( TaskID, Device_annce); //我自己解析Device_annceZDO_RegisterForZDOMsg( TaskID, Active_EP_rsp); //我自己解析Active_EP_rspZDO_RegisterForZDOMsg( TaskID, Simple_Desc_rsp); //我自己解析Simple_Desc_rspZDO_RegisterForZDOMsg( TaskID, NWK_addr_rsp); //我自己解析NWK_addr_rsp在具体应用中,你会根据不同的网络需求去调用很多协议栈的设置好的req和处理rsp消息,那么协议栈都有那些req和rsp是你进一步学习所应该深入认识的。

ZigBee_zstack协议栈_CC2530开发_学习笔记

ZigBee_zstack协议栈_CC2530开发_学习笔记

CC Debugger设计有自恢复保险丝(200mA)接口说明CC Debugger的目标板调试端口引脚说明(1)JTAG 口: 1 GND 2 VCC3 DC4 DD5 CSN6 SCK7 RESET8 MOSI9 MISO10 NC仿真器的功能(1)电路调试,采用 IAR Embedded Workbench 7.51A for 8051;(2)Flash 编程,采用 SmartRF Flash Programmer;(3)RF 测试,采用 SmartRF studio;(4)包探测,采用 SmartRF Packet Sniffer.功能1,2调试和编程的连接方法包探测功能的连接方法注意事项(1)仿真器可为目标板提供最大 3.3V/200mA 电流,若目标板电流较大,请单独供电。

(2)初次上电或者带电插拔目标板,有时会导致无法仿真,按 RESET 键复位即可。

SmartRF Flash Programmer的使用CC DEBUGGER 在 SmartRF Flash Programmer 下的使用连接CC仿真器(1)EB ID<5026>:为 CC DEBUGGER 的设备 ID 号,(2)Chip type<N/A>:表明未连接或未检测到目标设备。

system on chip(1)选择Program CCxxxx SoC or MSP430选项(2)选中system on chip选项(3)在Flash 栏内浏览选中想要写入的HEX 文件(4)在“Action”栏里选择“Erase, Program and Verify”(5)点击Perform actionsErase擦除Erase and program擦除、编程Erase, program and verify擦除、编程和验证Append and verify追加 并 校验Verify against hex-file验证 hex文件Read flash into hex-file读flash 到 hex文件Flash lock (effective after program/append):Flash锁(有效程序/追加后):闪存锁Write protect:写保护:对于这些设备可以写保护每一页的flash图像。

Ti_CC2530之Zigbee学习笔记

Ti_CC2530之Zigbee学习笔记

Ti_CC2530之Zigbee学习笔记网友学习Zigbee的笔记这种学习方法值得借鉴,也值得推广,希望对大家学习Zigbee有所帮助。

硬件参考西安迖泰电子公司的CC2430开发套件。

目录一、重要变量说明 (2)二、重要属性 (9)三、重要结构 (13)四、重要的表 (17)五、ZigBee网络中的设备信息 (18)六、协调器网络的建立 (20)七、输入输出命令的邦定过程及数据发送 (23)一、重要变量说明编译选项:HOLD_AUTO_START --网络设备启动应用程序NV_RESTORE --在NV中保存网络状态RTR_NWKHAL_ADC --是否自持ADCHAL_DMA --是否支持DMAHAL_AESHAL_LCDHAL_LEDHAL_UARTHAL_KEYZDO_MGMT_NWKDISC_REQUEST --请求目标设备执行网络扫描ZDO_MGMT_NWKDISC_RESPONSE --响应目标设备执行网络扫描ZDO_MGMT_LQI_REQUEST --请求目标设备相邻设备列表ZDO_MGMT_LQI_RESPONSE --响应目标设备相邻设备列表ZDO_MGMT_RTG_REQUEST --请求目标设备路由表ZDO_MGMT_RTG_RESPONSEZDO_MGMT_BIND_REQUEST --请求目标设备绑定表ZDO_MGMT_BIND_RESPONSEZDO_MGMT_LEAVE_REQUEST --请求目标设备离开网络ZDO_MGMT_LEAVE_RESPONSEZDO_MGMT_ JOINDIRECT_REQUEST --请求目标设备直接连接另一个设备 ZDO_MGMT_ JOINDIRECT_RESPONSEZDO_MGMT_PERMIT_JOIN_RESPONSE --响应设备允许或拒绝连接宏:MAC_RADIO_TURN_OFF_POWER --关闭无线电MAC_RADIO_TURN_ON_POWER --打开无线电返回值状态:ZSUCCESS 0INVALID_TASK 1MSG_BUFFER_NOT_AVAIL 2INVALID_MSG_POINTER 3INVALID_LEN 4INVALID_SENDING_TASK 5INVALID_DESTINATION_TASK 6INVALID_EVENT_ID 7INVALID_TIMEOUT_VALUE 8INVALID_INTERRUPT_ID 9INVALID_ISR_PTR 10INVALID_TASK_TABLE 11NO_TIMER_AVAIL 12INVALID_MSG_LEN 13NOT_READY 14NV_ITEM_UNINIT 15NV_OPER_FAILED 16INVALID_MEM_SIZE 17NV_BAD_ITEM_LEN 18全局状态值:ZSuccess --成功 0x00 ZFailure --失败 0x01 ZInvalidParameter --无效参数 0x02 ZStack状态值:ZMemError --系统内存错误 0x10 ZBufferFull --缓冲区满 0x11 ZUnsupportedMode --未支持的模式 0x12 ZMacMemError --MAC 内存错误 0x13 ZSapiInProgress 0x20 ZSapiTimeout 0x21 ZSapiInit 0x22 APS层状态值:ZApsFail --失败 0xb1 ZApsTableFull --表满 0xb3ZApsIllegalRequestZApsInvalidBinding --绑定无效 0xb4 ZApsUnsupportedAttrib --未支持的属性0xb5 ZApsNotSupported --未支持0xb6 ZApsNoAck --没有Ack 0xb7 ZApsDuplicateEntry --条目重复 0xb8 ZApsNoBoundDevice --没有绑定设备 0xb9 SEC层状态值: ZSecNoKey --没有密钥0xa1 ZSecOldFrmCount 0xa2 ZSecMaxFrmCount --最大帧数 0xa3 ZSecCcmFail 0xa4 NWK层状态值:ZNwkInvalidParam --无效参数 0xc1 ZNwkInvalidRequest --无效请求0xc2 ZNwkNotPermitted --不允许0xc3 ZNwkStartupFailure --启动失败 0xc4 ZNwkAlreadyPresent --已存在0xc5 ZNwkSyncFailure --同步失败0xc6 ZNwkTableFull --表满0xc7 ZNwkUnknownDevice --未知设备0xc8 ZNwkUnsupportedAttribute --未支持的属性0xc9 ZNwkNoNetworks --没有网络 0xca ZNwkLeaveUnconfirmed --离开未确认 0xcb ZNwkNoAck --没有ACK 0xcc ZNwkNoRoute --没有路由 0xcd MAC层状态值:ZMacSuccess --成功 0x00 ZMacBeaconLoss --信标丢失 0xe0 ZMacChannelAccessFailure 0xe1 ZMacDenied 0xe2 ZMacDisableTrxFailure 0xe3ZMacFailedSecurityCheck 0xe4 ZMacFrameT ooLong 0xe5 ZMacInvalidGTS 0xe6 ZMacInvalidHandle 0xe7 ZMacInvalidParameter 0xe8 ZMacNoACK 0xe9 ZMacNoBeacon 0xea ZMacNoData 0xeb ZMacNoShortAddr 0xec ZMacOutOfCap 0xed ZMacPANIDConflict 0xee ZMacRealignment 0xef ZMacTransactionExpired 0xf0 ZMacTransactionOverFlow 0xf1 ZMacTxActive 0xf2 ZMacUnAvailableKey 0xf3 ZMacUnsupportedAttribute 0xf4 ZMacUnsupported 0xf5 组件标示:COMPID_OSAL 0COMPID_MTEL 1COMPID_MTSPCI 2COMPID_NWK 3COMPID_NWKIF 4COMPID_MACCB 5COMPID_MAC 6COMPID_APP 7COMPID_TEST 8COMPID_RTG 9COMPID_DATA 11测试中的组件标示:COMPID_TEST_NWK_STARTUP 20COMPID_TEST_SCAN_CONFIRM 21COMPID_TEST_ASSOC_CONFIRM 22COMPID_TEST_REMOTE_DATA_CONFI23RM系统事件:SYS_EVENT_MSG系统消息:SPI_INCOMING_ZTOOL_PORT 0x21SPI_INCOMING_ZAPP_DATA 0x22MT_SYS_APP_MSG 0x23MT_SYS_APP_RSP_MSG 0x24AF_DATA_CONFIRM_CMD 0xFDAF_INCOMING_MSG_CMD 0x1AAF_INCOMING_KVP_CMD 0x1BAF_INCOMING_GRP_KVP_CMD 0x1CKEY_CHANGE 0xC0ZDO_NEW_DSTADDR 0xD0ZDO_STATE_CHANGE 0xD1ZDO_MATCH_DESC_RSP_SENT 0xD2ZDO_CB_MSG 0xD3为用户所保留的消息id(用户自定义)0xE0—0xFF各层簇定义:APP层簇ID void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt ) SAMPLEAPP_MAX_CLUSTERS --最大簇数 2SAMPLEAPP_PERIODIC_CLUSTERID --一个簇标识的周期 1SAMPLEAPP_FLASH_CLUSTERID --一个簇标识的闪烁 2ZDO层簇ID void ZDApp_ProcessMsgCBs( zdoIncomingMsg_t *inMsg ) ZDO, _RESPONSE_BIT_V1_0 --响应位V1.0版本 0x80ZDO_RESPONSE_BIT --响应位 0x8000NWK_addr_req --网络地址请求 0x0000IEEE_addr_req --IEEE地址请求 0x0001Node_Desc_req --节点描述符请求 0x0002Power_Desc_req --电源描述符请求 0x0003Simple_Desc_req --简单描述符请求 0x0003Active_EP_req --动态端点/接口请求 0x0005Match_Desc_req --匹配描述符请求 0x0006NWK_addr_rsp (NWK_addr_req | ZDO_RESPONSE_BIT)IEEE_addr_rsp (IEEE_addr_req | ZDO_RESPONSE_BIT)Node_Desc_rsp (Node_Desc_req | ZDO_RESPONSE_BIT)Power_Desc_rsp (Power_Desc_req | ZDO_RESPONSE_BIT)Simple_Desc_rsp (Simple_Desc_req | ZDO_RESPONSE_BIT)Active_EP_rsp (Active_EP_req | ZDO_RESPONSE_BIT)Match_Desc_rsp (Match_Desc_req | ZDO_RESPONSE_BIT)Complex_Desc_req --复杂描述符请求 0x0010User_Desc_req --用户描述符请求 0x0011Discovery_Cache_req --缓存发现请求 0x0012End_Device_annce --终端设备性能 0x0013User_Desc_set --设置用户描述符 0x0014Server_Discovery_req --服务发现请求 0x0015Complex_Desc_rsp (Complex_Desc_req | ZDO_RESPONSE_BIT)User_Desc_rsp (User_Desc_req | ZDO_RESPONSE_BIT)Discovery_Cache_rsp (Discovery_Cache_req | ZDO_RESPONSE_BIT) User_Desc_conf (User_Desc_set | ZDO_RESPONSE_BIT)Server_Discovery_rsp (Server_Discovery_req | ZDO_RESPONSE_BIT)End_Device_Bind_req --终端设备绑定请求 0x0020Bind_req --绑定请求 0x0021Unbind_req --解除绑定请求 0x0022Bind_rsp (Bind_req | ZDO_RESPONSE_BIT)End_Device_Bind_rsp (End_Device_Bind_req | ZDO_RESPONSE_BIT) Unbind_rsp (Unbind_req | ZDO_RESPONSE_BIT)Mgmt_NWK_Disc_req --网络扫描请求 0x0030Mgmt_Lqi_req --相邻设备请求Mgmt_Rtg_req ((uint16)0x0032)Mgmt_Bind_req ((uint16)0x0033)Mgmt_Leave_req ((uint16)0x0034)Mgmt_Direct_Join_req ((uint16)0x0035)Mgmt_Permit_Join_req ((uint16)0x0036)Mgmt_NWK_Disc_rsp (Mgmt_NWK_Disc_req | ZDO_RESPONSE_BIT)Mgmt_Lqi_rsp (Mgmt_Lqi_req | ZDO_RESPONSE_BIT)Mgmt_Rtg_rsp (Mgmt_Rtg_req | ZDO_RESPONSE_BIT)Mgmt_Bind_rsp (Mgmt_Bind_req | ZDO_RESPONSE_BIT)Mgmt_Leave_rsp (Mgmt_Leave_req | ZDO_RESPONSE_BIT) Mgmt_Direct_Join_rsp (Mgmt_Direct_Join_req | ZDO_RESPONSE_BIT) Mgmt_Permit_Join_rsp (Mgmt_Permit_Join_req | ZDO_RESPONSE_BIT) 各层事件定义:MAC回调事件:void MAC_CbackEvent(macCbackEvent_t *pData)MAC_MLME_ASSOCIATE_IND --关联指示 1 MAC_MLME_ASSOCIATE_CNF --关联确认 2 MAC_MLME_DISASSOCIATE_IND --取消指示 3 MAC_MLME_DISASSOCIATE_CNF --取消确认 4 MAC_MLME_BEACON_NOTIFY_IND --信标通知指示 5 MAC_MLME_ORPHAN_IND --孤指示 6 MAC_MLME_SCAN_CNF --扫描确认7 MAC_MLME_START_CNF --开始确认8 MAC_MLME_SYNC_LOSS_IND --同步损失指示9 MAC_MLME_POLL_CNF --轮询确认10MAC_MLME_COMM_STATUS_IND --通信状态指示11 MAC_MLME_POLL_IND --轮询指示16 MAC_MCPS_DATA_CNF --数据确认 12 MAC_MCPS_DATA_IND --数据指示 13MAC_MCPS_PURGE_CNF --清除确认 14 MAC_PWR_ON_CNF --上电确认 15 ZDO层任务事件: UINT16 ZDApp_event_loop( byte task_id, UINT16 events )ZDO_NETWORK_INIT --设备初始化 0x0001ZDO_NETWORK_START --开始网络 0x0002ZDO_DEVICE_RESET --设备复位 0x0004ZDO_COMMAND_CNF --命令确认 0x0008ZDO_STATE_CHANGE_EVT --更新网路状态 0x0010ZDO_ROUTER_START --开始路由器 0x0020ZDO_NEW_DEVICE --新设备事件 0x0040ZDO_DEVICE_AUTH --设备确认事件 0x0080ZDO_SECMGR_EVENT --安全管理事件 0x0100ZDO_NWK_UPDATE_NV --保存网络状态 0x0200ZDO_FRAMECOUNTER_CHANGE --帧计数器改变 0x0400 二、重要属性获取或设置标准PIB MAC_MlmeGetReq() //获取属性值MAC_MlmeSetReq() //设置属性值MAC_ACK_WAIT_DURATION --等待确认帧的最大符号数MAC_ASSOCIATION_PERMIT --协调器允许关联MAC_AUTO_REQUEST --自动发送一个数据请求MAC_BATT_LIFE_EXT --启用电池寿命MAC_BATT_LIFE_EXT_PERIODSMAC_BEACON_PAYLOAD --信标负载内容MAC_BEACON_PAYLOAD_LENGTH --信标负载字节长度MAC_BEACON_ORDER --协调传送信标时间间隔MAC_BEACON_TX_TIMEMAC_BSN --信标帧序列号MAC_COORD_EXTENDED_ADDRESS --协调器扩展地址MAC_COORD_SHORT_ADDRESS --协调器短地址MAC_DSN --命令帧序列号MAC_GTS_PERMIT --PAN协调器接收GTS请求MAC_MAX_CSMA_BACKOFFS --消除信道之前,CSMA尝试抵消数 MAC_MIN_BE --如果设置为0,禁用避免碰撞MAC_PAN_ID --PAN标示符,0xFFFF不被关联MAC_PROMISCUOUS_MODE --mac处于混乱模式MAC_RX_ON_WHEN_IDLE --空闲周期启用接收器MAC_SHORT_ADDRESS --设备短地址,协调器在MAC_StartReq()设置,其他设备在关联中分配,MAC_ADDR_USE_EXT --设备没有短地址关联。

cc2530学习笔记

cc2530学习笔记

cc2530学习笔记case KEY_CHANGE://按键事件case AF_INCOMING_MSG_CMD://接收数据事件,调⽤函数AF_DataRequest()接收数据case ZDO_STATE_CHANGE://只要⽹络状态发⽣改变,就通过ZDO_STATE_CHANGE事件通知所有的任务。

//同时完成对协调器,路由器,终端的设置SAMPLEAPP_SEND_PERIODIC_MSG_EVT, //周期性事件处理函数SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT ); //每5s处理⼀次case SAMPLEAPP_PERIODIC_CLUSTERID: //收到⼴播数据case SAMPLEAPP_FLASH_CLUSTERID: //收到组播数据//接收数据,参数为接收到的数据void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )//分析发送周期信息void SampleApp_SendPeriodicMessage( void )/接收属于本应⽤任务SampleApp的消息,以SampleApp_TaskID标记MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SampleApp_TaskID );消息结构体:typedef struct{osal_event_hdr_t hdr; /* OSAL Message header */uint16 groupId; /* Message's group ID - 0 if not set */uint16 clusterId; /* Message's cluster ID */afAddrType_t srcAddr; /* Source Address, if endpoint is STUBAPS_INTER_PAN_EP,it's an InterPAN message */uint16 macDestAddr; /* MAC header destination short address */uint8 endPoint; /* destination endpoint */uint8 wasBroadcast; /* TRUE if network destination was a broadcast address */uint8 LinkQuality; /* The link quality of the received data frame */uint8 correlation; /* The raw correlation value of the received data frame */int8 rssi; /* The received RF power in units dBm */uint8 SecurityUse; /* deprecated */uint32 timestamp; /* receipt timestamp from MAC */uint8 nwkSeqNum; /* network header frame sequence number */afMSGCommandFormat_t cmd; /* Application Data */} afIncomingMSGPacket_t;typedef struct{uint8 TransSeqNumber;uint16 DataLength; // Number of bytes in TransDatauint8 *Data;} afMSGCommandFormat_t;event+簇id+消息内容+内容⼤⼩MSGpkt->hdr.event + MSGpkt->clusterId + MSGpkt->cmd.Data + MSGpkt->cmd.DataLengthuint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events )触发接收或者发送开始消息----》判断事件AF_INCOMING_MSG_CMD----》处理函数----》SAMPLEAPP_PERIODIC_CLUSTERID簇IDtypedef enum{afAddrNotPresent = AddrNotPresent,afAddr16Bit = Addr16Bit, //点播⽅式afAddr64Bit = Addr64Bit,afAddrGroup = AddrGroup, //组播⽅式afAddrBroadcast = AddrBroadcast //⼴播⽅式} afAddrMode_t;typedef struct{union{uint16 shortAddr; //短地址ZLongAddr_t extAddr; //IEEE地址} addr;afAddrMode_t addrMode; //传送模式uint8 endPoint; //端点号uint16 panId; // used for the INTER_PAN feature} afAddrType_t;afAddrType_t SampleApp_Periodic_DstAddr; //⼴播afAddrType_t SampleApp_Flash_DstAddr; //组播afAddrType_t SampleApp_P2P_DstAddr; //点播SampleApp_Periodic_DstAddr.addrMode = (afAddrMode_t)AddrBroadcast;//⼴播SampleApp_Periodic_DstAddr.endPoint = SAMPLEAPP_ENDPOINT; SampleApp_Periodic_DstAddr.addr.shortAddr = 0xFFFF; //⼴播地址// Setup for the flash command's destination address - Group 1SampleApp_Flash_DstAddr.addrMode = (afAddrMode_t)afAddrGroup;//组播SampleApp_Flash_DstAddr.endPoint = SAMPLEAPP_ENDPOINT; SampleApp_Flash_DstAddr.addr.shortAddr = SAMPLEAPP_FLASH_GROUP; SampleApp_P2P_DstAddr.addrMode = (afAddrMode_t)Addr16Bit; //点播SampleApp_P2P_DstAddr.endPoint = SAMPLEAPP_ENDPOINT; SampleApp_P2P_DstAddr.addr.shortAddr = 0x0000; //发给协调器地址为0。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

已入门选手进一步学习的重点我发现最近群里很多人已经可以算是大致入门了,能够在原有例子的基础上进行一些简单工作,实现数据传输。

但是我也发现很多人开始把精力投入到钻研协议栈代码细节上面去了,实际上这种学习方式是有问题的。

第一:如果从应用的角度看,协议栈的一些实现细节是没有必要钻研的,这就好比是现在的PC机,已经有了Windows系统了,我们在这个系统之上实现自己应用程序的时候其实并不需要对Windows内部实现细节过多地关注,只要能够自由地在Windows下开发应用程序(其实就是调用大量的API函数)就可以了;第二:如果想从协议栈本身入手去做一些深入的工作,Zstack是不适合的,因为它不是完全开源,真想在路由算法、加密算法等方面做工作的话,目前TinyOS这样的开源协议栈才是首选。

所以,进一步学习的重点应该是:在什么时间什么地点调用什么函数的问题!那么如何来提高这方面的技能呢?1、浏览ZDP和ZDO相关代码,熟悉一下都有什么函数,这两个部分都做了什么,学习的过程中千万不要去钻研代码实现的细节,只要了解其流程以及都作了什么就可以了,否则你一定会迷失在那成千上万行的代码之中而不能自拔。

ZDP和ZDO的实现文件里面有大量的函数在以后具体应用中可以去调用。

2、典型例子中的ZDO消息使用其实只有那么几个例子,比如:ZDO_RegisterForZDOMsg(TaskID,End_Device_Bind_rsp)这样的,这是讲底层的一些事件消息引入到应用层的注册方法。

在深入应用的时候那么几个典型的消息注册是不够用的,比如我在一个应用中就注册了以下:ZDO_RegisterForZDOMsg( TaskID, End_Device_Bind_rsp ); // 我自己解析End_Device_Bind_rspZDO_RegisterForZDOMsg( TaskID, Match_Desc_rsp ); //我自己解析Match_Desc_rspZDO_RegisterForZDOMsg( TaskID, Device_annce); //我自己解析Device_annceZDO_RegisterForZDOMsg( TaskID, Active_EP_rsp); //我自己解析Active_EP_rspZDO_RegisterForZDOMsg( TaskID, Simple_Desc_rsp); //我自己解析Simple_Desc_rspZDO_RegisterForZDOMsg( TaskID, NWK_addr_rsp); //我自己解析NWK_addr_rsp在具体应用中,你会根据不同的网络需求去调用很多协议栈的设置好的req和处理rsp消息,那么协议栈都有那些req和rsp是你进一步学习所应该深入认识的。

3、在自己使用系统的req和rsp的时候,如果你不知道该如何处理,你最好去看看MT是如何实现的,在MT功能模块中,对协议栈的绝大多数req和rsp都有调用和实现的例子可以参考,虽然我们在自己的应用中很少回去使用MT,但是Mt 的实现代码却是最好的参考资料。

上面几点是我目前能够想到的一些事情,以后有想法再补充吧!最后我举个例子:比如你想实现节点入网后自动报告自己的长短地址,然后主控节点处理节点的报告,并且向这个节点要求其发回存在于其上的EP信息,我们应该这样做:1、在新节点的ZDO_STATE_CHANGE消息处理函数中调用:ZDP_DeviceAnnce( NLME_GetShortAddr(), NLME_GetExtAddr(), \ZDO_Config_Node_Descriptor.CapabilityFlags, 0 );这个函数会自动以广播方式报告自己的短地址和长地址,其余在网的节点都可以收到;你也可以采用按键策略,新节点入网后通过按键触发来报告自己的长短地址:2、在主控节点的初始化函数中添加:ZDO_RegisterForZDOMsg( TaskID, Device_annce); //我自己解析Device_annce这样,当新入网节点Annce的时候,主控节点收到这个消息,然后通知给你的任务(TaskID),你的任务则需要在case ZDO_CB_MSG:处理函数中添加处理这个annce的代码,如:case Device_annce: //device annouce process.ProcessDeviceAnnce(inMsg);break;在自己实现的ProcessDeviceAnnce函数中,你可以提取出新来节点的长短地址。

3、有了新节点的长短地址,其实什么都可以做了,我现在利用新节点的长短地址来请求其返回它的EP信息:在适当的地方调用ZDP_ActiveEPReq( &zDestAddr, shortAddr, SECURITY_FLAG);这是一个直接面向目标短地址的单播req,目标节点收到这个req之后,会自动处理的(代码协议栈已经实现了),Zstack协议栈实际上实现了绝大多数响应req的函数,然后返回一个rsp,这一部分其实你不用管,也就是说目标节点方面你一行代码都不用写,存在其上的所有EP信息就会被返回到主控节点;但是Zstack没有实现绝大多数rsp处理函数,因为rsp一般来将用户会有不同的想法,所以他也没办法实现;4、主控节点如果想处理返回的活动EP信息(比如EP号),那么需要在任务初始化的时候注册一下由任务处理这个返回消息:ZDO_RegisterForZDOMsg( TaskID, Active_EP_rsp);然后在ZDO_CB_MSG处理函数中添加自己的处理代码:case Active_EP_rsp://active ep response process.ProcessActiveEpRsp(inMsg);break;自己编写的ProcessActiveEpRsp函数就可以提取到目标节点上所有EP信息,比如我自己实现的一段代码就是这样的(注释解释):static void ProcessActiveEpRsp(zdoIncomingMsg_t *inMsg){uint8 *pData;uint8 i;ZDO_ActiveEndpointRsp_t *pRsp = ZDO_ParseEPListRsp( inMsg ); //调用ZDO_ParseEPListRsp函数(这个函数协议栈已经实现了,什么时间什么地点调//用什么函数问题的具体体现,即:在rsp处理的时候调用这个函数,不知道你理解没?//下面我处理经过Parse后的消息:uint8 cnt = pRsp->cnt;pData = (uint8 *)osal_mem_alloc(6 + cnt);//here, 3 is one for status, two for short address.one is cntif(pData){pData[0] = LO_UINT16(pRsp->nwkAddr);pData[1] = HI_UINT16(pRsp->nwkAddr);pData[2] = pRsp->status;pData[3] = pData[0];pData[4] = pData[1];pData[5] = cnt;for(i=0;i < cnt;i++)pData[6 + i] = pRsp->epList;osal_mem_free(pRsp);Uart_SendBack(pData,(6 + cnt)); //串口方式把获得的信息发给PC,你可以存起来,也可以进一步做别的;osal_mem_free(pData);}HalLedSet(HAL_LED_GREEN,HAL_LED_MODE_FLASH); //用闪灯方式表示收到了消息。

}//函数里面这段代码我实现的依据是什么?这你就的去找找看协议栈是如何处理这个req的了,看看ZDP_ActiveEPReq函数的协议栈实现,//#define ZDP_ActiveEPReq( dstAddr, NWKAddrOfInterest, SecurityEnable ) \ // ZDP_NWKAddrOfInterestReq( dstAddr, \// NWKAddrOfInterest, Active_EP_req, SecurityEnable ) //看到这里就够了,我们知道这个函数调用会发一个Active_EP_req给目标节点,至于怎么发出去的,没必要研究了。

//再去查查看协议栈是如何处理Active_EP_req的,找到了://{ Active_EP_req, ZDO_ProcessActiveEPReq },//这个函数的具体实现(协议栈中的)/*void ZDO_ProcessActiveEPReq( zdoIncomingMsg_t *inMsg ){byte cnt = 0;uint16 aoi;byte stat = ZDP_SUCCESS;aoi = BUILD_UINT16( inMsg->asdu[0], inMsg->asdu[1] );if ( aoi == NLME_GetShortAddr() ){cnt = afNumEndPoints() - 1; // -1 for ZDO endpoint descriptorafEndPoints( (uint8 *)ZDOBuildBuf, true );}else{stat = ZDP_INVALID_REQTYPE;}ZDP_ActiveEPRsp( inMsg->TransSeq, &(inMsg->srcAddr), stat,aoi, cnt, (uint8 *)ZDOBuildBuf, inMsg->SecurityUse );*///这个你要看懂了,实际上就是向你报告有几个活动EP,每个EP的号是多少。

例子大致说完了,如果不知道我在说什么,也不知道我说的这些函数怎么找的同学,那还得去好好入门入门,这篇文档不适合你!如果能大致领会意思,我想你就体会到了我们的学习重点在哪里,再说一遍:在什么时间、什么地点调用什么函数!而不是研究协议栈到底怎么实现的。

相关文档
最新文档