zigbee z-stack 协调器断电后,重新上电无法恢复

article/2025/8/24 9:01:53

1、是否宏定义了NV_RESTORE=1;NV_INIT=1;(协调器、路由器、终端都要定义)定义位置如下在这里插入图片描述
2、下载模式选Erase flash,选择位置:(20201117修正:实际调试发现如果不许选择erase flash 协调器断电重连,连接成功率更高,why?)
在这里插入图片描述
3、ZDOInitDevice初始化时,不旁路NV;源代码有按键选择,直接改为0:
if ( 0 )//HalKeyRead() == SW_BYPASS_NV );位置:ZDApp.c 623行
在这里插入图片描述
搞了两天这问题;搞得脑壳痛;记录。

用的协议栈版本:
Revised: $Date: 2012-02-16 16:04:32 -0800 (Thu, 16 Feb 2012) $
Revision: $Revision: 29348 $

……………………记录于20210420……………………………………
由于之前在Z-stack 2.5.1a上进行开发遇到协调器掉电后无法恢复网络(panid+1),通过之前以上方法,实现了协调器掉电后可恢复网络。
但后来将协议栈移植到Z-stack mesh 1.0.0,用了以上同样的方法,发现,协调器组网成功后,协调器掉电(路由器不掉)再上电,协调器始终无法组网;
后来比较 z-stack 2.5.1.a:预处理宏定义方面发现了区别;
在2.5.1.a上宏定义如下:
ZIGBEEPRO
ZTOOL_P1
NV_RESTORE=1
NV_INIT=1
xMT_TASK
xMT_SYS_FUNC
xMT_ZDO_FUNC
xLCD_SUPPORTED=DEBUG
而在mesh1.0.0上,如下
ZTOOL_P1
NV_RESTORE=1
NV_INIT=1
后来我将前者宏定义复制到mesh1.0.0;协调器又掉电又可以如入网了;真实奇了个怪,前者只是多了个ZIGBEEPRO,而且我将ZIGBEEPRO注释掉(改为xZIGBEEPRO),重新编译下载协调器也是可以重新入网;两者也是一样的状态;

不知为何,但就是这样。先记录在这。
在这里插入图片描述


--------记录于20210526---------Z-stack mesh 1.0.0协议栈下协调器掉电重启问题又解决了
我滴个乖乖,断断续续搞这个zigbee硬是头大;
之前Z-stack mesh 1.0.0版本移植后,协调器是可以掉电重启的,但后边不知改了啥,关键时刻,掉电又无法重启,或重启不太稳定。有时候 PANID自动+1,有时候又正常,除了按照20210420方法,后边又发现,我在 hal_board_cfg.h文件下将 HAL_KEY 宏定义为了FALSE,将其改为TRUE后,其它方法按照之前的调整,协调器掉电问题解决了;如下图。在这里插入图片描述
之前在简化代码时,以为没有用到协议栈提供的IO驱动,所以FALSE掉了KEY,没想到产生了一个意想不到的问题。

------------一起渔-------------
从Z-stack 协议栈在初始化看,整个过程到底发生了什么——>
1 系统上电进入 int main(void)函数,在ZMain下的ZMain.c文件中。-》
2 一系列操作后,进入 osal_init_system();操作系统初始化,在OSAL.c文件下。-》
3 随后进入 osalInitTasks();初始化系统任务,在OSAL_SampleApp.c文件下。-》
4 一系列任务初始化后,进入ZDApp_Init( taskID++ );在ZDApp.c文件下。-》
5 精彩开始了……分析ZDApp_Init(),中文为我添加的说明。
先总结:
1、在ZDAppCheckForHoldKey()中,不要让devState = DEV_HOLD了。特别时你用到了P0的6管脚;
2、在uint8 ZDOInitDevice( uint16 startDelay )中,不要让 if ( zdappHoldKeys == SW_BYPASS_NV )成真了
3、如果NLME_RestoreFromNV返回总是0,尝试下载时勾选:erase flash。

