ESP 芯片启动时间优化

[English]

引言

ESP 芯片启动时间指的是 ESP 芯片从上电到执行 app_main 函数所花费的时间。未经优化的启动流程通常耗时较长(一般在 300 毫秒左右),导致无法满足即时性要求较高的应用场景(比如 灯 的随时开关)。同时伴随着较高的功耗,进而在 Deep-sleep 低功耗模式下的平均功耗居高不下。为了避免这些问题,必须对启动流程进行精细优化。

硬软件环境

  • 硬件:ESP32-S3 和 ESP32-C6

  • 软件:ESP-IDF v5.2.1

可选的优化项

通过 menuconfig 配置以下选项,即可大幅度减小启动时间:

  1. 关闭 Bootloader 日志打印

    • CONFIG_BOOTLOADER_LOG_LEVEL_NONE=y

    • CONFIG_BOOTLOADER_LOG_LEVEL=0

  2. 跳过 Image 验证

    • CONFIG_BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP=y

    • CONFIG_BOOTLOADER_SKIP_VALIDATE_ON_POWER_ON=y

    • CONFIG_BOOTLOADER_SKIP_VALIDATE_ALWAYS=y

  3. 关闭 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 命令进行检查,查看是否写入成功,若看到有如下信息,则表示配置成功:

    log_efuse
  4. 修改 SPI Flash 模式和频率

    • CONFIG_ESPTOOLPY_FLASHMODE_QIO=y

    • CONFIG_ESPTOOLPY_FLASHFREQ_80M=y

  5. 关闭启动校准

    • CONFIG_ESP_PHY_CALIBRATION_AND_DATA_STORAGE=y

    • CONFIG_ESP_PHY_CALIBRATION_MODE=1

  6. 修改 FreeRTOS 配置

    • CONFIG_FREERTOS_UNICORE=y

    • CONFIG_FREERTOS_HZ=1000

  7. 关闭 Log 打印

    • CONFIG_LOG_DEFAULT_LEVEL_NONE=y

    • CONFIG_LOG_DEFAULT_LEVEL=0

如需要在优化启动时间的基础上进一步优化上电后 Wi-Fi 连接 AP 的速度,可以同步进行以下操作:

  1. 使能配置项 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

备注

启动功耗为整个启动过程的平均电流。