微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > zigbee BUILD_ALL_DEVICES问题

zigbee BUILD_ALL_DEVICES问题

时间:10-02 整理:3721RD 点击:

你好TI的工程师们:

       最近由于项目需求要在程序中做协调器和路由之间的却换,是不是我预编译里面定义BUILD_ALL_DEVICES  然后就可以通过程序直接做 协调器和路由之间的却换了, 如果能请告诉下我修改那些参数

      我直接在程序中修改了 zgDeviceLogicalType和 devStartMode 就可以实现两者之间的相互却换 但是组成的网络不稳定  路由很容易就掉线了 

 我看你们的历程SampleApp中 实现方式如下

if ( keys & HAL_KEY_SW_1 )
{
if ( myAppState == APP_INIT )
{
// In the init state, keys are used to indicate the logical mode.
// Key 1 starts device as a coordinator

zb_ReadConfiguration( ZCD_NV_LOGICAL_TYPE, sizeof(uint8), &logicalType );
if ( logicalType != ZG_DEVICETYPE_ENDDEVICE )
{
logicalType = ZG_DEVICETYPE_COORDINATOR;
zb_WriteConfiguration(ZCD_NV_LOGICAL_TYPE, sizeof(uint8), &logicalType);
}

// Do more configuration if necessary and then restart device with auto-start bit set
// write endpoint to simple desc...dont pass it in start req..then reset


zb_ReadConfiguration( ZCD_NV_STARTUP_OPTION, sizeof(uint8), &startOptions );
startOptions = ZCD_STARTOPT_AUTO_START;
zb_WriteConfiguration( ZCD_NV_STARTUP_OPTION, sizeof(uint8), &startOptions );
zb_SystemReset();

}

。。。

}

是不是只用修改logicalType  和  startOptions 就能实现


我目前的项目中,也有这个,需要根据周围环境,如果有协调器就入网,如果没有协调器就自己建立一个新的网络。

目前的处理是这样的,测试通过。

    开机以路由器模式启动,最少扫描3此,最多扫描5次,如果发现ZigBee网络,则加入。如果没发现,则配置为协调器模式,并且重启,重启建网之后,再次将启动模式设置为路由器模式。这样的话,下次重启,就会重复上面的流程,达到想要的效果。

    设置为协调器模式:

extern uint8 StartType;
StartType = ZG_DEVICETYPE_COORDINATOR;
osal_nv_item_init(PP_TEST_SAVE,sizeof(uint8),NULL);
osal_nv_write(APP_TEST_SAVE,0,sizeof(uint8),&StartType);

  启动建立一个新的网络:

uint8 startOptions = ZCD_STARTOPT_CLEAR_STATE | ZCD_STARTOPT_CLEAR_CONFIG;
osal_nv_item_init(ZCD_NV_STARTUP_OPTION,sizeof(uint8),NULL);
osal_nv_write(ZCD_NV_STARTUP_OPTION,0,sizeof(uint8),&startOptions);

复位设备

// Reset the device with new configuration
extern void zb_SystemReset ( void );
//zb_SystemReset();
SystemReset();

希望能够帮到你。

我修改后是能通信上的 但是 我的网络 不稳定  节点像网关发送数据的时候 发送 100K左右有网络就不行了奔溃了 在也通信不上了 只能自己复位后才能通信

在模式切换前要把所有保存在NV里面的数据全部清除掉。

你说的100k是指连续发送吗?

删除所有的NV,是initNV();吗?

我之前只是在初始化时修改

uint8 t = 0xff;

osal_nv_read(ZCD_NV_E45E_STATE_LABEL, 0, sizeof(unsigned char), &t);
switch(t & 0x0c)
{
case 0x04:
{
zgDeviceLogicalType &= 0x00;
zgDeviceLogicalType |= ZG_DEVICETYPE_COORDINATOR;
EnDMode = ZG_DEVICETYPE_COORDINATOR;
break;
}
case 0x08:
{
zgDeviceLogicalType &= 0x00;
zgDeviceLogicalType |= ZG_DEVICETYPE_ROUTER;
EnDMode = ZG_DEVICETYPE_ROUTER;
break;
}
default:
{
zgDeviceLogicalType &= 0x00;
zgDeviceLogicalType |= ZG_DEVICETYPE_ROUTER;
EnDMode = ZG_DEVICETYPE_ROUTER;
}break;
}

osal_nv_item_init(ZCD_NV_LOGICAL_TYPE,sizeof(zgDeviceLogicalType), &zgDeviceLogicalType);
osal_nv_write(ZCD_NV_LOGICAL_TYPE, 0, sizeof(zgDeviceLogicalType), &zgDeviceLogicalType);

当时测试的时候可以的,现在却又不行了,不知道是怎么回事,求大神指点!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top