Page 1 of 2

TLSR8250_TuyaOS-3.9.0 低功耗实现

Posted: 2024年 May 30日 10:55
by xlhome

设备需要运行定时任务 而且是2节电池供电。

单个模组低功耗是否可以实现? 或者搭配独立rtc芯片实现? 是否有相关的例程。


Re: TLSR8250_TuyaOS-3.9.0 低功耗实现

Posted: 2024年 May 30日 11:02
by jinyuan
  • 若对误差要求不高的可以启用软件定时器实现定时任务,软件定时器可以在低功耗时使用。
    不过误差较大,多的一天会有20s的误差,少的也有10s左右

  • 如果能搭配独立的RTC芯片最好。

  • 搭配独立RTC无相关例程,软件定时器的用法在SDK中有多处使用可以参考。


Re: TLSR8250_TuyaOS-3.9.0 低功耗实现

Posted: 2024年 May 30日 12:42
by xlhome

使用软件定时器, 定时到达会自动唤醒, 之后会自动睡眠吗?


Re: TLSR8250_TuyaOS-3.9.0 低功耗实现

Posted: 2024年 May 30日 14:04
by jinyuan

是的,调用了 tal_cpu_allow_sleep 后,只要MCU处理完任务就会自动休眠下去。
休眠的时长为最近一次任务间隔的时间(可能是广播事件,可能是连接听包,也可能是软件定时器事件)
如果有IO被设置为外部唤醒,达到触发电平后也会提前结束休眠状态唤醒。

芯片休眠后仅保留SRAM的数据,所有的内部外设都会断电(GPIO\IIC\SPI\PWM等)。所以需要再次初始化,这里有两个可以使用的入口。

  • 每次唤醒都会再调用一次tuya_init_third,相关初始化代码可以从这里入手
  • 通过 tal_cpu_sleep_callback_register 注册post_wakeup回调,该回调每次唤醒都会执行一遍。

init前记得deinit一遍。


Re: TLSR8250_TuyaOS-3.9.0 低功耗实现

Posted: 2024年 May 30日 14:34
by xlhome

调用了 tal_cpu_allow_sleep 后 , 从日志中看到没有睡眠 (没有调用tuya_init_third打印日志) 是因为开着打印日志的原因吗?


Re: TLSR8250_TuyaOS-3.9.0 低功耗实现

Posted: 2024年 May 30日 14:44
by jinyuan

广播间隔是多少?如果是100ms及以下,因为休眠间隔太短 ,休眠只会进入suspend,suspend状态下唤醒不会跑tuya_init_third。
你可以把广播间隔调到1000ms试试。同时要确保被配置为可唤醒的IO处于非触发电平状态


Re: TLSR8250_TuyaOS-3.9.0 低功耗实现

Posted: 2024年 May 30日 14:53
by xlhome

tuya_ble_protocol_callback.h

#define TY_ADV_INTERVAL 20 //range: 2010240ms

改成 1000 是吧 ?


Re: TLSR8250_TuyaOS-3.9.0 低功耗实现

Posted: 2024年 May 30日 15:01
by jinyuan

是的 可以在这里改


Re: TLSR8250_TuyaOS-3.9.0 低功耗实现

Posted: 2024年 May 30日 15:20
by xlhome

改成 1000 后, 从日志看到 , 每间隔一秒会调用 tuya_init_third;

1000 是一个最佳值吗?


Re: TLSR8250_TuyaOS-3.9.0 低功耗实现

Posted: 2024年 May 30日 15:28
by jinyuan

不是 ,值的大小要根据 体验 和 低功耗 做一个最优调节。
一般来说:广播间隔越小,子设备被发现的速度越快,连接建立的也就越快,体验就越好,缺点就是功耗越高。反之发现慢,连接建立慢,体验变差,优点就是功耗降低。

需要注意的地方:

  • 子设备在进行配网的时候,建议将广播间隔缩短到100ms左右,这样可以更快的被主机发现,并完成配网。在配网结束后,再将广播间隔更改到设置的默认值。