光伏自组无线网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所处的状态和相应的功耗模式,从而可以进一步了解哪些模式消耗的功耗多,还可以判断是否能进行功耗优化。