深入解析ESP32C3(3)- bootloader启动流程

ESP32C3启动流程可以分为如下3 个步骤:

  1. 一级引导程序(PBL):被固化在了ESP32-C3 内部的ROM 中,它会从flash 的0x0 偏移地址处加载二级引导程序至RAM (IRAM & DRAM) 中。
  2. 二级引导程序(SBL):从flash 中加载分区表和主程序镜像至内存中,主程序中包含了RAM 段和通过flash高速缓存映射的只读段。
  3. 应用程序(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: 74

 PBL开机日志:

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 bootloader
### DMA固件的相关信息 DMA(Direct Memory Access)是一种允许外部设备与存储器之间直接交换数据的技术,而无需CPU干预。对于某些硬件平台而言,DMA控制器的操作通常由特定的固件支持。 #### 关于Sound Open Firmware中的DMA支持 Sound Open Firmware架构提供了对多种音频处理功能的支持,其中包括可能涉及DMA操作的部分[^1]。虽然具体文档未提及DMA实现细节,但可以推测其内部机制依赖于底层硬件的DMA引擎来加速数据传输过程。如果需要调试或分析启动失败的情况,则可以通过启用引导跟踪信息的方式获取更多日志输出并定位潜在问题所在。 #### Linux内核中DMI扫描相关内容 在Linux操作系统环境下,DMI表解析逻辑位于`drivers/firmware/dmi_scan.c`文件之中[^2]。尽管这部分代码主要用于识别系统硬件配置而非专门针对DMA固件管理,但它可以帮助开发者了解当前运行环境下的主板及芯片组特性,从而间接推断是否存在专用DMA控制器以及如何加载相应的驱动程序或者微码更新包。 #### ESP32-C3上的固件烧录方法及其扩展应用至DMA领域 对于基于RISC-V指令集架构设计而成的ESP32-C3模块来说,利用OpenOCD工具配合预定义好的配置脚本能够顺利完成初始阶段bootloader镜像写入工作[^3]: ```bash openocd -f board/esp32c3-ftdi.cfg -c "program_esp build/bootloader/bootloader.bin 0x0 verify exit" ``` 假设目标项目确实需要用到高级别的内存访问控制手段比如通过外设接口触发连续读取动作等等场景下,那么除了上述基础命令之外还需要额外关注几个方面: - 是否存在官方提供的SDK组件库函数简化调用流程- 针对该系列MCU产品线是否有现成开源解决方案可供参考借鉴; 综上所述,在不同平台上寻找合适的资源路径各有差异,建议依据实际需求进一步深入研究各个部分技术资料。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值