首页 > 其他分享 >esp32 启动流程

esp32 启动流程

时间:2023-08-17 17:00:10浏览次数:48  
标签:GPIO0 ROM 启动 芯片 esp32 Flash 模式 流程

[关于 ROM]

在esp32 上电运行后,芯片运行的第一个程序。这段程序是芯片设计与生产的时候,固化在硬件电路中的。所以它是不可修改的(Read Only Memory)。
esp32 的 ROM 负责检测芯片的strapping配置,来决定芯片应该处于什么状态。比如,esp32 上电后,ROM 程序会检查 [GPIO0, GPIO2, GPIO4, MTDO, GPIO5]的状态。
如果 GPIO0 / GPIO2 同时为低电平,则会进入下载模式,等待串口通信信息。
如果GPIO0为高电平,则会进入Flash 运行模式,启动SPI 驱动,并加载Flash中的程序段。

BOOT_MODE[5:0]:
(pull-up, pull-down, pull-down, pull-up, pull-up, SW4 /5/4/3/2/1/ )
[GPIO0, GPIO2, GPIO4, MTDO, GPIO5]
1 x x x x --> SPI Boot
0 0 x x x --> Download Boot (Jonit-Detection of UART0+UART1+SDIO_Slave)

下载模式的串口输出如下(115200), ROM默认会输出当前所处的模式。
rst:0x1 (POWERON_RESET),boot:0x3 (DOWNLOAD_BOOT(UART0/UART1/SDIO_REI_REO_V2))
waiting for download

其中,boot:0x3 表示的是芯片strapping pin脚的状态,
0x03对应 [GPIO0, GPIO2, GPIO4, MTDO, GPIO5] 的值为 [ 0, 0, 0, 1, 1]
所以处于 Download Boot 模式。



[关于下载模式]

当esp32处于下载模式时,会等待串口通信同步,并按照通信协议等待接收指令(协议可参考该文档:https://github.com/espressif/esptool/wi ... l-Protocol)
通过esptool脚本,可以进行寄存器的读写,固件下载,程序运行等操作。

[关于STUB]

在ROM模式,由于芯片处于低频工作的状态,通信速率受限。
在esptool中,会将一段小程序加载到esp32的RAM中,并跳转执行RAM中的小程序。这段小程序包含了ROM中相同的串口通信协议,并对其进行了扩充。感兴趣的开发者,(可以参考这里https://github.com/espressif/esptool/tr ... asher_stub)

[关于 Flash Boot 模式]

如果芯片启动时,GPIO0为高电平,芯片会进入Flash 运行模式。 此时,启动SPI 驱动,并加载Flash中的程序段。ROM 会读取外置 Flash 的0x1000地址,加载并运行二级bootloader。

[关于 Bootloader]

bootloader可以认为是一个独立的小程序,bootloader会对芯片频率进行初始化,并且读取系统SPI的配置信息,对Flash 运行模式以及频率进行配置,然后根据分区表的定义,从对应的地址加载应用程序,并且运行应用程序固件。

标签:GPIO0,ROM,启动,芯片,esp32,Flash,模式,流程
From: https://www.cnblogs.com/aker-whale/p/17638133.html

相关文章

  • 揭开机器人流程自动化的秘密
     虽然现在的话题度不及ChatGPT,但近两年最火的MarTech工具非RPA莫属。今天我们就来看看:资本宠儿、号称世界500强中超过70%的企业都在使用、老板心中最佳员工RPA到底是什么?以及在营销与运营中有哪些应用?01RPA是什么?在我们的日常工作中,存在大量重复的工作,比如:你负责电商运营,......
  • Docker容器设置自启动
    容器自启动分为两种情况一为新建容器时配置自启参数dockerrun--restart=always容器id或容器名称二为已存在的容器配置自启dockerupdate--restart=always容器id或容器名称取消容器自启dockerupdate--restart=no容器id或容器名称批量设置容器自启dockerupda......
  • Kafaka启动不起来如何解决
    要检查__consumer_offsets主题的数据目录和存储状态,可以按照以下步骤进行:找到Kafka的配置文件,通常是config/server.properties。在配置文件中找到log.dirs参数,该参数指定了Kafka存储数据的目录列表。例如,log.dirs=/opt/kafka/data。进入log.dirs指定的目录,找到名为......
  • Flyway 使用流程(简单使用)
    官网: https://flywaydb.org/documentation/api/Flyway 是一款开源的数据库版本管理工具。它可以很方便的在命令行中使用,或者在Java应用程序中引入,用于管理我们的数据库版本。在项目或产品中,很难一开始就把业务理清楚,把数据库表设计好,因此数据表也会在迭代周期不断迭代。在Java应......
  • 鸿蒙入门开发教程:一文带你详解工具箱元服务的开发流程
    鸿蒙入门开发教程:一文带你详解工具箱元服务的开发流程一,基本概念元服务(原名原子化服务)是一种基于HarmonyOSAPI的全新服务提供方式,以HarmonyOS万能卡片等多种呈现形态,向用户提供更轻量化的服务。具有即用即走、信息外显、服务直达的特性。万能卡片(简称卡片)是一种界面展示形式,可......
  • 如何使用Leangoo领歌敏捷看板工具做—用户反馈流程管理
    一个产品在面向市场之后势必会收到来自各个渠道的用户反馈。好的反馈有利于公司品牌的建立,挑剔和负面反馈可以帮助我们了解到用户最真是的需求和使用场景,有利于优化产品提高服务。更加能够提升用户的粘性。在进行用户反馈管理时,用户反馈处理流程可以自行定义,通常......
  • 低代码软件开发框架:用专业技术开启流程化管理办公!
    在新的发展时代,拥有优质的资源和平台,可以助力企业创造佳绩,实现梦想。低代码软件开发框架是提升办公协作效率,提质增效的软件平台,在很多大中型企业中深受欢迎,可以帮助企业实现流程化管理,进入数字化发展新时代。诚然,选择好的服务商是走向成功的关键一步。因为这是能给企业降低风险、......
  • python3流程控制
    Python3条件控制if–elif–elsePython中用 elif 代替了 elseif,所以if语句的关键字为:if–elif–else。示例:Python中if语句的一般形式如下所示:ifcondition_1:statement_block_1elifcondition_2:statement_block_2else:statement_block_3  ......
  • Linux开机启动
    在Linux系统中,您可以通过以下几种方法之一来实现开机启动程序。请注意,不同的Linux发行版可能会有不同的方法,下面是一些常用的方法:使用rc.local(适用于SysVinit系统):在一些较旧的Linux发行版中,可以使用rc.local脚本来添加开机启动项。打开/etc/rc.local文件,可以......
  • 介绍一个工具,可快速自定义各种管理功能,包括数据管理和流程审批
    朋友找到一个叫蓝点通用管理系统的软件,真是太牛B了,普通人都可以三分钟入门,非常方便地自己定制需要的管理功能,像什么人事管理、订单管理、进销存管理、客户管理都是简简单单就可以搞定,并且随时可以调整或扩展管理功能。也可以导入官方提供的或别人发的模板,直接用! 还需要买什么......