void ZDApp_Init( uint8 task_id )
{// Save the task IDZDAppTaskID = task_id;// Initialize the ZDO global device short address storageZDAppNwkAddr.addrMode = Addr16Bit;ZDAppNwkAddr.addr.shortAddr = INVALID_NODE_ADDR;(void)NLME_GetExtAddr();  // Load the saveExtAddr pointer.// Check for manual "Hold Auto Start"ZDAppCheckForHoldKey();
/*进入按键检查,halGetJoyKeyInput()函数将根据
adc = HalAdcRead (HAL_KEY_JOY_CHN, HAL_ADC_RESOLUTION_8);
也就是:#define HAL_KEY_JOY_CHN   HAL_ADC_CHANNEL_6,通道6,对应CC2530端口P0的第6通道的电平来返回按键信息。在应用中若P0第6通道电位没有明确,则返回值存在不确定性。
若运气不好,halGetJoyKeyInput()函数返回值被判定为HAL_KEY_UP(也就是ADC采样值2~38之间)
#define HAL_KEY_SW_1 	0x01  // Joystick up
#define HAL_KEY_UP     	0x01  // Joystick up
则ZDAppCheckForHoldKey()将返回devState = DEV_HOLD;
if ( zdappHoldKeys == SW_BYPASS_START ){devState = DEV_HOLD;}
*/// Initialize ZDO items and setup the device - type of device to create.ZDO_Init();// Register the endpoint description with the AF// This task doesn't have a Simple description, but we still need// to register the endpoint.afRegister( (endPointDesc_t *)&ZDApp_epDesc );#if defined( ZDO_USERDESC_RESPONSE )ZDApp_InitUserDesc();
#endif // ZDO_USERDESC_RESPONSE// Start the device?if ( devState != DEV_HOLD ){ZDOInitDevice( 10 );}else{ZDOInitDevice( ZDO_INIT_HOLD_NWK_START );// Blink LED to indicate HOLD_STARTHalLedBlink ( HAL_LED_4, 0, 50, 500 );}
/*系统根据devState状态,进入ZDOInitDevice(),
uint8 ZDOInitDevice( uint16 startDelay )
{uint8 networkStateNV = ZDO_INITDEV_NEW_NETWORK_STATE;uint16 extendedDelay = 0;if ( devState == DEV_HOLD ){// Initialize the RAM items table, in case an NV item has been updated.zgInitItems( FALSE );}ZDConfig_InitDescriptors();//devtag.071807.todo - fix this temporary solution_NIB.CapabilityFlags = ZDO_Config_Node_Descriptor.CapabilityFlags;#if defined ( NV_RESTORE )//如果NV_RESTORE 被定义为真,则进入恢复状态// Hold down the SW_BYPASS_NV key (defined in OnBoard.h)// while booting to skip past NV Restore.if (0)//此处之前时根据SW_BYPASS_NV key的值来判断是否进入,由于我们希望不旁路NV,所以将改条件屏蔽掉{zdappHoldKeys = 0;   // Only oncenetworkStateNV = ZDO_INITDEV_NEW_NETWORK_STATE;}else{// Determine if NV should be restorednetworkStateNV = ZDApp_ReadNetworkRestoreState();
…………注意,返回0表示下一步将读取NV,返回1下一步将重新建立网络
…………}if ( networkStateNV == ZDO_INITDEV_RESTORED_NETWORK_STATE ){networkStateNV = ZDApp_RestoreNetworkState();
*******# *重点来了:***参考:http://blog.sina.com.cn/s/blog_3fb7f7270101iccq.html
*****}else{// Wipe out the network state in NVNLME_InitNV();NLME_SetDefaultNV();// clear NWK key valuesZDSecMgrClearNVKeyValues();}
#endifif ( networkStateNV == ZDO_INITDEV_NEW_NETWORK_STATE ){ZDAppDetermineDeviceType();// Only delay if joining network - not restoring network stateextendedDelay = (uint16)((NWK_START_DELAY + startDelay)+ (osal_rand() & EXTENDED_JOINING_RANDOM_MASK));}// Initialize the security for type of deviceZDApp_SecInit( networkStateNV );if( ZDO_INIT_HOLD_NWK_START != startDelay ){devState = DEV_INIT;    // Remove the Hold state// Initialize leave control logicZDApp_LeaveCtrlInit();// Check leave control reset settingsZDApp_LeaveCtrlStartup( &devState, &startDelay );// Leave may make the hold state come backif ( devState == DEV_HOLD ){// Set the NV startup option to force a "new" join.zgWriteStartupOptions( ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_NETWORK_STATE );// Notify the applicationsosal_set_event( ZDAppTaskID, ZDO_STATE_CHANGE_EVT );return ( ZDO_INITDEV_LEAVE_NOT_STARTED );   // Don't join - (one time).}// Trigger the network startZDApp_NetworkInit( extendedDelay );}// set broadcast address mask to support broadcast filteringNLME_SetBroadcastFilter( ZDO_Config_Node_Descriptor.CapabilityFlags );return ( networkStateNV );
}	
*/// Initialize the ZDO callback function pointers zdoCBFunc[]ZDApp_InitZdoCBFunc();ZDApp_RegisterCBs();#if !defined ( ZDP_BIND_SKIP_VALIDATION )
#if defined ( REFLECTOR )ZDApp_InitPendingBind();
#endif
#endif
} /* ZDApp_Init() */

