光伏自組無線網wifi模組樂鑫esp8266芯片官網電源管理低功耗調試,在產品中使用電源管理和低功耗模式后,若通過實際測量,發現在一些時間段里面,功耗始終很高,則可以排查以下幾種可能 (包括但不限于下面的幾種可能):
(1)Wi-Fi正在接收數據或者 Bluetooth LE 正在接收數據。
(2)應用程序長時間獲取電源管理鎖,未釋放電源管理鎖。
(3)應用程序中存在阻塞現象,并且不是使用操作系統API所導致的阻塞現象。
(4)應用程序中有周期非常小的定時器或者非常頻繁地觸發中斷。
當遇到長時間高功耗的情況時,需要分析是什么原因導致的,并針對其進行優化。光伏自組無線網wifi模組樂鑫esp8266芯片官網具體的調試方式可以采用日志調試和GPIO調試,針對 W-Fi和 Bluetooth LE,還可以通過抓取空中包進行分析調試。調試過程可能會反復進行,終滿足實際產品要求。
下面將介紹在低功耗優化調試中常用的日志調試和 GPIO 調試兩種方式,在進行調試時通常還會結合實時功耗數據進行分析。
日志調試
通過日志調試,需要在 menuconfig 中配置 CONEIG_PM_PROEILING,之后將跟蹤每個電源管理鎖的保留時間,esp_pm_dump_locks(EILE* stream)函數將打印這些信息。通過日志調試,光伏自組無線網wifi模組樂鑫esp8266芯片官網可以分析哪些電源管理鎖阻止芯片進入低功耗狀態,并可查看芯片在每種功耗模式中花費的時間。完成調試后,需要在menuconfig 中關閉CONEIG PM PROEILING。配置 CONEIG_PM_PROFILING 需要運行 idf.py menuconfig 命令打開配置工具,在Component config --> Power Management 下配置Enable profiling counters for PM locks 即可。
在應用程序進行自動進入 Light-sleep 模式調試時,光伏自組無線網wifi模組樂鑫esp8266芯片官網需要周期性地調用esp_pm_dump_locks(FILE* stream)函數來打印調試信息,用于分析導致功耗升高的原因。下面提供了部分日志調試的信息:
Time: 11879660
Lock stats:
Name tyoe arg cnt times time percentage
Wifi APB_FREQ_MAX 0 0 107 1826662 16%
Bt APB_FREQ_MAX 0 1 126 5367607 46%
Rtos0 cpu_FREQ_MAX 0 1 8185 809685 7%
Mode stats:
Name HZ time percentage
SLEEP 40M 4252037 35%
APB_MIN 40M 0 0%
APB_MAX 80M 6303881 53%
CPU_MAX 160M 823595 6%
esp_pm_dump_locks(FILE* stream)函數會打印兩種類型的調試信息,在 Lock stats中列舉了應用程序使用的所有電源管理鎖的實時狀態。每一行中的內容分別是:名稱(name)電源管理鎖類型 (type)、參數 (arg)、當前獲取該電源管理鎖的次數 (cnt)、獲取該電源管理鎖總次數(times)、獲取該電源管理鎖的總時間(time)、獲取該電源管理鎖的時間占比(percentage)。光伏自組無線網wifi模組樂鑫esp8266芯片官網在 Mode stats 中列舉了應用程序中不同的模式的實時狀態。每一行中的內容分別是:模式名稱 (name)、時鐘頻率 (HZ)、該模式下的總時間 (time)、該模式的時間占比 (percentage)。
通過上面的描述可以看出,上述日志中類型為APB_FREQ_MAX的 wifi 電源管理鎖被獲取的總時間為 1826662 s,總共獲取了 107 次,當前沒有獲取,時間占比為16%;類型為CPU_FREQ_MAX的 rtos0 電源管理鎖被獲取的總時間為 809685 s,總共獲取了 8185次,當前獲取一次,時間占比為 7%;在Sleep 模式下,時鐘頻率為40 MHZ,處于該模式下的總時間為4252037Hs,時間占比35%。由此類推,即可知道每個電源管理鎖的狀態和功耗模式的狀態。
GPIO調試
采用GPIO調試方式時,需要在 menuconfig 中配置CONFIG_PM_TRACE 選項。光伏自組無線網wifi模組樂鑫esp8266芯片官網如果配置了該選項,某些GPIO將用于發送RTOS 滴答、頻率切換、進入/退出空閑狀態等事件的信號有關GPIO列表,請參閱pm trace.c文件。此功能旨在分析/調試電源管理實現的行為時使用,在完成調試后應用程序中應該保持禁用狀態。
相關GPIO如下所示,每個事件分別有兩個GPIO,對應CPUO和CPU1。由于 ESP32-C3是單核芯片,所以在進行調試時只關注第一列的 GPIO。在開發時,也可以通過修改源碼的方式修改所使用的GPIO。在進行調試前,將相應的 GPIO 連接到邏輯分析儀或示波器等儀器。
1./*GPIOs to use for tracing of esp pm events.
2.*Two entries in the array for each type, one for each CPU.
3.*Feel free to change when debugging.
4.*/
5.static const int DRAM ATTR s trace io[]={
6.#ifndef CONFIG_IDF_TARGET_ESP32C3
7.BIT(4),BIT(5),//ESP_PM_ TRACE_IDLE
8.BIT(16),BIT(17),//ESP_PM_TRACE_TICK
9.BIT(18),BIT(18),//ESP_PM_TRACE_FREQ_SWITCH
10.BIT(19),BIT(19),//ESP_PM_TRACE_CCOMPARE_UPDATE
11.BIT(25),BIT(26),//ESP_PM_TRACE_ISR_HOOK
12.BIT(27),BIT(27),//ESP_PM_TRACE_SLEEP
13.#else
14.BIT(2), BIT(3),//ESP_PM_TRACE_IDLE
15.BIT(4), BIT(5),//ESP_PM_TRACE_TICK
16.BIT(6), BIT(6),//ESP_PM_TRACE_FREQ_SWITCH
17.BIT(7), BIT(7),//ESP_PM_TRACE_CCOMPARE_UPDATE
18.BIT(8), BIT(9),//ESP_PM_TRACE_ISR_HOOK
19.BIT(18),BIT(18),//ESP_PM_TRACE_SLEEP
20.#endif
21.};
配置 CONEIG_PM_PROFILING 需要運行 idf.py menuconfig 命令打開配置工具,在Component config --> Power Management 下配置Enable debug tracing of PM using GPIOs 即可。
在完成上述操作后,就可以開始調試了。光伏自組無線網wifi模組樂鑫esp8266芯片官網通過觀察不同的 GPIO狀態,可以了解當前 CPU所處的狀態和相應的功耗模式,從而可以進一步了解哪些模式消耗的功耗多,還可以判斷是否能進行功耗優化。