深入解析ESP32C3(3)- bootloader启动流程
ESP32C3启动流程可以分为如下3 个步骤:一级引导程序(PBL):被固化在了ESP32-C3 内部的ROM 中,它会从flash 的0x0 偏移地址处加载二级引导程序至RAM (IRAM DRAM) 中。二级引导程序(SBL):从flash 中加载分区表和主程序镜像至内存中,主程序中包含了RAM 段和通过flash高速缓存映射的只读段。应用程序(RTOS):APP启动运行,这时RTOS 的调度器和第二个CPU(多核)启动。一级引导程序(PBL)PBL固化在ESP32C3芯片内部ROM,无法更改。由于官方没有公开PBL的代码,这里直接参考开发向导的功能介绍。SoC 复位上电后,CPU 会立即跳转至0x4000_0000地址处,开始执行初始化操作。乐鑫提供了ELF格式的内部固件,以下是ELF头信息: riscv32-esp-elf-readelf.exe -h G:\Program\Espressif\tools\esp-rom-elfs\20230113\esp32c3_rev3_rom.elf ELF Header: Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 Class: ELF32 Data: 2's complement, little endian Version: 1 (current) OS/ABI: UNIX - System V ABI Version: 0 Type: EXEC (Executable file) Machine: RISC-V Version: 0x1 Entry point address: 0x40000000 Start of program headers: 52 (bytes into file) Start of section headers: 553332 (bytes into file) Flags: 0x1, RVC, soft-float ABI Size of this header: 52 (bytes) Size of program headers: 32 (bytes) Number of program headers: 28 Size of section headers: 40 (bytes) Number of section headers: 75 Section header string table index: 74PBL开机日志:ESP-ROM:esp32c3-api1-20210207 Build:Feb 7 2021 rst:0x15 (USB_UART_CHIP_RESET),boot:0xc (SPI_FAST_FLASH_BOOT) Saved PC:0x4004c634 0x4004c634: uart_rx_readbuff in ROM SPIWP:0xee mode:DIO, clock div:1 load:0x3fcd5820,len:0x1710 load:0x403cc710,len:0x968 load:0x403ce710,len:0x2f9c entry 0x403cc710 //上面是PBL日志,后面是SBL日志 I (15) boot: ESP-IDF HEAD-HASH-NOTFOUND 2nd stage