先更新到这里了,过几天协调器若又抽风恢复不上,解决后再来更新。


http://chatgpt.dhexx.cn/article/vwEpgHpK.shtml

相关文章

ZigBee中协调器断电重连问题?

问题描述:如果你想实现一个完好的网络,协调器断电重启后还是能加入原来的网络,加上NV_RESTORE编译选项就可以,如果发现加上它,还是实现不了要求,就请作如下操作? 方法:如果加了NV_R…

Zigbee协调器主动使终端节点退网

我使用ZDP_MgmtLeaveReq()这个函数来让已知短地址的终端退网,代码如下:我这样使用的结果是,可以将节点退网,节点上也需要做一些配置。我在函数里禁止节点重连,但是节点退网后会获取到新的短地址重新入网,这…

ZIGBEE 工程内区分终端与协调器

目前已知,工程中区分是终端还是协调器,与工程中Tolls文件夹中的.cfg文件有关: 从project->Edit Configuration进去可以删减左边栏Workspace下拉的项: 区别终端、路由器和协调器是通过Options.. -> C/C Compiler -> Extra…

Zigbee应用开发 协调器控制多个终端

协调器控制多个终端 功能要求: 协调器通过串口向终端发送控制命令 发送1 则终端1 的D8灯亮 发送 2 则 终端2 的灯亮 发送 0 则 俩个终端都灭 实现过程: 当网络状态发生改变时,通过串口打印一串消息用来分辨串口调试对应着那种类型的Zigbee 终端编程&…

zigbee现存网络下更换协调器

应用场景:现场协调器坏了,更换协调器,只改panid、加密信息、信道等是不行的 因为之前坏掉的协调器已经创建了一个网络,即使旧协调器坏了,网络还在,新协调器如果开机前没有之前的网络设备处于开启状态&…

ZIGBEE 协调器(刷写程序后)PAN_ID+1,与原来路由器无法组网

ZIGBEE 协调器(刷写程序后)PAN_ID1,与原来路由器无法组网 原因:或许是你下载时,勾选了Erase flash选项,如下图原因简析 原因:或许是你下载时,勾选了Erase flash选项,如下…

基于Zigbee的SHT10温湿度数据采集系统(已实现控制12个终端节点)——Zigbee协调器主要代码解析

之前实现了基于Zigbee的SHT10温湿度数据采集系统,这里来重新复盘一些主要的知识和代码。 写在前面: 1 功能介绍:使用Zigbee终端节点采集环境的温度和湿度数据,然后将数据无线发送的Zigbee协调器,最后在电脑端显示获得…

ZigBee协调器,ZigBee智能节点盒

新设备下 1.安装CP210xVCPInstaller_x64.exe串口驱动 2.连接USB转串口,RS485转232,蓝色数据线连ZigBee协调器485A,黄色数据线连ZigBee协调器485B,USB口连PC 3.查看COM口 4.打开ZigBeeTool.exe一应用程序 5.选择COM口,…

