当节点跟父设备断开以后,会发送给ZDO层ZDO_NWK_JOIN_REQ命令,我的配置如下:
retryCnt = 0;
devStartMode = MODE_RESUME;
_tmpRejoinState = true;
osal_cpyExtAddr( ZDO_UseExtendedPANID, _NIB.extendedPANID );
zgDefaultStartingScanDuration = BEACON_ORDER_15_MSEC; //BEACON_ORDER_60_MSEC;
ZDApp_NetworkInit( NWK_START_DELAY );
节点变成MODE_RESUME状态,然后调用ZDO_StartDevice函数里面的
NLME_OrphanJoinRequest( runtimeChannel, zgDefaultStartingScanDuration ); 发送orphan notification,
其中runtimeChannel为26信道,
测试后zgDefaultStartingScanDuration参数好像没生效,测量其瞬间的发送电流大道27mA;
由于我们的产品是单火开关设备,无法提供这么大的电流,所以将 发送ZDO层ZDO_NWK_JOIN_REQ消息做了如下修改:
retryCnt = 0;
devStartMode = MODE_REJOIN;
_tmpRejoinState = true;
osal_cpyExtAddr( ZDO_UseExtendedPANID, _NIB.extendedPANID );
zgDefaultStartingScanDuration = BEACON_ORDER_15_MSEC; //BEACON_ORDER_60_MSEC;
ZDApp_NetworkInit( NWK_START_DELAY );
测试后发现,当设备离网后会进入ZDO_StartDevice函数里面调用NLME_NetworkDiscoveryRequest,一直返回失败。
触关发开,可以看见设备发送的ON/OFF数据包。
请问如果终端设备离线不想让其发送NLME_OrphanJoinRequest,需要怎么修改。
Aries Lord:
降低NLME_OrphanJoinRequest的发送次数,一分钟发一次
user4041165:
回复 Aries Lord:
感谢 Aries Lord回复
现在经过调整单火开关在接入3w的负载的情况下,能够提供持续2mA的电量,现在已经能够在开灯的情况下进行加网和控制,但是当单火开关发现与协调器失去同步信息,就会发送孤立节点申明,调用NLME_OrphanJoinRequest,不管怎么设置该函数的信道(runtimeChannel)和扫描间隔时间(zgDefaultStartingScanDuration),都无法降低发送时的电流,发射电流达到27ma,持续小于1s,请问是否还有其他的地方的配置影响到了NLME_OrphanJoinRequest的扫描时间。
同样的,在单火开关Rejoin的时候调用NLME_ReJoinRequest函数,发送电流也同样达到27ma,
user4381970:
回复 user4041165:
我也在弄单火开关,我也遇到这个问题,我测试orphan甚至比join更费电。关键在于信道的多少和扫描一个信道的时间,也就是函数的2个参数。尤其吧第二个参数改成0或1,默认是5,测试效果明显。
此外我们硬件加了电容并且adc检查它以控制是否组网。但碰到一个问题,不知道你有没有
就是在系统刚上电的时候,协议栈初始化过程中,会有接近1s时间的10ma的电流,就是这个时间的电流会导致系统起不来,反复卡在重新启动中。后来上电后延迟启动,等待电容充电。但是这个时间太长了体验非常不好。你有这个启动电流的问题吗?
VV:
回复 user4041165:
@edward ou,
CC2530在发送时候的峰值电流是27mA,应该是一个正常的值,详细可以看datasheet
user4041165:
回复 user4381970:
我这里没有遇到这个问题,我们的硬件设计方案,在关灯的情况下,可以提供持续200ma的电流,所以在上电后系统不会因为供电不足导致设备重启。而在开灯的情况下只能提供2ma的电流,所有需要优化加网间隔时间。
你是否测试过rejoin的电流,我这里测试得到的结果是,rejoin与orphan比join跟费电。
VV:
回复 user4041165:
rejoin和orphan应该省电,
首先搜网只要一次够了,也就是一个beacon request,接收一个beacon,
然后发送rejoin request,接收rejoin Response,这样就结束了。
如果是join的话,还要发送秘钥之类的。
user4041165:
回复 VV:
对于终端设备,在rejoin或orphan的时候分别调用NLME_OrphanJoinRequest(单个信道,BEACON_ORDER_15_MSEC) / NLME_ReJoinRequest设备的工作电量为27ma,并持续大概几百毫秒左右,
而我搜索网络的调用NLME_NetworkDiscoveryRequest,每次搜索一个信道,扫描时间为BEACON_ORDER_15_MSEC,测试后得到的电流只有4ma左右。
在rejoin或orphan的时候,这么把这几百毫秒的时间降低。
jian li20:
回复 user4041165:
你好,我也遇到了同样的问题,请问你解决了吗,能否帮助一下我,谢谢了
Aries Lord:
回复 user4041165:
CC2530单火供电,电源至少要能保证40mA*1s的瞬时功率,可以用个大电容。降低Poll的周期。
jian li20:
回复 Aries Lord:
这个回答可以解决这个问题吗