ESP32自动下载电路究竟是如何巧妙实现的

文章详细解释了ESP32如何通过调整DTR和RTS信号以及利用EN引脚的电容充放电特性来进入下载模式,揭示了进入模式所需的具体步骤和背后的逻辑原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ESP32要进入下载模式的前提是,IO0拉低,然后复位芯片 通过EN引脚控制,EN由低电平到高电平(上升沿)时CPU复位,复位后检测到GPIO0是低电平,MCU自动进入下载启动模式!

在这里插入图片描述 在这里插入图片描述
下载电路如下所示:
在这里插入图片描述

根据电路原理:EN、IO0默认为高
DTR = 0; RTS = 0, 此时Q1截止,Q2截止,EN = 默认; IO0 = 默认
DTR = 0; RTS = 1,此时Q1导通,Q2截止, EN = 默认; IO0 = 0
DTR = 1; RTS = 0, 此时Q1截止,Q2导通, EN = 0; IO0 = 默认
DTR = 1; RTS = 1, 此时Q1截止,Q2截止, EN = 默认; IO0 = 默认

逻辑中一旦CPU启动后EN就被拉高了,IO0默认上拉,所以上边电路精简后如下表格:

DTRRTSENIO0
0011
0110
1001
1111

简单总结:

当DTR和RTS同时为0或者同时为1时,此时EN和IO0的状态由其他电路决定(内部/外部上拉电阻)
当不同时为0或者1时,EN = RTS,IO0 = DTR

但是这种逻辑下 EN和IO0是不可能同时为0的,然而进入下载模式则需要如下的序列
1. IO = 0; EN = 0
2. IO = 0; EN 0 -> 1

从逻辑表上看是根本无法正常进入下载模式的。
问题的答案实际在另外一部分电路,原理其实非常简单:

在这里插入图片描述

EN信号连接在一个电容充放电电路上,EN由于电容充电,电平并不会立马变为高电平,而是缓慢上升,我们就可以使用这个时间差。
1、设置DTR = 1; RTS = 0, 此时 EN=0 IO=1
2、设置DTR = 0; RTS = 1, EN=0 IO=0 此时EN引脚由于电容充电,实际还是0
3、等待电容充电完成,此时 EN=1 IO=0,进入下载模式
具体的DTR、RTS就是由芯片厂家提供的esptool.py下载脚本进行设置的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值