ESP32-P4 --- 启动流程

 

执行一级引导程序(内含复位向量代码)

根据复位原因及 GPIO_STRAP_REG 寄存器的值确定启动模式,比如 UART 下载模式、从 FLASH 加载二级引导程序执行

加载二级引导程序,执行入口函数call_start_cpu0() 根据分区表的配置,加载应用程序

通过应用程序二进制文件的头部找到入口地址 call_start_cpu0() ,并跳转到该地址执行

固化在芯片ROM

一级引导程序

在 PRO CPU 执行

 

程序位于 components/bootloader

二级引导程序

 

程序位于 components\esp_system\port\cpu_start.c

应用程序:硬件和基本 C 语言运行环境的端口初始化

在 call_start_cpu0() 内调用 start_other_core() 启动 APP CPU,APP CPU 随即执行 call_start_cpu1()

 

 call_start_cpu1() 自旋, 等待变量 s_resume_cores 置一后才能往下执行

call_start_cpu0() 函数最后执行 start_cpu0_default() - 最后执行freertos task

 

call_start_cpu1() 函数最后执行

start_cpu_other_cores() - 最后一直delay
 start_cpu0_default() 的 do_secondary_init() 设置全局变量致使 APP CPU 退出自旋  启动调度器,执行第一个task(main_task),其内调用app_main

 APP CPU 启动,从 call_start_cpu1() 开始执行

  应用程序:软件服务和 FreeRTOS 的系统初始化    应用程序:运行主任务并调用 app_main

 

一级引导程序的 log

ESP-ROM:esp32p4-20230811 Build:Aug 11 2023 rst:0xc (SW_CPU_RESET),boot:0x31f (SPI_FAST_FLASH_BOOT) SPI mode:DIO, clock div:1 load:0x4ff2bbd0,len:0x73c load:0x4ff2dbd0,len:0x20ec load:0x4ff34cd8,len:0x1748 entry 0x4ff2bc40

 

posted @ 2024-03-29 12:25  流水灯  阅读(124)  评论(0编辑  收藏  举报