使用的是最新的2.4G库,从机进入低功耗之后,主机通信超时,然后从机唤醒之后,主机就会有一段时间3-5s在跳频成功和失败切换,之后才可以正常通信。这个怎么解决?
请贴上例程中修改了哪些地方出现的问题,并附上对应修改的代码
另外低功耗处理是否是通过例程中的RF_SLEEP_EVENT进行管理的?
历程给的数组是7个,我把这个改成1个就改了一些东西,低功耗在另一个任务里面执行,没有在跳频这里执行,如果你需要看全部代码可以给个邮箱我发过去
这些宏定义中,
#define RF_ROLE_ID_INVALD (0x07)
#define RF_ROLE_ID_MASK (0x07)
#define RF_ROLE_BOUND_MAX (0x07)
上面这三项不要做修改,RF_ROLE_BOUND_ID可以自己指定ID,让Dongle分配这个ID给你,如果填写的是RF_ROLE_ID_INVALD,也就是0x07,那么Dongle会随机分配ID。
当然你改了这些也不会对当前的通讯造成影响,现在出现的现象比较像是双方时序不同步造成的,现在确认以下几点:
1、首先确认时钟宏双方是否一致。
2、双方绑定连接回调中,断开连接时校准内部RC的函数是否有执行到,目的是断开连接双方校准一次,巩固下一次的连接稳定性。
3、从机端休眠任务是自己调用LowPower_Sleep、LowPower_Halt、LowPower_Idle其中一个接口,还是通过我们提前写好的sleep自动唤醒保持连接的任务进行调用的,如果是自己调用LowPower_Sleep这种形式,是有可能在唤醒后存在一段时间的断连和连接的,但时间不会长达几秒钟,一般在几百毫秒之内能恢复稳定。
4、双方绑定任务中bound.timeout = 150参数有没有改小?
1、首先确认时钟宏双方是一致的。
2、这个校准函数有,但是好像没怎么调用。
3、唤醒是自己写的,用的是外部中断
4、超时参数没有改动。
有个问题,我发现如果master进入低功耗之后,host断开蓝牙连接,有时会连其他的master,有没有办法做到一对一切断开不连其他设备,重新初始化设定之后又可以连其他设备了,超时之后不连接任何设备。
1、低功耗休眠唤醒后,反复的断连回连出现概率高吗?如果概率较小,可能是32M时钟未稳定,加上内部32k误差较大引起的,可在唤醒后主动调用Lib_Calibration_LSI();接口校准两次试试。
2、首先确保CONNECT_NUM参数为1,代表此host只会连接1个设备,在此基础上,host端关注一个参数:gSpeedList_t.pList[0].peerInfo,该变量代表host此时会去定向连接的设备mac地址,如果全为0,则会连接任意设备,否则会去连接指定设备。
并且host端的绑定做法是上电前三秒,会主动清空gSpeedList_t.pList[0].peerInfo,也就是全为0,符合你说的重新初始化能够绑定其他设备的现象,超过3秒后未连上任何设备的话,则会从dataflash中取出地址回连,因此,host端非必要不要重新初始化RF。