图8.3.3 Bootloader配置分组的选项
下面我们来看一下上图各个选项的描述与作用。
1Bootloader optimization Level选项
这一选项为引导加载程序设置编译器优化级别gcc-O参数。
l Size(-Os)配置引导加载程序编译器优化大小。
l Debug(-Og)配置引导加载程序编译器优化调试。
l Optimize for performance (-O2)配置引导加载程序编译器优化性能。
l Debug without optimization (-O0)无配置引导加载程序编译器优化。
2Bootloader log verbosity选项
日志输出等级设置以下为可供配置的项目
l No output日志输出等级为NONE。
l Error日志输出等级为ERROR。
l Warning日志输出等级为WARN。
l Info日志输出等级为INFO。
l Debug日志输出等级为DEBUG。
l Verbose日志输出等级为VERBOSE。
3VDDSDIO LDO voltage选项
配置LDO输出电压这有助于防止闪存芯片在闪存编程操作过程中发生故障。
l 1.9V配置引导加载程序VDDSDIO BOOST 1.9V
4GPIO triggers factory reset选项
允许用户将设备重置为出厂设置操作包括清除一个或多个数据分区并从“工厂”分区启动。若在设备启动时GPIO输入保持在预设的配置水平则将自动触发出厂重置功能。默认情况下该选项配置为“No”即出厂重置功能处于关闭状态。
5GPIO triggers boot from test app partition选项
允许用户直接从“TEST”分区运行测试应用程序。在设备启动时如果检测到GPIO输入被拉低系统会自动从“TEST”分区加载并启动测试程序无需额外的操作或配置。
6Enable protection for unmapped memory regions选项
为保护地址空间中未映射的内存区域免受意外访问我们已启用该选项确保CPU在执行涉及未映射区域的内存操作时触发异常。此选项已设置为“enable”从而提供更强的内存安全保护。
7Use RTC watchdog in start code选项
启用跟踪启动代码执行时间的功能以确保在超过预定执行时间时RTC_WDT实时时钟看门狗能够重新启动系统从而有效避免电源不稳定时启动代码可能发生的锁定问题。此跟踪过程将从引导加载程序代码启动重新设置超时时长并选择slow_clk的时钟源直至app_main被调用结束。由于看门狗使用SLOW_CLK作为时钟源因此在调整slow_clk频率后我们必须相应地为新的频率重新设置看门狗的时间。值得注意的是slow_clk的具体时钟源依赖于RTC_clk_SRC的设置即是否选择INTERNAL_RC内部时钟源或EXTERNAL_CRYSTAL外部晶体时钟源。为了确保系统稳定性和可靠性我们强烈推荐启用该功能并将其配置为“enable”状态。 8Allows 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()。为确保应用程序的稳定运行我们推荐保持该选项为禁用状态即选择“Nodisable”。
9Timeout for RTC watchdog (ms)选项
设置RTC看门狗的超时时间其范围为0至120000毫秒ms而默认的超时时间已设置为9000毫秒ms。
10Enable app rollback support选项
更新应用程序后引导加载程序将启动新应用并设置“ESP_OTA_IMG_PENDING_VERIFY”状态此状态会防止该应用被重复运行。用户代码首次启动新应用后应调用相关函数以确认应用的可操作性。若应用运行正常则将其标记为有效否则将其标记为无效并回滚到前一个工作应用。随后将执行重启操作并在软件更新前启动相应应用。请注意新应用在首次启动时若发生电源中断或WDT触发将触发回调函数。此回调仅在具有相同安全版本的应用之间有效。为确保系统稳定性此选项默认设置为禁用即“No(disable)”。
11Skip image validation when exiting deep sleep 选项
此选项禁用从深度睡眠唤醒时对图像的常规验证包括校验和、SHA256和签名这是为了权衡深度睡眠唤醒的性能与图像完整性检查。请仅在明确知道操作后果的情况下启用此选项。同时不建议将此选项与deep_sleep()调用以及活动OTA分区的更改一同使用因为这将会跳过对新OTA分区加载的首次验证。虽然启用了“允许不安全选项”后安全引导功能仍可使用但强烈建议禁用此选项因为它可能允许绕过安全引导机制从而带来安全风险。
12Skip image validation from power on reset (READ HELP FIRST)选项
一些应用程序需要迅速开机启动。默认情况下应用程序的完整二进制文件会从闪存读取并验证这一过程占据了大量的引导时间。
13Skip image validation always (READ HELP FIRST)选项
选择此选项可防止引导加载程序在引导应用程序映像之前对其进行验证。所选应用程序分区的任何闪存损坏都将使整个SoC无法启动。
14Reserve RTC FAST memory for custom purposes选项
此选项允许客户将数据放入RTC FAST内存当重启时此区域保持有效电源丢失除外。此内存位于固定地址可用于引导加载程序和应用程序。应用程序和引导程序必须使用编译相同的选项。RTC FAST内存只能通过PRO_CPU进行访问。
15Enable the support for flash chips of XMC (READ HELP FIRST)选项
执行XMC建议的启动流程。
3Flash配置Serial flasher config
用来设置挂载的Flash通信模式、大小、速率等操作。下图是Flash配置选项。
图8.3.4 Flash配置选项
下面作者讲解一下上图中各个选项的描述与作用。
1Disable download stub选项
禁用下载存根。通常是指在某些嵌入式系统或固件更新过程中关闭或禁用一个用于下载或接收新固件代码的小程序或模块。存根stub是一个占位符或简化版的程序用于在开发或测试阶段模拟某个功能或接口的行为。
2Enable Octal Flash选项
启用八通道闪存Octal Flash功能。八通道闪存是一种高性能的存储器威廉希尔官方网站
它利用多个通道在这里是八个通道并行访问闪存芯片从而提高了数据读写速度。注意请根据模组挂载Flash是否使用Octal SPI。
3Choose flash mode automatically (please read help)选项
让系统或烧录工具自动选择适合的闪存flash memory模式。
4Flash SPI mode选项
设置当前挂载的Flash SPI模式。下表是系统提供的配置项描述。
可选项 | 模式名称 | 引脚 | 速度 |
QIO | Quad I/O | 地址和数据 4pins | 最快 |
QOUT | Quad Output | 数据 4pins | 约比 qio 模式下慢 15% |
DIO | Dual I/O | 地址和数据 2pins | 约比 qio 模式下慢 45% |
DOUT | Dual Output | 数据 2pins | 约比 qio 模式下慢 50% |
表8.3.1 四种SPI模式的对比
5Flash Sampling Mode选项
闪存Flash Memory操作中的一种特定模式用于读取或采样闪存中的数据。
6Flash SPI speed选项
配置SPI Flash速率系统提供开发者配置项分别为120、80、40和20MHz。
7Flash size选项
配置Flash大小系统提供开发者配置项分别为1、2、4、8、16、32、64和128MB。
8Detect flash size when flashing bootloader选项
在烧录引导加载程序bootloader时检测闪存flash大小通常是为了确保引导加载程序能够正确适配目标设备的闪存容量并避免潜在的溢出或空间不足的问题。
9Before flashing选项
固件烧录后的设备复位行为。可用配置
l Reset to bootloader复位bootloader
l No reset无需复位
10After flashing选项
官方并没有描述此选项。
l Reset after flashing复位Flash
l Stay in bootloader停留在引导程序中
4分区表配置Partition Table
分区表的介绍请读者查看第七章节的内容。下图是分区表菜单示意图。
图8.3.5 分区表菜单选项
1Partition Table选项
设置分区表的类型下表是分区表的类型描述
分区表类型 | 描述 |
Single factory app no OTA | 小型的应用程序但没有OTA升级 |
Single factory app (large) no OTA | 大型的应用程序但没有OTA升级 |
Factory app two OTA definitions | 大型的应用程序且具备两个OTA升级 |
Custom partition table CSV | 自定义分区表 |
表8.3.2 分区表的类型
2Custom partition CSV file选项
设置分区表名称如partitions-16MiB.csv。
3Offset of partition table选项
程序烧录时分区表下载至哪个偏移地址。默认为0x8000。
4Generate an MD5 checksum for the partition table选项
在分区表后是否添加MD5校验位和。
5PSRAM配置Component config/ESP PSRAM
下图为PSRAM配置界面。
图8.3.6 PSRAM配置界面
1Support for external, SPI-connected RAM选项
是否支持扩展PSRAM如挂载了PSRAM则需要启动该选项。
2Mode (QUAD/OCT) of SPI RAM chip in use选项
设置PSRAM的SPI模式需开发者查看当前的模组数据手册才能确定PSRAM的SPI模式。该选项的可用配置
l Quad Mode PSRAM四线
l Octal Mode PSRAM八线
3Type of SPIRAM chip in use选项
设置PSRAM芯片类型。该选项的可用配置
l Auto-detect 自动检测。
l ESP-PSRAM64,LY68L6400 or APS6408固定的PSRAM芯片。
4Allow external memory as an argument to xTaskCreateStatic选项
是否支持PSRAM内存用作于FreeRTOS的静态创建函数使用。
5Move Instructions in Flash to PSRAM选项
是否支持将Flash中的指令移动到PSRAM。
6Move Read-Only Data in Flash to PSRAM选项
是否支持将Flash中的只读数据移动到PSRAM。
7Set RAM clock speed选项
设置SPI时钟速率可选配置项
l 80MHz clock speed80MHz
l 40Mhz clock speed40MHz
8Initialize SPI RAM during startup选项
是否启动时初始化SPI RAM。
9Ignore PSRAM when not found选项
是否启动当没有找到PSRAM时忽略PSRAM。
10SPI RAM access method选项
SPI RAM存储方法可选配置项
l Integrate RAM into memory map将PSRAM集成到内存映射当中。
l Make RAM allocatable using heap_caps_malloc(..., MALLOC_CAP_SPIRAM)支持使用heap_caps_malloc等函数分配内存。
l Make RAM allocatable using malloc as well支持使用malloc等函数分配内存。
11Run memory test on SPI RAM initialization选项
是否启动在SPI RAM初始化上运行内存测试。
12Maximum malloc() size, in bytes, to always put in internal memory选项
设置最大分配内存。
13Try to allocate memories of WiFi and LWIP in SPIRAM firstly. If failed, allocate internal memory选项
尝试先在SPIRAM中分配WiFi和LWIP的内存。如果失败再分配内部内存。
14Reserve this amount of bytes for data that specifically needs to be in DMA or internal memory选项
为那些特别需要在DMA或内部内存中的数据保留这些字节。
15Allow .bss segment placed in external memory选项
允许.bss端放置在外部存储器中。
16Enable SPI RAM ECC选项
使能SPI RAM ECC。
其他配置项描述与作用请读者参考乐鑫官方的ESP-IDF编程指南MENUCONFIG章节。