ESP-IDF配置详情(menuconfig)

项目创建后常用配置

  1. 选择型片型号:idf.py set-target esp32s3
  2. 选择端口号: idf.py

配置

  • 工程配置 idf.py menuconfig

所有配置:

  1. Build Type 编译类型
  2. Bootloader config BootLoader 配置
  3. Security features 安全特性
  4. Application manager 应用程序管理器
  5. Boot ROM Behavior 引导ROM行为
  6. Serial flasher config Flash 配置
  7. Partition Table 分区表配置
  8. Compiler options 编译选项
  9. Component config 组件配置

1.Build type (编译选项)

用于配置项目工程编译时生成哪个应用程序类型

  1. Application build type 选择应用程序的构建方式
    • Default(binary application + 2nd stage bootloader):这表示应用程序将以与 ESP-IDF 引导加载程序兼容的二进制格式构建
    • Build app runs entirely in RAM(EXPERIMENTAL): 它仅适用于非常小和有限的应用程序,通过仅链接应用程序的elf文件,使其能够通过 JTAG 直接加载到 RAM 中。注意,由于 IRAM 和 DRAM 的大小非常有限,因此采用这种方式构建复杂应用程序是不可行的
  2. Enable reproducible build: 可复制构建
  3. No Binary Blobs: 禁用应用程序构建中的二进制库链接,注意:开启后Wifi与蓝牙无法工作

2.Bootloader config (Bootloader 配置)

