0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ESP8266/ESP32自动下载原理

大鱼机器人 来源:芯片之家 作者:芯片之家 2022-10-10 15:06 次阅读

01

背景 前一段时间需要自己制作一片ESP32单板,成本和封装考虑,计划选择CH340E作为USB转串口芯片ESP8266/ESP32的单板一般都有自动下载电路,用户无需按钮即可令单板自动进入下载模式实现固件烧录。 然而自动下载电路需要串口芯片支持DTR和RTS,CH340E却只有RTS信号,没有DTR信号,于是研究学习了一下自动下载电路的原理,准备用一些奇淫技巧解决CH340E的自动下载问题。 遗憾的是, 目前的中文互联网上,关于ESP8266/ESP32自动下载原理,所有能搜索到的解释大部分都是错误的,差之毫厘,谬以千里。 如果随意的假设,自以为是,最终得出的只能是一厢情愿的结论。

02

下载模式

ESP8266/ESP32进入下载模式[1]的条件很简单: EN(也称为RST)上升沿时候GPIO0保持为低电平,如下图所示: aab2a102-4868-11ed-a3b6-dac502259ad0.png

03

分析1 下载电路如下所示,其结构与RS触发器比较类似,注意EN和IO0信号均连接在三极管集电极,通过控制三极管只能拉低此信号。 若三极管截止,则此信号的状态由其他电路决定(一般来说,此类信号会默认接电阻上拉到VCC) aac084ac-4868-11ed-a3b6-dac502259ad0.png逻辑关系如下:


DTR=0;RTS=0,此时Q1截止,Q2截止,EN=1;IO0=1 DTR=0;RTS=1,此时Q1截止,Q2导通,EN=1;IO0=0 DTR=1;RTS=0,此时Q1导通,Q2截止,EN=0;IO0=1 DTR=1;RTS=1,此时Q1截止,Q2截止,EN=1;IO0=1 真值表: DTR RST EN IO0

0 0 1 1
0 1 1 0
1 0 0 1
1 1 1 1

简单总结:当DTR和RTS同时为0或者同时为1时,三极管Q1和Q2均为截止状态,此时EN和IO0的状态由其他电路决定(内部/外部上拉电阻)。 当不同时为0或者1时:


EN=RTS IO0=DTR 注意这种逻辑下 EN和IO0是不可能同时为0的,然而进入下载模式则需要如下的序列:

1.IO=0;EN=0 2.IO=0;EN0->1 从逻辑表上看是根本无法正常进入下载模式的,此为疑惑1

04

分析2 再来继续分析一下esptool.py[2]里下载相关的代码


#issuereset-to-bootloader: #RTS=eitherCH_PD/ENornRESET(bothactivelow=chipinreset #DTR=GPIO0(activelow=boottoflasher) # #DTR&RTSareactivelowsignals, #ieTrue=pin@0V,False=pin@VCC. ifmode!='no_reset': self._setDTR(False)#IO0=HIGH 1)self._setRTS(True)#EN=LOW,chipinreset time.sleep(0.1) 2)self._setDTR(True)#IO0=LOW 3)self._setRTS(False)#EN=HIGH,chipoutofreset time.sleep(0.05) 4)self._setDTR(False)#IO0=HIGH,done 注意True是低电平,False为高电平,另外代码中的setDTR()和setRTS()两条语句之间虽然看上去紧挨着没有延时,然而由于这里是高级语言python,两条语句之间的延时并不能忽略。 因此分析的时候必须依次的进行状态分析,以下分为四个阶段依次分析:

设置DTR = 1; RTS = 0, 此时Q1导通,Q2截止, EN = 0; IO0 = 1

设置DTR = 0; RTS = 0, 此时Q1截止,Q2截止, EN = 1; IO0 = 1

设置DTR = 0; RTS = 1, 此时Q1截止,Q2导通, EN = 1; IO0 = 0

设置DTR = 1; RTS = 1, 此时Q1截止,Q2截止, EN = 1; IO0 = 1

如果按照上面的代码分析来做结论,不论如何系统也是不可能进入下载模式的: EN和IO0首先不可能同时为0,EN由0->1的上升沿IO0也并不为0,再次确认之前的疑惑,那么系统究竟是如何进入下载模式的呢?

05

答案 问题的答案实际在另外一部分电路,原理其实非常简单:EN信号连接在一个电容充放电电路上 aae44f22-4868-11ed-a3b6-dac502259ad0.png CHIP_PU即EN,代码中2-3阶段之后会延时一段时间,而EN由于电容充电,电平并不会立马变为高电平,而是缓慢上升,以如上参数为例计算,同时参考芯片电气参数特性 ab0847ec-4868-11ed-a3b6-dac502259ad0.png 高电平为0.75VDD,则达到高电平按照如下公式计算: ac05c49e-4868-11ed-a3b6-dac502259ad0.png 解得t = 14ms,即EN经过14ms上升到电平1,在实际代码中延时了50ms的等待时间,以确保延时后EN处于电平1的状态。 另外需要提的是,阶段1需要等待一段时间,让电容放电,保证EN电平下降到电平0,才能保证系统正常复位,在代码中预留了100ms的等待时间,同样可以通过电容放电公式计算出放电到电平0需要的时间,感兴趣的朋友可以自行根据公式计算确认。   

审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 三极管
    +关注

    关注

    142

    文章

    3611

    浏览量

    121859
  • 串口芯片
    +关注

    关注

    0

    文章

    36

    浏览量

    10515
  • ESP32
    +关注

    关注

    18

    文章

    971

    浏览量

    17200

原文标题:经典深度分析!ESP8266/ESP32自动下载电路究竟是如何巧妙实现的

