In order to reduce the power consumption, while still retaining WiFi connections, I cannot use deep sleep mode.
For this reason I'm trying to reduce the frequency to 2MHz.
The frequency gets properly reduces by calling the function rtc_set_cpu_freq and properly scaling the variable _xt_tick_divisor in order to generate timer interrupts with the proper frequency (I had to modify portasm.h in order to use _xt_tick_divisor instead of the XT_TICK_DIVISOR macro).
But I'm having issues with WiFi: after sleeping for some time calling vTaskDelay, WiFi gets disconneted. I can see in the log the message:
"wifi: bcn_timout,ap_probe_send_start"
This message is not printed if I sleep without reducing the frequency before the sleep and increasing it at the end.
Do I have to adjust some wifi parameter in order to have the wifi properly react to the frequency reduction?
I know that the ESP team is working to a stable solution for frequency scaling, but some help would be really appreciated.
Reducing clock frequency
Re: Reducing clock frequency
WiFi peripheral needs BBPLL to be enabled, but the aforementioned CPU frequency change function will disable it once you go to XTAL_FREQ or lower.
Solution for this is to add a call which would allow frequency to be lowered, and another one to request 80MHz APB frequency, to the wifi modem sleep state machine. This part of code isn't open source, so I don't see a trivial way for you to achieve this.
I'm working on pretty much the same thing here; there are a few issues with timers drifting away due to many clock changes, I hope to solve them this week.
Solution for this is to add a call which would allow frequency to be lowered, and another one to request 80MHz APB frequency, to the wifi modem sleep state machine. This part of code isn't open source, so I don't see a trivial way for you to achieve this.
I'm working on pretty much the same thing here; there are a few issues with timers drifting away due to many clock changes, I hope to solve them this week.
Re: Reducing clock frequency
I just pulled the latest idf and I'm unable to find any new code that would allow to reduce the frequency.
I don't want to pressure the dev team, but is there any update plan for the development of this item?
I don't want to pressure the dev team, but is there any update plan for the development of this item?
Re: Reducing clock frequency
Following conversation above, does the Wifi and BT subsystems depend on APB clock to be 80MHz or can APB clock be changed to a different value without affecting Wifi & BT?
Re: Reducing clock frequency
berplast: clock frequency switching has been delayed to the next release. We plan to work on it along with light sleep.
hwmaier: WiFi and BT do require 80MHz APB clock to operate.
hwmaier: WiFi and BT do require 80MHz APB clock to operate.
Re: Reducing clock frequency
@ESP_igrr: I thought that would be the case. Thank you for clarification. I was hoping to be able to reduce the APB_CLK so the CAN controller can run on a lower clock frequency so we can support certain standard baudrates. Seems I have run out of options now (refer to viewtopic.php?f=12&t=2142).
Re: Reducing clock frequency
It seems that changing the cpu freq to 2Mhz using the rtc_clk_cpu_freq_set does not work now.
Using the simple app:
#include "esp_system.h"
#include "soc/rtc.h"
#include "rom/uart.h"
void app_main(void) {
printf("before freq set\n");
uart_tx_wait_idle(0);
rtc_clk_cpu_freq_set(RTC_CPU_FREQ_2M);
// rtc_clk_cpu_freq_set(RTC_CPU_FREQ_80M);
// rtc_clk_cpu_freq_set(RTC_CPU_FREQ_160M);
// rtc_clk_cpu_freq_set(RTC_CPU_FREQ_240M);
printf("after freq set\n");
}
The ESP32 board does not output anything after "before freq set" line.
Using sdk: 7d436c9a44b7506c3de4d5ed6decff8f35f64b67
Toolchain: xtensa-esp32-elf-cc (crosstool-NG crosstool-ng-1.22.0-73-ge28a011) 5.2.0
Is the 2Mhz mode supposed to work?
I am interested in Wifi sta mode + power save + light sleep / 2Mhz mode too. I would highly appreciate update on status of this. Thank you.
Using the simple app:
#include "esp_system.h"
#include "soc/rtc.h"
#include "rom/uart.h"
void app_main(void) {
printf("before freq set\n");
uart_tx_wait_idle(0);
rtc_clk_cpu_freq_set(RTC_CPU_FREQ_2M);
// rtc_clk_cpu_freq_set(RTC_CPU_FREQ_80M);
// rtc_clk_cpu_freq_set(RTC_CPU_FREQ_160M);
// rtc_clk_cpu_freq_set(RTC_CPU_FREQ_240M);
printf("after freq set\n");
}
The ESP32 board does not output anything after "before freq set" line.
Using sdk: 7d436c9a44b7506c3de4d5ed6decff8f35f64b67
Toolchain: xtensa-esp32-elf-cc (crosstool-NG crosstool-ng-1.22.0-73-ge28a011) 5.2.0
Is the 2Mhz mode supposed to work?
I am interested in Wifi sta mode + power save + light sleep / 2Mhz mode too. I would highly appreciate update on status of this. Thank you.
- Attachments
-
- sdkconfig.txt
- (9.83 KiB) Downloaded 1220 times
Re: Reducing clock frequency
In your example, APB frequency has changed to 2MHz, but UART divider is still configured for 80MHz frequency. That might explain why you are not seeing any output.
With regards to the status of frequency switching, we are still working on this.
With regards to the status of frequency switching, we are still working on this.
Who is online
Users browsing this forum: No registered users and 104 guests