用于配置引导加载程序编译器优化等级、日志等

  1. Bootloader manager
  2. Use time/date stamp for bootloader (Yes): 是否在编译 Bootloader 时嵌入时间/日期戳信息
  3. Project version (1) : 项目版本号
  4. Bootloader optimization Level: 设置 Bootloader 的编译优化级别。
    • Size(-Os with GCC, -Oz with Clang):(默认)配置引导加载程序编译器优化大小
    • Debug(-Og):配置引导加载程序编译器优化调试。
    • Optimize for performance (-O2):配置引导加载程序编译器优化性能。
    • Debug without optimization (-O0):无配置引导加载程序编译器优化。
  5. Log: 日志配置
    1. Bootloader log verbosity: 日志输出等级设置
      • No output: 关闭日志输出
      • Error: 仅输出错误日志
      • Warning: 输出错误日志和警告日志
      • Info: (默认)输出错误日志、警告日志和信息日志
      • Debug: 输出错误日志、警告日志、信息日志和调试日志
      • Verbose: 输出错误日志、警告日志、信息日志、调试日志和调试日志
    2. Format: 日志输出格式配置
  6. Serial Flash Configurations: 串口Flash配置
    1. Allow app adjust Dummy Cycle bits in SPI Flash for higher frequency: 允许应用程序在运行时动态调整 SPI Flash 的 Dummy Cycle 位数。这样可以在高频模式下优化 SPI Flash 的性能和稳定性。
    2. Enable the support for flash chips of XMC (Yes): 允许支持XMC Flash芯片
  7. VDDSDIO LDO voltage: 配置LDO输出电压 1.9V
  8. GPIO triggers factory reset: 允许用户将设备重置为出厂设置,操作包括清除一个或多个数据分区,并从“工厂”分区启动。若在设备启动时,GPIO 输入保持在预设的配置水平,则将自动触发出厂重置功能
  9. GPIO triggers boot from test app partition: 允许通过特定的 GPIO 引脚触发设备从 测试应用程序分区(Test App Partition) 启动。这个功能通常用于开发和测试阶段,方便快速切换主应用程序和测试应用程序。
  10. Enable protection for unmapped memory regions (Yes):用于启用对未映射内存区域的保护。这个功能可以防止程序访问无效或未分配的内存区域,从而提高系统的稳定性和安全性。
  11. Use RTC watchdog in start code (Yes):启用跟踪启动代码执行时间的功能,以确保在超过预定执行时间时,RTC_WDT(实时时钟看门狗)能够重新启动系统,从而有效避免电源不稳定时启动代码可能发生的锁定问题,为了确保系统稳定性和可靠性,我们强烈推荐启用该功能
  12. Allows RTC watchdog disable in user code:如果启用了该选项,ESP-IDF 应用程序需要在其代码中自行处理 RTC_WDT 的重置、喂狗或禁用操作。而若未启用此选项(默认为禁用状态),ESP-IDF 会在调用 app_main()函数之前自动禁用 RTC_WDT。如需手动重置 RTC_WDT 的计数器,请使用函数 rtc_wdt_feed();若需禁用RTC_WDT,则使用函数 rtc_wdt_disable()。为确保应用程序的稳定运行,我们推荐保持该选项为禁用状态
  13. Timeout for RTC watchdog (9000ms):设置 RTC 看门狗的超时时间,其范围为 0 至 120000 毫秒(ms),而默认的超时时间已设置为 9000 毫秒(ms)。
  14. Enable app rollback support:更新应用程序后,引导加载程序将启动新应用并设置“ESP_OTA_IMG_PENDING_VERIFY”状态,此状态会防止该应用被重复运行。用户代码首次启动新应用后,应调用相关函数以确认应用的可操作性。若应用运行正常,则将其标记为有效;否则,将其标记为无效,并回滚到前一个工作应用。随后将执行重启操作,并在软件更新前启动相应应用。请注意,新应用在首次启动时若发生电源中断或WDT触发,将触发回调函数。此回调仅在具有相同安全版本的应用之间有效。为确保系统稳定性,此选项默认设置为禁用
  15. Skip image validation whe exiting deep sleep:此选项禁用从深度睡眠唤醒时对图像的常规验证(包括校验和、SHA256 和签名),这是为了权衡深度睡眠唤醒的性能与图像完整性检查。请仅在明确知道操作后果的情况下启用此选项。同时,不建议将此选项与 deep_sleep()调用以及活动OTA分区的更改一同使用,因为这将会跳过对新 OTA 分区加载的首次验证。虽然启用了“允许不安全选项”后,安全引导功能仍可使用,但强烈建议禁用此选项,因为它可能允许绕过安全引导机制,从而带来安全风险
  16. Skip image validation from power on reset:一些应用程序需要迅速开机启动。默认情况下,应用程序的完整二进制文件会从闪存读取并验证,这一过程占据了大量的引导时间。
  17. Skip image validation always:选择此选项可防止引导加载程序在引导应用程序映像之前对其进行验证。所选应用程序分区的任何闪存损坏都将使整个 SoC 无法启动。
  18. Reserve RTC FAST memory for custom purposes:此选项允许客户将数据放入 RTC FAST 内存,当重启时此区域保持有效,电源丢失除外。此内存位于固定地址,可用于引导加载程序和应用程序。(应用程序和引导程序必须使用编译相同的选项)。RTC FAST 内存只能通过 PRO_CPU 进行访问。

3.Security features

  1. Require signed app images
  2. Enable hardware Secure Boot in bootloader
  3. Enable flash encryption on boot

4.Application manager

  1. Use time/date stamp for app (default:Yes)
  2. Exclude PROJECT_VER from firmware image
  3. Exclude PROJECT_NAME from firmware image
  4. Get the project version from Kconfig
  5. The length of APP ELF SHA is stored in RAM(chars):(默认:9)

5.Boot ROM Behavior

  1. Permanently change Boot ROM output (Always Log)
    • Always log (默认)
    • Permanently disable logging
    • Log on GPIO high
    • Log on GPIO low

6.Serial flasher config (Flash配置)