文章出处:【微信号:All_best_xiaolong,微信公众号:大鱼机器人】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    ESP32ESP8266基于Arduino的MQTT收发资料说明

    本文档的主要内容详细介绍的是ESP32ESP8266基于Arduino的MQTT收发资料说明。
    发表于 01-24 08:00 107次下载
    <b class='flag-5'>ESP32</b>和<b class='flag-5'>ESP8266</b>基于Arduino的MQTT收发资料说明

    VScode嵌入式开发之ESP32以及ESP8266入门

    VScode嵌入式开发之ESP32以及ESP8266入门1.适用与有部分C语言的开发者或者学生学习ESP系列的开发入门2.ESP多种框架在VScode、PlatfromIO下的开发入门
    发表于 11-03 12:51 29次下载
    VScode嵌入式开发之<b class='flag-5'>ESP32</b>以及<b class='flag-5'>ESP8266</b>入门

    ESP32 开发之旅② Arduino For ESP32说明

    文章目录1. Arduino Core For ESP32是什么?2.Arduino core for ESP32库3.与ESP8266库类比3.1 WiFi —— ESP8266
    发表于 11-13 19:51 33次下载
    <b class='flag-5'>ESP32</b> 开发之旅② Arduino For <b class='flag-5'>ESP32</b>说明

    arduino / VScode+platformIO搭建esp32/esp8266编译环境(一篇足矣)

    大大的赞吧!结尾还有micropython+esp32/esp8266环境搭建的入口,千万不要错过哦~文章目录arduino/VScode+platformIO 搭建esp32/esp8266
    发表于 12-05 14:06 33次下载
    arduino / VScode+platformIO搭建<b class='flag-5'>esp32</b>/<b class='flag-5'>esp8266</b>编译环境(一篇足矣)

    简单的ESP32ESP8266编程器

    电子发烧友网站提供《简单的ESP32ESP8266编程器.zip》资料免费下载
    发表于 07-22 09:43 7次下载
    简单的<b class='flag-5'>ESP32</b>和<b class='flag-5'>ESP8266</b>编程器

    如何在ESP32/ESP8266上使用MicroPython

    在本教程中,我们将了解 MicroPython,它与 Python 有何不同,以及如何在 ESP32/ESP8266 上开始使用 MicroPython。此外,我们将看到一个 LED 闪烁的示例项目来演示 MicroPython 的使用。
    发表于 08-19 15:09 1.4w次阅读
    如何在<b class='flag-5'>ESP32</b>/<b class='flag-5'>ESP8266</b>上使用MicroPython

    使用ESP8266ESP32通过Alexa控制家用电器

    电子发烧友网站提供《使用ESP8266ESP32通过Alexa控制家用电器.zip》资料免费下载
    发表于 12-15 07:52 2次下载
    使用<b class='flag-5'>ESP8266</b>或<b class='flag-5'>ESP32</b>通过Alexa控制家用电器

    WIoT2气象站之Nextion TFT with ESP8266/ESP32

    电子发烧友网站提供《WIoT2气象站之Nextion TFT with ESP8266/ESP32.zip》资料免费下载
    发表于 01-30 11:58 1次下载
    WIoT2气象站之Nextion TFT with <b class='flag-5'>ESP8266</b>/<b class='flag-5'>ESP32</b>

    如何实现ESP8266/ESP32自动下载电路

    CHIP_PU即EN,代码中2-3阶段之后会延时一段时间,而EN由于电容充电,电平并不会立马变为高电平,而是缓慢上升,以如上参数为例计算,同时参考芯片电气参数特性
    发表于 06-03 11:11 3388次阅读
    如何实现<b class='flag-5'>ESP8266</b>/<b class='flag-5'>ESP32</b><b class='flag-5'>自动</b><b class='flag-5'>下载</b>电路

    ESP8266ESP32上的WiFi Webradio

    电子发烧友网站提供《ESP8266ESP32上的WiFi Webradio.zip》资料免费下载
    发表于 06-13 11:38 1次下载
    <b class='flag-5'>ESP8266</b>或<b class='flag-5'>ESP32</b>上的WiFi Webradio

    灵活的ESP8266ESP32初始设备配置

    电子发烧友网站提供《灵活的ESP8266ESP32初始设备配置.zip》资料免费下载
    发表于 06-19 16:15 2次下载
    灵活的<b class='flag-5'>ESP8266</b>和<b class='flag-5'>ESP32</b>初始设备配置

    智能家居:带Alexa和Amazon Echo的ESP8266/ESP32

    电子发烧友网站提供《智能家居:带Alexa和Amazon Echo的ESP8266/ESP32.zip》资料免费下载
    发表于 06-19 10:46 0次下载
    智能家居:带Alexa和Amazon Echo的<b class='flag-5'>ESP8266</b>/<b class='flag-5'>ESP32</b>

    启明云端分享|盘点Esp32-C3与Esp8266 的区别

    ESP8266&ESP32-C3硬件区别从上表可以看出ESP32-C3和ESP8266在硬件上的区别:1.ESP32-C3搭载RISC-V3
    的头像 发表于 10-12 18:31 5095次阅读
    启明云端分享|盘点<b class='flag-5'>Esp32</b>-C3与<b class='flag-5'>Esp8266</b> 的区别

    esp8266esp32区别是什么

    以下是关于ESP8266ESP32的主要区别: 处理器和架构 : ESP8266 :使用一个Tensilica L106 80MHz的处理器,属于Xtensa架构。 ESP32 :使
    的头像 发表于 08-19 18:16 5230次阅读

    esp32esp8266代码共用吗

    本文将介绍ESP32ESP8266两款流行的微控制器在代码共用性方面的可能性与差异性。 一、引言 随着物联网技术的飞速发展,越来越多的智能设备开始进入我们的生活。其中,ESP32ESP82
    的头像 发表于 08-19 18:23 1109次阅读