自动light_sleep(power_save)模式下,串口不能正常接收完整数据?

Moderator: ESP_ZT

joseph_ji
Posts: 70
Joined: Thu Jun 17, 2021 1:26 am

自动light_sleep(power_save)模式下,串口不能正常接收完整数据?

Postby joseph_ji » Thu Mar 23, 2023 10:45 am

环境描述:硬件esp32-c3-mini-1模组;IDF_V4.3,软件uart_events+power_save:在例程uart_events的基础上,开启power_save模式
问题说明:在power_save模式下,模组是定时唤醒的,我这边设置的监听间隔(listen_interval)是1s;在这种情况下,uart的接收数据有时能接收到数据,有时不能,有接收到数据长度也是不完整的;我自己的理解是:因为power_save是间隔时间定时醒来去查ap是否有数据的,如果没有,模组会继续进入light_sleep休眠,因此往串口发送数据时不会刚好卡在模组醒来的时间,所以导致接收有问题;
预期诉求:我这边的项目是低功耗的项目,要求硬件可以远程唤醒(wifi)+本地唤醒(uart),wifi唤醒我这边使用power_save是可以实现的,就是这种情况下uart不能正确通讯,有什么办法可以让模组在uart有数据时,可以立即醒来接收数据?
Attachments
uart_events_power_save.rar
(22.28 KiB) Downloaded 1180 times

joseph_ji
Posts: 70
Joined: Thu Jun 17, 2021 1:26 am

Re: 自动light_sleep(power_save)模式下,串口不能正常接收完整数据?

Postby joseph_ji » Thu Mar 23, 2023 10:47 am

然后我这边测试过,设置串口为唤醒源,并不能在模组休眠时唤醒,模组依然按照设置的时间间隔唤醒。

ESP_ZB2
Posts: 21
Joined: Wed Dec 28, 2022 12:33 pm

Re: 自动light_sleep(power_save)模式下,串口不能正常接收完整数据?

Postby ESP_ZB2 » Thu Mar 23, 2023 11:11 am

  1. 请将idf切换到master或者更高版本,example/system/light_sleep里面有串口唤醒example,idf4.3里面需要添加很多东西

joseph_ji
Posts: 70
Joined: Thu Jun 17, 2021 1:26 am

Re: 自动light_sleep(power_save)模式下,串口不能正常接收完整数据?

Postby joseph_ji » Thu Mar 23, 2023 11:24 am

light sleep的例程我测试过,在我目前使用的idf4.3版本,直接调用esp_light_sleep_start(),通过串口也是可以唤醒的;您这边确定power_save的自动light_sleep也是可以唤醒的吗?我明天将idf的版本升级后再测试看看,后续结果再反馈给你们,谢谢

joseph_ji
Posts: 70
Joined: Thu Jun 17, 2021 1:26 am

Re: 自动light_sleep(power_save)模式下,串口不能正常接收完整数据?

Postby joseph_ji » Tue Mar 28, 2023 9:50 am

我这边将idf升到v5.0.1了,然后我拿light sleep例程过来修改:开启了wifi_power_save(自动light sleep)和uart唤醒,其余无关的我注释掉了;目前的情况是uart可以唤醒自动light sleep,程序会执行到case UART_WAKEUP:这边,但是我的本意是希望设备被唤醒后可以继续从rx读到数据,程序可以执行到case UART_DATA:这边的,从调试结果来看,程序有时能执行到case UART_DATA,有时不能,uart_read_bytes()读到数据还是不对;我这边还是将我修改的例程与日志附上,麻烦请教下该如何才能实现我的需求:wifi_power_save状态下,uart能正常通讯?
Attachments
light_sleep_.rar
(533.42 KiB) Downloaded 888 times

joseph_ji
Posts: 70
Joined: Thu Jun 17, 2021 1:26 am

Re: 自动light_sleep(power_save)模式下,串口不能正常接收完整数据?

Postby joseph_ji » Thu Mar 30, 2023 1:37 am

这边继续反馈我的调试结果:我将uart的时钟源修改为 XTAL(原来默认用APB时钟),如下图:
uart_clk修改.PNG
uart_clk修改.PNG (55.89 KiB) Viewed 34405 times
然后我发现,在发送唤醒的数据后(前面的AA AA FF FF FF是唤醒的数据),再继续发送数据,可以达到发送最多41个有效字节的效果,但是如果发送超过41个字节,后面的数据就不对了,我不知道我的调试方向对不对,感觉是不是唤醒的时间过短导致只能接收一定量的数据?
uart_log_1.PNG
uart_log_1.PNG (80.64 KiB) Viewed 34405 times

Who is online

Users browsing this forum: No registered users and 15 guests