用来设置挂载的 Flash 通信模式、大小、速率等操作

  1. Disable download stub: 禁用下载存根。通常是指在某些嵌入式系统或固件更新过程中,关闭或禁用一个用于下载或接收新固件代码的小程序或模块。存根(stub)是一个占位符或简化版的程序,用于在开发或测试阶段模拟某个功能或接口的行为。
  2. Enable Octal Flash: 启用八通道闪存(Octal Flash)功能。八通道闪存是一种高性能的存储器技术,它利用多个通道(在这里是八个通道)并行访问闪存芯片,从而提高了数据读写速度。注意:请根据模组挂载 Flash 是否使用 Octal SPI。
  3. Choose flash mode automatically: 让系统或烧录工具自动选择适合的闪存(flash memory)模式
  4. Flash SPI mode: 设置当前挂载的 Flash SPI 模式
  5. QIO (Quad I/O, 地址和数据 4pins, 速度最快)
  6. QOUT (Quad Output, 数据 4pins, 约比 qio 模式下慢 15%)
  7. DIO (默认) (Dual I/O, 地址和数据 2pins, 约比 qio 模式下慢 45%)
  8. DOUT (Dual Output, 数据 2pins, 约比 qio 模式下慢 50%)
  9. Flash Sampling Mode (STR Mode): 闪存(Flash Memory)操作中的一种特定模式,用于读取或采样闪存中的数据。
  10. *Flash SPI speed: 配置 SPI Flash 速率
    • 120MHz
    • 80MHz (默认)
    • 40MHz
    • 20MHz
  11. Flash Size: 配置 Flash 大小
    • 1MB
    • 2MB (默认)
    • 4MB
    • 8MB
    • 16MB
    • 32MB
    • 64MB
    • 128MB
  12. Detect flash size when flashing bootloader: 在烧录引导加载程序(bootloader)时检测闪存(flash)大小,通常是为了确保引导加载程序能够正确适配目标设备的闪存容量,并避免潜在的溢出或空间不足的问题
  13. Before flashing: 固件烧录后的设备复位行为
    • Reset to bootloader (默认): 复位 bootloader
    • No reset : 无需复位
  14. After flashing
    • Reset after flashing (默认): 复位 Flash
    • Stay in bootloader: :停留在引导程序中

7.Partition Table (分区表配置)

  1. Partition Table: 设置分区表的类型
    • Single factory app, no OTA (默认): 小型的应用程序,但没有 OTA 升级
    • Single factory app (large), no OTA: 大型的应用程序,但没有 OTA 升级
    • Factory app, two OTA definitions: 大型的应用程序,且具备两个 OTA 升级
    • Two large size OTA partitions
    • Custom partition table CSV: 自定义分区表
  2. Offset of partition table (默认: 0x8000): 程序烧录时,分区表下载至哪个偏移地址。默认为 0x8000。
  3. Generate an MD5 checksum for the partition table (默认: Yes): 在分区表后是否添加 MD5 校验位和

8.Compiler options

  1. Optimization Level
    • Debug (-Og) (默认)
    • Optimize for size (-Os with GCC, -Oz with Clang)
    • Optimize for performance (-O2)
    • Debug without optimization (-O0)
  2. Assertion level
    • Enabled (默认)
    • Silent (saves code size)
    • Disabled (sets -DNDEBUG)
  3. Enable the evaluation of the expression inside assert(X) when NDEBUG is set (Yes)
  4. Compiler float lib source (libgcc)
  5. Disable messages in ESP_RETURN_ON_* and ESP_EXIT_ON_* macros
  6. Replace ESP-IDF and project paths in binaries (default: Yes)
  7. Enable C++ exceptions
  8. Enable C++ run-time type info (RTTI)
  9. Stack smashing protection mode
    • None (默认)
    • Normal
    • Strong
    • Overall
  10. Disable merging const sections
  11. Enable -Wwrite-strings warning flag
  12. Disable errors for default warnings (default: Yes)
  13. Disable new warnings introduced in GCC 12
  14. Disable new warnings introduced in GCC 13
  15. Disable new warnings introduced in GCC 14
  16. Dump RTL files during compilation
  17. Compiler runtime library (libgcc)
  18. Orphan sections handling
    • Place with warning (默认)
    • Place silently
  19. Enable compiler static analyzer

