ZigBee_CC2530_05H_终端修改PANID
2017-05-26 15:13
381 查看
1.对工程设置NV_RESTORE = TRUE
2.使用如下代码:
即可实现ZigBee终端切换PANID来连接不同PANID的协调器。
貌似下面这样也可以实现同样的功能:
3.对于NV_RESTORE的坏处
加入这个宏定义好处肯定是有的,但是问题也来了,如果终端想加入别的协调器网络,既是PANID和频道都一样,
不管重启多少次都不会加入新的协调器中,那该怎么办呢?
其实TI考虑到这个问题了,下面是官方的说明
application wants to delete the stored NV information It just needs to set the ZCD_NV_STARTUP_OPTION as explained below and do a reset.
"If the application would like to force a "new" join, the application should set the ZCD_STARTOPT_DEFAULT_NETWORK_STATE bit in the ZCD_NV_STARTUP_OPTION NV item before calling this function. "New" join means to not restore the network state of the device. Use
zgWriteStartupOptions() to set these options 。
zgWriteStartupOptions(ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_NETWORK_STATE);
zGlobals.c中有这两个函数,第二个就是上面所用的函数
NV_INIT保存在nv的内容主要是网络或者节点的配置参数,在节点运行中这些参数很少变化或者几乎不会有变化。NV_INIT选项保存的所有参数可以在结构体zgItemTable中查看到。
NV_RESTORE选项保存的内容主要是节点运行过程中的状态量,借助这个特性,节点在掉电或者复位之后不需要无线电通讯就可以恢复到之前的网络连接状态。NV_RESTORE保存的内容主要有网络层数据库NIB、设备关联表、绑定表、路由表等。
4.关于ZigBee组网的一些函数:
这三个函数貌似在2.5的协议栈中已经被封装了,找不到了。
这三个函数可以去初始、写、读ZigBee中NV中的数据,NV中数据断电不擦除
2.使用如下代码:
pan_id = u16NewPanid;//你想要的ID _NIB.nwkPanId = u16NewPanid; //_NIB.nwkLogicalChannel = ; NLME_UpdateNV(0x01); //HAL_SYSTEM_RESET(); SystemReset();
即可实现ZigBee终端切换PANID来连接不同PANID的协调器。
貌似下面这样也可以实现同样的功能:
/* * Restore network memory items from NV. */ extern byte NLME_RestoreFromNV( void ); /* * Write network items to NV. * enables - bit mask of items to save: * NWK_NV_NIB_ENABLE * NWK_NV_DEVICELIST_ENABLE * NWK_NV_BINDING_ENABLE * NWK_NV_ADDRMGR_ENABLE */ void NLME_UpdateNV( byte enables ); /*以上来自NWK的NLMEDE.h头文件,但具体实现的代码我没找到*/ osal_nv_item_init(ZCD_NV_PANID , sizeof(uint16) , NULL); u8BackCode = osal_nv_write( ZCD_NV_PANID , 0 , sizeof(uint16) , &pan_id); //写Flash中和PANID存储有关的部分 if(u8BackCode == ZSUCCESS) { NLME_UpdateNV(0x01); //指示将网络的相关信息写入Flash中 HAL_SYSTEM_RESET(); //重启系统
NLME_RestoreFromNV();//重启后才会启用新的PAN_ID,不然只是修改了NV里面的数据。}
3.对于NV_RESTORE的坏处
加入这个宏定义好处肯定是有的,但是问题也来了,如果终端想加入别的协调器网络,既是PANID和频道都一样,
不管重启多少次都不会加入新的协调器中,那该怎么办呢?
其实TI考虑到这个问题了,下面是官方的说明
application wants to delete the stored NV information It just needs to set the ZCD_NV_STARTUP_OPTION as explained below and do a reset.
"If the application would like to force a "new" join, the application should set the ZCD_STARTOPT_DEFAULT_NETWORK_STATE bit in the ZCD_NV_STARTUP_OPTION NV item before calling this function. "New" join means to not restore the network state of the device. Use
zgWriteStartupOptions() to set these options 。
zgWriteStartupOptions(ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_NETWORK_STATE);
zGlobals.c中有这两个函数,第二个就是上面所用的函数
uint8 zgReadStartupOptions( void ) //启动时读取ZCD_NV_STARTUP_OPTION的值 uint8 zgWriteStartupOptions( uint8 action, uint8 bitOptions ) //修改ZCD_NV_STARTUP_OPTION的值
NV_INIT保存在nv的内容主要是网络或者节点的配置参数,在节点运行中这些参数很少变化或者几乎不会有变化。NV_INIT选项保存的所有参数可以在结构体zgItemTable中查看到。
NV_RESTORE选项保存的内容主要是节点运行过程中的状态量,借助这个特性,节点在掉电或者复位之后不需要无线电通讯就可以恢复到之前的网络连接状态。NV_RESTORE保存的内容主要有网络层数据库NIB、设备关联表、绑定表、路由表等。
4.关于ZigBee组网的一些函数:
zb_ReadConfiguration() zb_WriteConfiguration() zb_GetDeviceInfo()
这三个函数貌似在2.5的协议栈中已经被封装了,找不到了。
osal_nv_item_init() osal_nv_write() osal_nv_read()
这三个函数可以去初始、写、读ZigBee中NV中的数据,NV中数据断电不擦除
相关文章推荐
- ZigBee_CC2530_05H_终端修改PANID
- zigbee cc2530功率修改
- zigbee网关 cc2530终端裸机串行驱动12864(字库ST7920)显示图片
- ZigBee中PANID的修改
- zigbee网关 CC2530网关开发板之终端开发板可用的IO
- zigbee网关 CC2530 zstack用手机显示终端传来的lm75a温度传感器的值
- ZigBee中PANID的修改
- 修改Zigbee的Channel、PANID、发射功率、灵敏度及其它参数
- 基于CC2530的zigbee信道、PANID扫描设备
- zigbee zstack 通过串口修改panid channel
- ZigBee_CC2530_0CH_终端动态切换信道
- ZigBee_CC2530_0CH_终端动态切换信道
- zigbee终端发射功率修改
- zigbee网关 cc2530终端裸机串行驱动12864(字库ST7920)
- zigbee网关 cc2530终端裸机驱动超声波测距模块HC-SR04
- ZigBee动态修改PanID
- ZigBee TI ZStack CC2530 5.2 实例(二)终端设备低功耗与电池寿命00-总
- ZigBee TI ZStack CC2530 3.6 创建基于ZStack的新工程
- zigbee网关 CC2530 zstack用手机控制1602显示
- Liunx 终端 bash 提示符 修改 DIY