ESP 芯片启动时间优化
引言
ESP 芯片启动时间指的是 ESP 芯片从上电到执行 app_main 函数所花费的时间。未经优化的启动流程通常耗时较长(一般在 300 毫秒左右),导致无法满足即时性要求较高的应用场景(比如 灯 的随时开关)。同时伴随着较高的功耗,进而在 Deep-sleep 低功耗模式下的平均功耗居高不下。为了避免这些问题,必须对启动流程进行精细优化。
硬软件环境
硬件:ESP32-S3 和 ESP32-C6
软件:ESP-IDF v5.2.1
可选的优化项
通过 menuconfig 配置以下选项可大幅度减小启动时间:
关闭 Bootloader 日志打印
CONFIG_BOOTLOADER_LOG_LEVEL_NONE=y
CONFIG_BOOTLOADER_LOG_LEVEL=0
跳过 Image 验证
CONFIG_BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP=y
CONFIG_BOOTLOADER_SKIP_VALIDATE_ON_POWER_ON=y
CONFIG_BOOTLOADER_SKIP_VALIDATE_ALWAYS=y
关闭 Boot ROM 日志打印
CONFIG_BOOT_ROM_LOG_ALWAYS_OFF=y
除了这个配置外,还需要在终端中使用 espefuse.py 命令配置相关控制 ROM 日志输出的 eFuse 值(详见 技术参考手册 的 Boot 日志打印控制章节,注:写 eFuse 操作不可逆),具体命令如下:
espefuse.py burn_efuse UART_PRINT_CONTROL 3 espefuse.py burn_efuse DIS_USB_SERIAL_JTAG_ROM_PRINT 1
运行以上两个命令后可使用 espefuse.py summary 命令进行检查,查看是否写入成功,若看到有如下信息,则表示配置成功:
修改 SPI Flash 模式和频率
CONFIG_ESPTOOLPY_FLASHMODE_QIO=y
CONFIG_ESPTOOLPY_FLASHFREQ_80M=y
关闭启动校准
CONFIG_ESP_PHY_CALIBRATION_AND_DATA_STORAGE=y
CONFIG_ESP_PHY_CALIBRATION_MODE=1
修改 FreeRTOS 配置
CONFIG_FREERTOS_UNICORE=y
CONFIG_FREERTOS_HZ=1000
关闭 Log 打印
CONFIG_LOG_DEFAULT_LEVEL_NONE=y
CONFIG_LOG_DEFAULT_LEVEL=0
如需要在优化启动时间的基础上进一步优化上电后 Wi-Fi 连接 AP 的速度,可以同步进行以下操作:
使能配置项 LWIP_DHCP_RESTORE_LAST_IP
CONFIG_LWIP_DHCP_RESTORE_LAST_IP=y
启动时间及启动时平均功耗结果统计
ESP32-S3 在不同主频下的启动时间及平均功耗统计:
CPU 频率 |
80 M |
160 M |
240 M |
---|---|---|---|
优化前启动时间(ms) |
318.8 |
318.7 |
318.7 |
优化前启动功耗(mA) |
44.1 |
51.4 |
57.3 |
优化后启动时间(ms) |
26.87 |
26.875 |
26.965 |
优化后启动功耗(mA) |
29.69 |
29.77 |
29.74 |
ESP32-C6 在不同主频下的启动时间及平均功耗统计:
CPU 频率 |
80 M |
120 M |
160 M |
---|---|---|---|
优化前启动时间(ms) |
328.0 |
327.9 |
327.8 |
优化前启动功耗(mA) |
34.1 |
35.8 |
37.6 |
优化后启动时间(ms) |
33.31 |
33.315 |
33.315 |
优化后启动功耗(mA) |
28.23 |
28.19 |
28.16 |