您好!
在运行时是否有任何方法可以更改信道、因此下次恢复网络时、它会有新的信道?
我尝试使用 SYS_OSAL_NV_WRITE (ID=0x0084)写入 NVRAM、之后进行软复位、但似乎没有任何变化。
BR、
Aiman
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
Ryan Brown1您是否有任何理由不能像我们以前在 CC253x Z-Stack 中所做的那样、对当前 CC26xx Z-Stack 的 NV _NIB 进行操作来更改通道?
Ryan Brown1 是的、我知道修改 NIB 以更改信道会产生什么后果、我只将其用于测试睡眠终端设备、不管怎样、这将扫描信道。 我想知道 为什么 CC253x Z-Stack 使用的是 bot 而不是 CC26xx Z-Stack。 如果您知道确切的原因、请告诉我。
ZDO_Mgmt_NWK_UPDATE_REQ 似乎能够修改 NIB 以更改通道、但 可能还需要一些其他 API (NLME_SetUpdateID、ZMacSetReq、ZDUAP_NWKStateUpdateCB)来实现所需的功能。
//zd_nwk_mgr.c
if ( events & ZDNWKMGR_CHANNEL_CHANGE_EVT )
{
// Switch channel
_NIB.nwkLogicalChannel = ZDNwkMgr_NewChannel;
ZMacSetReq( ZMacChannel, &ZDNwkMgr_NewChannel );
// Our Channel has been changed -- notify to save info into NV
ZDApp_NwkStateUpdateCB();
// Reset the total transmit count and the transmit failure counters
_NIB.nwkTotalTransmissions = 0;
nwkTransmissionFailures( TRUE );
return ( events ^ ZDNWKMGR_CHANNEL_CHANGE_EVT );
}
//...
else if ( Req.scanDuration == 0xFE )
{
// Request is to change Channel. The command provide a new active
// channel as a single channel in the channelMask.
// Only process when the nwkUpdateId is more recent (accounting for uint8 wraparound)
if ( Req.nwkUpdateId > _NIB.nwkUpdateId || ( Req.nwkUpdateId == 0 && _NIB.nwkUpdateId == 0xFF ) )
{
uint8_t i;
// Set update ID in the Beacon
NLME_SetUpdateID(Req.nwkUpdateId);
// Find out the new active channel
for ( i = 0; i < ED_SCAN_MAXCHANNELS; i++ )
{
if ( ( (uint32_t)1 << i ) & Req.channelMask )
{
break;
}
}
if ( _NIB.nwkLogicalChannel != i )
{
ZDNwkMgr_NewChannel = i;
// Upon receipt of a Mgmt_NWK_Update_req with a change of channels,
// the local network manager shall set a timer equal to the
// nwkNetworkBroadcastDeliveryTime and shall switch channels upon
// expiration of this timer. Each node shall also increment the
// nwkUpdateId parameter and also reset the total transmit count
// and the transmit failure counters.
OsalPortTimers_startTimer( ZDNwkMgr_TaskID, ZDNWKMGR_CHANNEL_CHANGE_EVT,
ZDNWKMGR_BCAST_DELIVERY_TIME );
}
}
}
此致、
Ryan
Ryan Brown1我的问题是、我们为什么无法写入_NIB 的 NV ID 来修改 CC26xx Z-stack 中的信道信息、该 Z-stack 以前在 CC2530 Z-stack 中工作?
Ryan Brown1感谢您对此进行调查、并期待收到您的答复。
抱歉、此消息似乎未发布...
我 注意 到、在向 ZCD_NV_NIB 写入一个字节后、SYS_OSAL_NV_Read -> MT_SysOsalNVRead -> osal_NV_Read -> osal_NV_READ_Ex -> readItem -> NVOCMP_readItem-> NVOCMP_readItems-> NVOCMP_INSTRATE-> NVOCMP_INSTRUPT INTF 返回损坏的数据。 似乎 MT_SYS_OSAL_NV_WRITE -> MT_SysOsalNVWrite -> osal_NV_WRITE 似乎不再考虑偏移、因此可能会写入不正确的字节、从而导致损坏错误、返回空白 NV 读取。
此致、
Ryan
Ryan Brown1Will您是否会在将来发出 TI 内部错误通知以解决此问题?
谢谢 、Ryan Brown1