ZigBee_CC2530_0BH_动态切换PANID

本文介绍了一个用于更改 ZigBee 模块 PAN ID 的函数 voidChange_PanId 并提供了重启模块确保连接成功的实现方法。通过设置本板 MAC 地址为 64 位扩展 PAN ID,解决了部分情况下重启后无法连接到协调器的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

void Change_PanId( uint16 new_panid )
{
  uint16 pan_id = new_panid;
  uint8 extenPanId[8];
  //获取本板MAC地址
 osal_memcpy(extenPanId , NLME_GetExtAddr(),(8*sizeof(uint8)));  
  
  _NIB.nwkPanId = pan_id;
  //将本版MAC地址作为64位扩展PANID,以防重启后extendedPANID影响连接至Coordinater
 osal_cpyExtAddr(_NIB.extendedPANID , extenPanId );
  //将64位_NIB.nwkCoordExtAddress置零 
  osal_memset( _NIB.nwkCoordExtAddress, 0, Z_EXTADDR_LEN );
  NLME_UpdateNV(0x01);
  zgConfigPANID = pan_id;
  osal_cpyExtAddr( zgExtendedPANID,extenPanId );
  osal_nv_write(ZCD_NV_PANID, 0, osal_nv_item_len( ZCD_NV_PANID ), &zgConfigPANID);
  osal_nv_write(ZCD_NV_EXTENDED_PAN_ID, 0 , Z_EXTADDR_LEN, zgExtendedPANID);
  
  //RESET_TIME事件为SystemReset()
  osal_start_timerEx( GenericApp_TaskID , RESET_TIME , 3000);
  //zgWriteStartupOptions(ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_NETWORK_STATE);
}

该函数需要预编译NV_RESTORE(即在Project->options->C/C++ Compiler->Proprocessor中的Defined symbols中添加代码NV_RESTORE=TRUE)

对于某些重启设置成功,但某些时候不能连接上Coordinater,在init函数中开启定时器,若n s没有变成连接上网络,调用一下函数再重启一次即可。


void Reset_PanId( void )
{
  uint16 pan_id ;
  uint8 extenPanId[8];
  osal_memcpy(extenPanId , NLME_GetExtAddr(),(8*sizeof(uint8)));
  osal_memcpy(&pan_id, &_NIB.nwkPanId, sizeof(uint16));  
  
  _NIB.nwkPanId = pan_id;
  osal_cpyExtAddr(_NIB.extendedPANID , extenPanId );
  osal_memset( _NIB.nwkCoordExtAddress, 0, Z_EXTADDR_LEN );
  NLME_UpdateNV(0x01);
  zgConfigPANID = pan_id;
  osal_cpyExtAddr( zgExtendedPANID,exterPanId );
  osal_nv_write(ZCD_NV_PANID, 0, osal_nv_item_len( ZCD_NV_PANID ), &zgConfigPANID);
  osal_nv_write(ZCD_NV_EXTENDED_PAN_ID, 0 , Z_EXTADDR_LEN, zgExtendedPANID);
  osal_start_timerEx( GenericApp_TaskID , RESET_TIME , 3000);
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值