9.Component config

  1. Application Level Tracing
  2. Bluetooth
  3. Console Library
  4. Driver Configurations
  5. eFuse Bit Manager
  6. ESP-TLS
  7. ADC and ADC Calibration
  8. Wireless Coexistence
  9. Common ESP-related
  10. ESP-Driver:GPTimer Configurations
  11. ESP-Driver:I2C Configurations
  12. ESP-Driver:GPIO Configurations
  13. ESP-Driver:I2S Configurations
  14. ESP-Driver:LEDC Configurations
  15. ESP-Driver:MCPWM Configurations
  16. ESP-Driver:PCNT Configurations
  17. ESP-Driver:RMT Configurations
  18. ESP-Driver:Sigma Delta Modulator Configurations
  19. ESP-Driver:SPI Configurations
  20. ESP-Driver:Touch Sensor Configurations
  21. ESP-Driver:Temperature Sensor Configurations
  22. ESP-Driver:UART Configurations
  23. ESP-Driver:USB Serial/JTAG Configuration
  24. Ethernet
  25. Event Loop Library
  26. GDB Stub
  27. ESP HTTP client
  28. HTTP Server
  29. ESP HTTPS OTA
  30. ESP HTTPS server
  31. Hardware Settings
  32. ESP-Driver:LCD Controller Configurations
  33. ESP-MM: Memory Management Configurations
  34. ESP NETIF Adapter
  35. Partition API Configuration
  36. PHY
  37. Power Management
  38. ESP PSRAM: PSRAM 配置
    1. Support for external, SPI-connected RAM: 是否支持扩展PSRAM,如挂载了 PSRAM需要启用
    2. SPI RAM config: 只有启用上面选项才能配置
      1. Mode (QUAD/OCT) of SPI RAM chip in use (Quad Mode PSRAM):设置 PSRAM 的 SPI 模式
      2. Type of SPIRAM chip in use (Auto-detect)
      3. Enable Executable in place from (XiP) from PSRAM feature (NEW)
      4. Move Instructions in Flash to PSRAM (NEW)
      5. Move Read-Only Data in Flash to PSRAM (NEW)
      6. Set RAM clock speed (40Mhz clock speed)
      7. Initialize SPI RAM during startup (NEW) (Yes)
      8. Ignore PSRAM when not found (NEW)
      9. SPI RAM access method (Make RAM allocatable using malloc() aswell)
      10. Run memory test on SPI RAM initialization (NEW)
      11. (16384) Maximum malloc() size, in bytes, to always put in internal memory (NEW)
      12. Try to allocate memories of WiFi and LWIP in SPIRAM firstly. If failed,allocate internal me
      13. (32768) Reserve this amount of bytes for data that specifically needs to be in DMA or internal m
      14. Allow .bss segment placed in external memory (NEW)
      15. Allow .noinit segment placed in external memory (NEW)
  39. ESP Ringbuf
  40. ESP Security Specific
  41. ESP System Settings
  42. IPC (Inter-Processor Call)
  43. ESP Timer (High Resolution Timer)
  44. Wi-Fi
  45. Core dump
  46. FAT Filesystem support
  47. FreeRTOS
  48. Hardware Abstraction Layer (HAL) and Low Level (LL)
  49. Heap memory debugging
  50. Log
  51. LWIP
  52. mbedTLS
  53. ESP-MQTT Configurations
  54. Newlib
  55. NVS
  56. OpenThread
  57. Protocomm
  58. PThreads
  59. Main Flash configuration
  60. SPI Flash driver
  61. SPIFFS Configuration
  62. TCP Transport
  63. Ultra Low Power (ULP) Co-processor
  64. Unity unit testing library
  65. USB-OTG
  66. Virtual file system
  67. Wear Levelling
  68. Wi-Fi Provisioning Manager