Z-STACK低功耗设置
- 格式:docx
- 大小:16.85 KB
- 文档页数:4
【⽆线通信篇Zstack协议栈】CC2530ZigbeeZstack协议栈组⽹项⽬及详细讲解篇物联⽹⽆线通信技术,ZigBee⽆线传感⽹络CC2530最⼤的特点就是⼀个拥有⽆线收发器(RF)的单⽚机,既能实现单⽚机功能,也能实现⽆线传输Zstack协议栈是ZigBee协议栈⾥的翘楚,是ZigBee组⽹的⾸选协议栈项⽬实现功能:l 总共有三个端点,⼀个协调器和两个终端节点l 终端节点1连接DHT11温湿度传感器,定时上传给协调器l 终端节点2连接LED,可以通过协调器按键控制,定时上报LED开关状态l 协调器连接12864 OLED 屏幕,实时显⽰温湿度和LED状态l 协调器可以通过按键控制终端2的LED开关,控制后将会显⽰控制结果扩展功能(当前未实现,可进⼀步开发实现):l 连接协调器串⼝,将终端节点采集的数据通过串⼝发送,PC写上位机实现数据展⽰l 连接WIFI或者4G模块,WIFI模块如ESP8266,实现数据局域⽹⽆线传输或者上传到OneNET、机智云、阿⾥云、⾃⼰开发云服务器等,实现WEB或⼿机APP显⽰和控制。
⼀、项⽬测试(可想⽽知,⼴州的天⽓有多热,39℃了都)实现功能汇总:l 总共有三个端点,⼀个协调器和两个终端节点l 终端节点1连接DHT11温湿度传感器,定时上传给协调器l 终端节点2连接LED,可以通过协调器按键控制,定时上报LED开关状态l 协调器连接12864 OLED 屏幕,实时显⽰温湿度和LED状态l 协调器可以通过按键控制终端2的LED开关,控制后将会显⽰控制结果(⼀) 环境汇总芯⽚:CC2530F256Zstack协议栈:ZStack-CC2530-2.5.1a编程环境:IAR(⼆) 引脚分配协调器:128*64 OLED 0.96⼨屏幕供电:3.3V通信协议:IIC引脚:SDA P0_6SCL P0_7按键:IO:P0_1下降沿触发中断终端1:DHT11:通信⽅式:单总线协议供电:3.3VIO:P0_6终端2:LEDIO:P1_0说明:⾼电平点亮,低电平熄灭⼆、基础认识(⼀) CC2530单⽚机CC2530最⼤的特点就是⼀个拥有⽆线收发器(RF)的单⽚机,既能实现单⽚机功能,也能实现⽆线传输。
ZigBee协议栈TI Z-Stack分析2007年4月,德州仪器推出业界领先的ZigBee协议栈(Z-Stack)。
Z-Stack 符合ZigBee 2006规范,支持多种平台,包括基于CC2420收发器以及TI MSP430超低功耗单片机的平台,CC2430的SOC平台C51RF-3-PK等。
Z-Stack包含了网状网络拓扑的几近于全功能的协议栈,在竞争激烈的ZigBee领域占有很重要地位。
ZigBee stack应用开发相关概念ZigBee术语一、属性属性Attribute是一个反映物理数量或状态的数据值,比如开关值(On/Off),温度值、百分比等。
二、群集群集Cluster是包含一个或多个属性(attribute)的群组。
简单的说,群集就是属性的集合。
每个群集都被分配一个唯一的群集ID 且每个群集最多有65536个属性。
三、设备描述设备描述Device Description是指一个大型目标应用的一部分,包括一个或多个群集,并且指定群集是输入还是输出。
四、端点端点EndPoint是协议栈应用层的入口,也可以理解应用对象(Application Object)存在的地方,它是为实现一个设备描述而定义的一组群集。
每个ZigBee 设备可以最多支持240这样的端点,这也意味着在每个设备上可以定义240个应用对象。
端点0被保留用于与ZDO接口而端点255被保留用于广播,端点241-254则被保留用于将来做扩展使用。
五、配置文件配置文件Profile可以理解为共同促成交互式应用的多个设备描述项的集合。
ZigBee联盟已经定义了部分标准的配置文件,比如远程控制开关配置文件和光传感器配置文件等。
任何遵循某一标准配置文件的节点都可以与实现相同配置文件的节点进行互操作。
用户也可以创建自己的配置文件然后递交ZigBee联盟测试、审核批准。
配置文件是对逻辑设备及其接口描述的集合,是面向某个应用类别的公约、准则。
转:ZigBeeZ-StackCC2530实现低功耗运⾏的配置简介设备⽀持低功耗运⾏是ZigBee⽹络的⼀⼤特点,该特性借助CC2530芯⽚能够很好地体现出来。
CC2530芯⽚有五种运⾏模式,分别为主动模式、空闲模式、PM1、PM2和PM3。
主动模式是⼀般运⾏模式;空闲模式除了CPU内核停⽌运⾏外,其他和主动模式⼀样;PM1、PM2、PM3是低功耗运⾏模式,CC2530通过关闭不必要的部分和调整系统时钟来达到低功耗的效果。
PM1:稳压器的数字部分开启,32 MHzXOSC和 16 MHz RCOSC都不运⾏。
32 kHz RCOSC或32 kHz XOSC运⾏。
复位、外部中断或睡眠定时器溢出时系统将转到主动模式。
PM2:稳压器的数字内核关闭。
32 MHzXOSC和 16 MHz RCOSC都不运⾏。
32kHz RCOSC或32 kHz XOSC运⾏。
复位、外部中断或睡眠定时器过期时系统将转到主动模式。
PM3:稳压器的数字内核关闭。
所有的振荡器都不运⾏。
复位或外部中断时系统将转到主动模式。
⼏种运⾏模式的对⽐如下表所⽰:PM2模式⼜叫LITE SLEEP模式,其功耗在毫安级别,多⽤于需要定时唤醒的场合,⽐如周期性地唤醒传感器来进⾏数据的采集。
PM3模式⼜叫做DEEP SLEEP模式,在⼏种运⾏模式中功耗最低,在微安级别,多⽤于远程遥控场合,⽐如使⽤CC2530做⼀个远程遥控器,在没有按键按下时,可使其进⼊PM3模式以减少电能消耗。
Z-STACK提供了两种低功耗运⾏模式,PM2和PM3。
PM2模式可被睡眠定时器,外部中断和复位唤醒,PM3模式可被外部中断和复位唤醒。
在Z-Stack的使⽤⽂档中得知为了使设备能够进⼊睡眠模式,必须满⾜以下的条件:1、通过添加预编译项POWER_SAVING来使能睡眠模式2、ZDO节点描述符指定“在空闲时发送功能是关闭的”,通过在f8wConfig.cfg⽂件中将RFD_RCVC_ALWAYS_ON设置为FALSE来实现。
第一章思考与练习1、举出3个书本中未提到的嵌入式系统的例子。
答:红绿灯控制,数字空调,机顶盒2、什么叫嵌入式系统嵌入式系统:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
3、什么叫嵌入式处理器?嵌入式处理器分为哪几类?嵌入式处理器是为完成特殊的应用而设计的特殊目的的处理器。
嵌入式微处理器(Embedded Microprocessor Unit, EMPU)嵌入式微控制器(Microcontroller Unit, MCU)嵌入式DSP 处理器(Embedded Digital Signal Processor, EDSP)嵌入式片上系统(System On Chip)4、什么是嵌入式操作系统?为何要使用嵌入式操作系统?是一段在嵌入式系统启动后首先执行的背景程序,首先,嵌入式实时操作系统提高了系统的可靠性。
其次,提高了开发效率,缩短了开发周期。
再次,嵌入式实时操作系统充分发挥了32 位CPU 的多任务潜力。
第二章1、嵌入式系统项目开发的生命周期分哪几个阶段?各自的具体任务是什么?项目的生命周期一般分为识别需求、提出解决方案、执行项目和结束项目4 个阶段。
识别需求阶段的主要任务是确认需求,分析投资收益比,研究项目的可行性,分析厂商所应具备的条件。
提出解决方案阶段由各厂商向客户提交标书、介绍解决方案。
执行项目阶段细化目标,制定工作计划,协调人力和其他资源;定期监控进展,分析项目偏差,采取必要措施以实现目标。
结束项目阶段主要包括移交工作成果,帮助客户实现商务目标;系统交接给维护人员;结清各种款项。
2、为何要进行风险分析?嵌入式项目主要有哪些方面的风险?在一个项目中,有许多的因素会影响到项目进行,因此在项目进行的初期,在客户和开发团队都还未投入大量资源之前,风险的评估可以用来预估项目进行可能会遭遇的难题。
需求风险;时间风险;资金风险;项目管理风险3、何谓系统规范?制定系统规范的目的是什么?规格制定阶段的目的在于将客户的需求,由模糊的描述,转换成有意义的量化数据。
zigbee协调器和终端对话实验遇到的问题与解决办法1、组网后,怎样获取新加入的Endpoint的地址?答:现在有一个最常见的场景,我有一个100个节点的网络同时发送数据给协调器,我很想知道那个地址对应那个节点。
其实楼上的就想知道那个,以前老板也经常问我这个问题。
即使知道了某个节点的IEEE地址还是不知道是某个节点,除非你事先知道那个节点的地址。
你不可能一个一个节点上电在轮询获得地址吧?如果那样的话,我还不如直接加下NV_RESTORE之后断电一个一个标。
终端在给协调器发送的数据包中就包含自己的地址信息就可以了,这样协调器即不用浪费自己的RAM空间来保存所有节点的地址信息,也不用花时间来查询了。
因为MAC地址是唯一的,所以可以用MAC地址。
还记得毛子在太空用铅笔的典故么?这里有个笨办法,在批量烧写CC2530的时候,就把它的IEEE地址读出来,然后贴在标签上。
A:请问zigbee怎么通过mac地址获得网络中挂在路由下的节点的短地址,用APSME_LookupNwkAddr得到短地址时,只能查找协调器儿子节点,对孙子节点不可访问,afStatus_t ZDP_NwkAddrReq(byte*IEEEAddress,byte ReqType,byte StartIndex,byte SecurityEnable)根据已知网络地址查询远程设备物理地址,作为一个广播信息发送给网络中的所有设备:这个函数也是知道IEEE地址,对短地址进行寻找,这个不存在上面所说的限制,但是这个短地址放在那里呢,我怎么获得这个短地址呢?B:请使用函数:afStatus_t ZDP_NwkAddrReq(uint8*IEEEAddress,byte ReqType,byte StartIndex,byte SecurityEnable)2、问题:请问调用这个函数获得的地址放在那里呢?答:会有callback函数上来的,对应的处理事件是#define NWK_addr_rsp(NWK_addr_req|ZDO_RESPONSE_BIT)void ZDApp_ProcessMsgCBs(zdoIncomingMsg_t*inMsg)的switch case下面做添加就可以,然后去处理获得的地址3、问题:ZigBee网络中协调器分配网络地址在哪?如何查看设备的网络地址?答:协调器的短地址是0x0000,当设备加入成功后,会产生一个ZDO_STATE_CHANGE_EVT事件,这个事件就是设备加入网络成功后,并在网络中的身份确定后产生的一个事件,我们可以在这里处理,一些初始化,比如可以发送终端的短地址,IEEE地址等,这里协调器接收到以后,可以提取出终端的短地址,其实在终端给协调器发送的每个数据包中,都含有其自身的短地址,如结构体当中的afAddrType_t srcAddr;协调器在接收到短地址后,就可以知道自己下面管辖的终端节点,或者路由节点有哪些了?协调器提取到的短地址可以存放到一个非易失性的存储器中。
z-stack协议栈原理及应用Z-Stack协议栈是一种用于嵌入式设备的无线通信协议栈,它提供了一套标准的网络协议和应用接口,用于构建各种无线网络应用。
Z-Stack协议栈基于IEEE 802.15.4标准,主要用于低功耗、短距离的无线传感器网络和物联网应用。
Z-Stack协议栈的核心原理是将整个通信过程分解为多个层次,每个层次负责不同的功能,通过层与层之间的接口进行通信和数据传输。
这种分层的设计使得协议栈具有良好的可扩展性和灵活性。
Z-Stack协议栈包括物理层、MAC层、网络层和应用层。
物理层是Z-Stack协议栈的最底层,主要负责无线信号的传输和接收。
它定义了无线传输的频率、功率、调制方式等参数。
物理层的实现通常依赖于硬件,如无线模块或芯片。
MAC层负责控制数据在无线信道中的传输。
它处理数据的帧格式、碰撞检测、ACK确认等功能。
MAC层还负责管理网络中的设备,包括设备的加入、离开等操作。
MAC层的实现通常需要考虑网络的拓扑结构和能耗等因素。
网络层负责路由和寻址等功能。
它将数据包从源节点传输到目标节点,并维护网络拓扑信息。
网络层使用一种特殊的路由协议来确定数据包的传输路径,以保证数据能够正确到达目标节点。
常见的路由协议有AODV、RPL等。
应用层是Z-Stack协议栈的最高层,负责处理应用相关的功能。
它定义了应用的数据格式、应用接口等。
应用层可以根据具体的应用需求,实现各种不同的应用,如传感器数据采集、远程控制等。
Z-Stack协议栈的应用非常广泛。
它可以应用于家庭自动化、智能电网、工业自动化等领域。
例如,在家庭自动化中,Z-Stack协议栈可以用于构建智能家居系统,实现灯光控制、温度调节、安防监控等功能。
在智能电网中,Z-Stack协议栈可以用于实现电力设备的远程监控和控制。
在工业自动化中,Z-Stack协议栈可以用于构建无线传感器网络,实现设备状态的实时监测和控制。
Z-Stack协议栈是一种重要的无线通信协议栈,它通过分层设计和标准接口,提供了一种可靠、灵活的通信解决方案。
E18系列ZigBee模块快速操作方法1.E18系列ZigBee模块简介E18系列模块是成都电子科技有限公司设计生产的一款2.4G ZigBee无线模块。
采用美国德州仪器(TI)公司原装进口的CC2530F256射频芯片。
E18模块根据型号不同,可分为4.5dBm和20dBm最大功率输出。
内置组网固件,其固件采用TI经典ZigBee协议栈Z-stack2.5.1a,支持串口数据传输。
该组网固件支持低功耗,角色切换,广播、组播、点播等多种功能。
并支持串口指令操作。
可轻松对模块进行配置和使用。
2.快速入门ZigBee自组网模块具有简单易用的特点。
通信模式分为模式1(透传模式),模式2(半透传模式),模式3(协议模式)。
在模式1、2下还可指定输出为短地址,MAC地址,RSSI等信息。
为了让用户能快速熟悉模块,本此实验将引导用户经过简单的配置实现各种模式下的配置和通信,工作模式为模式3(协议模式),波特率为默认波特率115200。
用户可将P1.6引脚拉低,进行HEX指令设置,为方便上位机观察,本次实验用HEX指令格式,AT指令用户不在本次试验中测试。
(AT指令模式下不能用于上位机配置。
)另外,用户可以不使用底板而使用外部微控制器(MCU)直接连模块UART进行串口指令通信,实现二次开发。
网络组建好读取参数:⑤.选择另一个模块,按照相同步骤设置为路由器或者终端(模块出厂默认为终端,可不进行设置,本实验为终端)。
2【通信测试】:①.点击上位机协调器和终端的“定点组网”。
可看到相应通信信息。
协调器:终端:网络地址:协调器到终端:发送端网络短地址终端到协调器发送端网络短地址MAC地址:协调器到终端:发送端网络短地址数据功能发送需要在多节点网络情况下体现自己的特色,用户可自行测试!广播:(广播只进行模式一,全网广播模式实验,其他模式自行测试)组播:发送端MAC 短地址协调器到终端:3.使用注意事项。
Zigbee低功耗设置
1.在预编译选项中使能POWER_SAVING
2.设置 :RFD_RCVC_ALWAYS_ON = FALSE; //(in f8wConfig.cfg(默认情况下就是FALSE))并执行:
else if ( ZSTACK_END_DEVICE_BUILD ) {
ZDO_Config_Node_Descriptor.CapabilityFlags = (CAPINFO_DEVICETYPE_RFD #if ( RFD_RC VC_ALWAYS_ON == TRUE) | CAPINFO_RCVR_ON_IDLE #endif ); }
实现功能:
End-Device 默认的只有CAPINFO_DEVICETYPE_RFD, 这样就设置了电池供电模式,并且在节点空闲的时候关闭射频接收器。
3.在进入sleep mode之前,2项重要的检查需要执行:
First: pwrmgr_device必须为 PWRMGR_BATTERY!
说明:{系统初始化时,调用osal_pwrmgr_init(),pwrmgr_device初始化为
PWRMGR_ALWAYS_ON}
该项的正确设置是在节点加入网络之后。
在ZDApp.c文件中,若POWER_SAVING选项已使能,则调用会 osal_pwrmgr_device(PWRMGR_BATTERY),设置为允许节电;
当器件为路由或协调器时,调用osal_pwrmgr_device( PWRMGR_ALWAYS_ON ),不允许节电(睡眠)!
Second:pwrmgr_task_state 必须为no task,这项机制有利于节点在执行重要操作时,禁止sleep mode。
说明:{系统初始化时,调用osal_pwrmgr_init(),pwrmgr_attribute.pwrmgr_task_state初始化为0,no task,允许节电}
协议栈并没有调用osal_pwrmgr_task_state()函数,即各项任务一直允许节
电。
原文如下:
If the task always wants to converse power, it doesn't need to call this function at all.(见OSAL_PwrMgr.h文件)
4.两种睡眠模式的选择
当步骤4中的两项都满足后,定时睡眠的时间决定于系统定时器(OSAL timers)的下一个终了时间,如果该时间大于0而且小于最小睡眠时间(MIN_SLEEP_TIME),则会选择定时器睡眠模式,在定时器睡眠模式下,系统定时器产生事件的唤醒中断!
最小睡眠时间定义在hal_sleep.c文件中,用来防止过短的睡眠抖动。
当协议栈没有任务和定时事件,终了时间为0( next expiration is zero),深睡眠将会被选择,这样可获得最大的节电效果。
5. OSAL_SET_CPU_INTO_SLEEP是一个用于睡眠的宏,在开始进入睡眠时被halSleep()函
数调用,该函数周期性的关断MAC、外设,进入睡眠模式,睡眠后唤醒MCU,开启外设,最终重启MAC。
由于协议栈操作系统的轮询与MAC时间(事件)表相独立,因此协议栈并不知道MAC 的运行状态。
MAC_PwrOffReq()函数的调用会请求关闭MAC。
必须注意的一点是,当空闲时若射频接收器处于使能状态,MAC将不会被关闭,这样将阻止了节点进入睡眠。
对于CC2530,深睡眠只会被外部中断或MCU复位唤醒。
这种模式适用于远程控制类器件(用外部中断的方式唤醒,比如按键);
定时睡眠会被任何中断事件终结,包括外部中断事件,定时器事件。
假如MCU被外部中断唤醒,而时间并未到唤醒时间值(timer not expired),协议栈时间系统将会自动调节( Z-
Stack timing system adjusts for the elapsed fraction of the scheduled wake-up time delay) 6. 协议栈的案例程序中默认设定的是禁止节电并且使能自动巡检已获取信息。
共有3个不同的巡检选项,每一个都由时间延时参数控制。
当POWER_SAVING被使能,任何一个巡检选项,都会对睡眠模式产生影响。
特别地,巡检会阻止进入进入深睡眠模式。
(在工程中,我们将zgPollRate、zgQueuedPollRate、zgResponsePollRate的值设为0 )
3个的巡检选项:
A. Data Request Polling (数据请求巡检)–周期性的向父节点发送数据请求信息。
间隔的时间值可以通过改变zgPollRate来设定和存储,或者
调用 NLME_SetPollRate()函数,该函数的调用会立马开始巡检,即便是之前被禁止了!
( Calling with a time interval of 1 will poll immediately, one time. )
B. Queued Data Polling (数据接受巡检)–在接到到有数据将要传来的信号后,周期性的向父
节点发送数据请求信息。
间隔的时间值可以通过调用 NLME_SetQueuedPollRate()函数改变,或者改变zgQueuedPollRate来设定和存储。
这种特点允许快速地接受(卸载)数据,而不用考虑Request Poll rate.
C. Response Data Polling(数据响应巡检)–接受到数据确认后,周期性的向父节点请求响应信息。
间隔的时间值可以通过调用 NLME_SetResponseRate()函数改变,或者改变zgResponsePollRate.来设定和存储。
这种特点允许快速地接受(卸载)响应信息
(such as APS Acknowledgements,),而不用考虑zgResponsePollRate.
polling rates的默认设定和初始化是在nwk_globals.c 文件中。
如果在polling rates处于默认的情况下使能了POWER_SAVING,定时器睡眠模式的节电将会被限制。
为了实现
DEEP sleeping 节点,最小化功耗,必须禁止巡检,将zgPollRate设置为0。
设置3个巡检值,
可不同的巡检策略。
例如,对于从来不需要接受数据的节点来说,一旦加入网络后即可将设置3的巡检值为0。
如果
使用APS acknowledge,在每一次信息传递之后 ACK接受到之前,巡检必须使能。
在一些系统中,根据相应的应用,灵活的改变polling rate是很有好处的。
7.在OnBoard.c文件InitBoard()函数中,将
OnboardKeyIntEnable to HAL_KEY_INTERRUPT_ENABLE(禁止key polling)
( The key polling is enabled at 100 millisecond rate by default.)
8.定时器睡眠模式的时间设置
CC2530的定时睡眠模式配备了24位硬件定时器(睡眠定时器),其驱动源为32.768KHz
的晶振。
电源管理使用睡眠定时器来检测已流逝的时间值并在到达终了时间后唤醒MCU。
0xFFFF7F / 32768 Hz = 511.996 seconds
睡眠定时器有24位的计数器和24位的比较器。
CC2530的睡眠定时器能够在睡眠时间累计达到512秒后追踪网络时间。
(CC2530 sleep timer is capable of keeping track network time during sleep for up to 512 se conds )因此最长的睡眠时间为510s.操作系统应用层使用16位的定时器结构。
因此,操作系统应用层(OSAL)在以1ms为最小定时单位的基础上,其最长定时时间为65秒。
睡眠定时器的比较值可以使用下方的方程进行设置,其中timeout指的是下一个OSAL/MAC 定时器的终了时间,该时间以320us为单位,ticks是指当前的睡眠定时器的计数值。
ticks += (timeout * 671) / 64 ;
32 kHz ticks1 对于 320 us ticks2 的比率为 32768/3125 = 10.48576
(ticks2=10.48576*ticks1)。
这个值非常接近 671/64 = 10.484375. 当睡眠定时器的计数值到达设定的比较值时,产生中断并唤醒MCU. 在睡眠中醒来后,以ms为单位流逝的时间值为:
ticks*1000/32768 or: ticks * 125 / 4096。
9.处理未使用的IO口,避免频繁进入中断和过多的功耗。