zigbee基本概念--网络设备类型和PANID

Zigbee 是一种基于802.15.4 物理层协议、支持自组网、多点中继,可实现网状拓扑的复杂的 组网协议,加上其低功耗的特点,使得网络间的设备必须各司其职,有效地协同工作。 Zigbee 网络的设备类型 在Zigbee 网络中,有三种不…

一文带你了解 ZigBee

1、物联网通信协议 常见短距离无线通信协议 物联网通信协议 接入方式-云端协议 支持 TCP/IP 的物联网设备,可以通过 WIFI、蜂窝网络以及以太网,使用 HTTP、MQTT、CoAP、LwM2M 以及 XMPP 等应用层协议协议接入云端。 接入方式-网关协议 网关协议是适用…

大数据产业链包括哪几个环节,具体包含哪些内容

大数据作为继云计算、物联网之后IT行业又一颠覆性的技术,备受关注,要想知道大数据创业方向,一定要知道,大数据产业链包括哪几个环节,具体的包含内容,接下来,为大家一一介绍: IT基础…

不得不说的六个大数据产业园

近年来,随着物联网、云计算的发展,大数据技术也成为了热门词汇。而对于大数据企业的发展,大数据产业园的作用可谓举足轻重。 大数据产业园指大数据产业的聚集区或大数据技术的产业化项目孵化区,简而言之,就是大数据企业…

2021中国大数据产业发展白皮书 附下载

“十三五”时期,我国大数据产业取得了突破性的发展。大数据产业规模持续稳步提升,产业价值不断释放;大数据相关政策陆续出台,产业发展环境日益优化;新型数据中心、5G等大数据相关基础设施部署进程加快;大数…

大数据产业发展状况及企业数据资产化运营核心

用数据说话已经成为所有人的共识,数据也成了堪比石油的战略资源。 “无论是国家、企业还是社会公众,都更直观的感受到了数据的价值。因此,近年来,各地纷纷成立大数据发展组织,企业纷纷推动数据资产化治理,大…

大数据产业发展的国际经验

中国发展大数据产业需要拓展国际视野,借鉴国际经验, 他山之石,可以攻玉。 2012 年被认为是大数据元年。在这一年,美国奥巴马政府推出了《大数据研究和发展计划》,启动了美国国家大数据战略;用户日志管理公司…

“十四五”大数据产业发展锚定3万亿目标

来源:人民数据本文约1100字,建议阅读5分钟 大数据产业迎来更广阔发展空间。 工业和信息化部近日发布的《“十四五”大数据产业发展规划》(以下简称《规划》)提出,到2025年,我国大数据产业测算规模突破3万亿…

高层次人才需求旺盛!2022年中国大数据产业发展趋势

点击上方 "大数据肌肉猿"关注, 星标一起成长 点击下方链接,进入高质量学习交流群 今日更新| 950个转型案例分享-大数据交流群 1、大数据获重视,产业发展再升级 2015年以来,在国家和各级政府的大力推动下,大数据产业加速…

2021年大数据产业城市发展,前20强出炉!

点击上方 "大数据肌肉猿"关注, 星标一起成长 点击下方链接,进入高质量学习交流群 今日更新| 950个转型案例分享-大数据交流群 来源 | 北京大数据研究院大数据分析技术创新中心 “十三五”期间,我国大数据产业迅猛发展,政策环境日益…

政策推动大数据产业高速发展 2018年市场规模将达180亿

近年来,全球大数据产业不断成熟,各领域大数据应用全面展开,为大数据发展带来强劲动力。数据显示,2016年全球大数据市场规模达到453亿美元,同比增长25.8%。大数据逐渐成为全球IT支出新的增长点。 相对于发达国家而言&am…

你的旧船票能否搭上这艘巨轮?——解读近5年大数据产业发展规划

文|水手 本文出自:知乎专栏《帆软数据应用研究院》——数据干货&资讯集中地! 文章导读 一、大数据产业现状和挑战 二、2020年发展目标 三、实现目标的关键举措 四、《规划》对企业的启示 五、《规划》对个人的启示 自2015年党的十八届五中全会提出“…