582蓝牙主机唤醒的问题

582作为蓝牙主机,通过LowPower_Sleep休眠,IO口中断唤醒,有下面2个问题:

1、唤醒后如何快速恢复蓝牙主机,我目前是参考main函数,重新调用CH58X_BLEInit();HAL_Init();GAPRole_CentralInit();Central_Init();不知道这样是否合理?

2、通过以上方法恢复在1.3版的库上能正常唤醒并触发中断,但升级到1.8版的库后,一个脉冲只能唤醒,需要再一个脉冲才能触发中断,请问要怎么处理?(其它代码不做任何修改,仅替换Lib目录下的文件重新编译)。

直接通过宏开启进入睡眠就可以了,会由协议站管理唤醒

如果是自行调用进入睡眠,在唤醒之后可以尝试软复位操作。

代码更新到最新,包括公共文件和库都使用最新的。

进行gpio唤醒的操作,可以直接参考pm例程。


修改为通过宏进入睡眠,但有时在我需要进入睡眠时,系统并不调用CH58X_LowPower()函数,那么我如何知道是什么问题阻止系统调用这个函数了呢?



这里都是协议栈管理的,所以从应用层角度解释,就是在没有任务的时候,则会自动进入睡眠。如果有任务到来,则协议栈管理会进行唤醒并执行对应的功能。

注意点:任务的执行时间需要控制在有效连接间隔的一半以内,否则蓝牙可能断连。


另外一个问题请教:调用GaPRole_CentralEstablishlink后,如果没有连上从机,是不是就进不了休眠了?要怎么取消呢?


主机会一直在进行扫描的,因此不会进入到睡眠。如果是主机间隔性的扫描,也会有定时起来唤醒的。注意如果配置为扫描10s就停止扫描,且在该10s未发现从机设备, 则存在没有连接就进入了休眠。

基于手动调用建立连接的情况并会定时停止,可以这样操作:协议栈睡眠是进入CH58X_LowPower函数的,因此在进入函数之前加上标志判断。未建立连接则在协议栈调用CH58X_LowPower函数时,一进来就立马return出去。直到建立连接并注意标志清0。


image.png

最后一条消息是从机上电后,主机连上,然后立即进入睡眠,否则一直在等待。


我们主机是一个面板设备,要求触摸唤醒后最快连上蓝牙,所以不会去扫描而是直接连,这时如果从机一直没开机,就一直不会调用CH58X_LowPower(),是不是我有什么操作或参数不对呢?请看我下面的截图

image.png


主机可以调用直接建立连接的函数Establishlink,进行立马连接。但是需注意并考虑以下几点:如主机在准备建立连接的时候,从机未广播,则主机是否等待完全建立连接再考虑再次睡眠,还是设置timeout进行节省功耗,这是主机开低功耗并节省功耗的注意点。而基于原本Central例程基础上开启睡眠,主机基本不会进入低功耗,因为全程都在扫描(与从机不同,从机是有广播间隔概念,在非广播时自动进入睡眠),因此你看到的进入CH58X_LowPower函数次数非常少(从机会一直打印)。可以先不开启睡眠,直接使用Establishlink判断是否可以建立连接。

基于以上,①timeout可以自行考虑配置时长,如主机未成功建立连接,则先进行睡眠,过一会再醒来并建立连接;②主机一直调用建立连接的函数,同时通过标志,在未连接的时候进入CH58X_LowPower函数立马return出去,直到连接成功,则将CH58X_LowPower函数中的标志清0并不再手动return。

需要注意的是:如果使用Establishlink是因为人体感知,则建议使用例程的扫描连接方式,速度是差不多的。


你好,我需要的就是方式①,但我不知道如何设置这个timeout,Establishlink本身好象没有相关的参数设置。


timeout是自行配置的。举例:主机进行Establishlink时间为10s,如果未建立连接可能从机没有再广播,主机过60s再次连接,以此往复。


timeout是自行配置的

=======================================

在哪配置呢?

如果从机没有广播,我不关心主机多久再次连接,而是主机怎么取消Establishlink?从而触发CH58X_LowPower进入休眠!

从我上面的截图可以看到,如果没有从机广播,主机一直不会触发CH58X_LowPower(最后触发了是因为我打开了从机广播)。


TIMEOUT是自行配置的,不是我们的库里面提供出来的参数,这是在你的应用层去实现的功能。我这样说的目的是“防止从机没有广播,主机就一直在尝试建立连接,这样功耗会非常高”。

如果从机没有广播,主机停止扫描即GAPRole_CentralCancelDiscovery,同时不要再手动的调用Establishlink。

如果还有问题的话,请发送邮件至邮箱:lpc@wch.cn。


只有登录才能回复,可以选择微信账号登录