最近在玩ESP8266,做了些东西,比如考研倒计时器、网络闹钟、网络灯(用手机控制亮度)、气象站等等。

ESP8266本身挺简单的,倒是这个自动下载电路,我还是第一次玩,以前玩51也用过串口下载,都是自己冷启动,玩STM32用的ST-LINK,直接下载。

现在才发现其实可以设计一个自动下载电路,根据不同的MCU下载的条件不同,电路设计也有区别。

这里我就简单说一下ESP8266的自动下载电路以及CH340芯片的一个坑。

原理图如下:

使用的是CH340C,实际上其他型号也差不多,CH340C相比CH340G就是少用个晶振。

可以看到相比普通的串口,此电路中将CH340的RTS(注意不是RST)和DTS引出,通过右侧电路,构成自动下载电路。

那么ESP8266如何进入下载模式呢。很简单,两句话。

1.在复位上升沿时,如果BOOT为1,则进入运行模式,此时内部程序正常运行。

2.在复位上升沿时,如果BOOT为0,则进入运行模式,此时可通过串口下载程序。

那么要想进入下载模式,一开始我的想法是应该是RST和BOOT都为0,然后RST置为1,这样RST就有一个上升沿,且BOOT为0。这句话先放这,我们再来看。

那么现在分析一下右侧电路逻辑。

DTR = 0,RTS = 0,此时Q1截止,Q2截止,RST= 1,BOOT= 1;
DTR = 0,RTS = 1,此时Q1截止,Q2导通,RST= 1,BOOT= DTR = 0;
DTR = 1,RTS = 0,此时Q1导通,Q2截止,RST= RTS = 0,BOOT= 1;
DTR = 1,RTS = 1,此时Q1截止,Q2截止,RST= 1,BOOT= 1;

你会发现无法出现RST= 0,BOOT= 0。但是我们上面分析中需要RST= 0,BOOT= 0,好像无解啊。那么这个电路怎么实现ESP8266自动下载呢。

在官方的 SDK 中的下载脚本源码中有如下代码:

def _connect_attempt(self, mode='default_reset', esp32r0_delay=False):""" A single connection attempt, with esp32r0 workaround options """# esp32r0_delay is a workaround for bugs with the most common auto reset# circuit and Windows, if the EN pin on the dev board does not have# enough capacitance.## Newer dev boards shouldn't have this problem (higher value capacitor# on the EN pin), and ESP32 revision 1 can't use this workaround as it# relies on a silicon bug.## Details: https://github.com/espressif/esptool/issues/136last_error = None# If we're doing no_sync, we're likely communicating as a pass through# with an intermediate device to the ESP32if mode == "no_reset_no_sync":return last_error# issue reset-to-bootloader:# RTS = either CH_PD/EN or nRESET (both active low = chip in reset# DTR = GPIO0 (active low = boot to flasher)## DTR & RTS are active low signals,# ie True = pin @ 0V, False = pin @ VCC.if mode != 'no_reset':self._setDTR(False)  # IO0=HIGHself._setRTS(True)   # EN=LOW, chip in resettime.sleep(0.1)if esp32r0_delay:# Some chips are more likely to trigger the esp32r0# watchdog reset silicon bug if they're held with EN=LOW# for a longer periodtime.sleep(1.2)self._setDTR(True)   # IO0=LOWself._setRTS(False)  # EN=HIGH, chip out of resetif esp32r0_delay:# Sleep longer after reset.# This workaround only works on revision 0 ESP32 chips,# it exploits a silicon bug spurious watchdog reset.time.sleep(0.4)  # allow watchdog reset to occurtime.sleep(0.05)self._setDTR(False)  # IO0=HIGH, donefor _ in range(5):try:self.flush_input()self._port.flushOutput()self.sync()return Noneexcept FatalError as e:if esp32r0_delay:print('_', end='')else:print('.', end='')sys.stdout.flush()time.sleep(0.05)last_error = ereturn last_error

代码很明了了。也就是两个过程:

1.设置 DTR = 1,RTS = 0,此时 Q1 导通,Q2 截止,RST= RTS = 0,BOOT= 1,芯片掉电复位;

2.设置 DTR = 0,RTS = 1,此时 Q1 截止,Q2 导通,RST= 1,BOOT= 0,芯片重新上电;

当时我就懵了,因为按照代码,逻辑图如下

在RST上升沿时BOOT才刚下降,这是不是有点太冒险了、后来我想了想,考虑到RST有电容的存在,有充放电的过程,BOOT是没有电容的,所以下图才是正确的。

可以看到,在RST判定为1时,BOOT为0。此时就进入下载模式了。

OK,到这里ESP8266和ESP32的自动下载电路就分析完了,其实设计其他MCU的串口自动下载电路思路大抵相同,需要补充的是,CH340的辅助引脚是由上位机控制的,所以设计电路就需要了解上位机控制逻辑。

最后还有个CH340的坑。我在做好我的小设计后,本来以为能愉快的玩耍了,直到今天我做了个带电池的闹钟,才发现一个问题。

前几个小作品没有用到电池,闹钟用到了。没有电池的作品直接用USB供电,同时USB也是CH340串口。而带电池的闹钟,USB可以供电,也是CH340串口,同时也能使用电池供电。

区别就在于没有电池时,直接插上USB后,供电和通信同时进行,有电池时,插上USB后,只增加了通信。坑来了,后者由于有电池已经开始运行了,插上USB后,CH340会通过自动下载电路给ESP8266一个复位。

这时就很难瘦了,假如我代码都写好了,平时电池供电正常用着呢,这时我要电池充电了,于是插上USB,结果CH340直接给我复位了,虽然说复位并不会影响闹钟的时间、设置什么的(因为关键数据我保存到FLASH了),但是插上USB充电就复位也太坑了吧。

而且我的闹钟在响铃时,只要插上USB,立马复位,于是闹钟不响了。

说这么多,归根结底就是插上USB后,CH340和电脑连接正常,于是给RTS#一个低电平,通过下载电路,RST为0,于是芯片复位。

解决办法很简单(但我百度找了很长时间,终于找到问题所在),那就是。。。。。。。更新CH340驱动。。。。。。

噗,哈哈,没错,就是驱动问题,必须要2019年的驱动(截止2021/5/13,WCH官网最新的驱动是2019年的),所以这个问题属于WCH公司自己的锅。

我反复安装2014年版本(就是以前买各种板子淘宝卖家送的资料包里的)以及我在WCH官网下载的最新2019版,反复测试后,确定就是驱动问题。

为了避免其他问题,哪怕你没有我上面说的这个困扰,也把CH340驱动更新一下吧,说不定还有其他的坑。

贴一下下载地址,我知道你懒得找:http://www.wch.cn/downloads/CH341SER_ZIP.html

点进去就是最新驱动下载页面。

哦对了,实测CP210x系列没有这个问题,CP210x还是稳啊,目前我的CP210x驱动是2016年的。

关于ESP8266自动下载和CH340的几件事相关推荐

  1. 五级自动驾驶分级_关于确保自动驾驶汽车安全的五件事

    五级自动驾驶分级 乔纳森·奥卡拉汉(Jonathan O'Callaghan)(by Jonathan O'Callaghan) Self-driving cars, or connected and ...

  2. 关于CSGO队友不给听音乐盒,我自己用Python爬虫下载全部音乐盒的这件事

    文章目录 一.事情的详细经过 二.selenium爬取所有资源链接并下载 导入selenium库 下载浏览器驱动 配置环境变量 爬取所有链接并下载 三.听着音乐盒在沙二RushB 个人博客传送门: | ...

  3. 测试CH340C的功能,制作MicroPython ESP8266,ESP32下载器

    ▌01 CH340C USB-UART芯片 CH340C 是沁恒公司的USB-UART的转换芯片.在 CH340E USB转串口 IC测试电路 测试了CH340E的基本功能.为了制作 ESP8266以 ...

  4. ActiveX控件打包成Cab置于网页中自动下载安装

    From: http://www.iteye.com/topic/110834 makeCAB.rar (188.5 KB) [背景] 做过ActiveX控件的朋友都知道,要想把自己做的ActiveX ...

  5. ActiveX控件打包成Cab置于网页中自动下载安装 (收藏未实践测试)

    from http://blog.csdn.net/htqlhy/article/details/7937897?locationNum=12 [背景]         做过ActiveX控件的朋友都 ...

  6. ActiveX控件打包成Cab置于网页中自动下载安装(转载)

    原文出自http://www.iteye.com/topic/110834 [背景] 做过ActiveX控件的朋友都知道,要想把自己做的ActiveX控件功能放在自己的网页上使用,那么用户在客户端就必 ...

  7. ActiveX控件在IE浏览器中自动下载

    ---------------------------------------------------------------------- 1.请用MFC ActiveX ControlWizard ...

  8. 【ESP8266 快速入门】硬件:ESP12S/ESP12F最小系统设计及typeC自动下载电路设计

    [ESP8266]ESP12S/12F 最小系统设计及typeC自动下载电路设计 0.引言 ESP8266面向物联网应用的,高性价比.高度集成的 Wi-Fi MCU. 芯片ESP8266EX采用的QF ...

  9. esp32使用CH340N实现自动下载电路

    无解~~~hhh 从网上查了一上午,看了这两位大佬的文章: ESP8266/ESP32自动下载电路原理分析 - 知乎 (zhihu.com) (6条消息) 论ESP32自动下载电路_苏守坤的博客-CS ...

最新文章

  1. 机器学习入门(02)— 由感知机到神经网络的过渡进化,激活函数在神经网络中的作用
  2. python网络爬虫的基本步骤-Python网络爬虫学习手记(1)——爬虫基础
  3. 梁建章的多米诺,混合办公的未知数
  4. AWS re:Invent 2018的5大公告
  5. python批量提取pdf的数据_Python批量提取PDF文件中文本的脚本
  6. qtableview删除选中行_如何批量删除PPT备注+如何修改模板信息
  7. 微信又上线了新功能,聊天再也不会发错群了?
  8. 【Cisco NA】单臂路由+DHCP+DHCP中继+GRE Tunnel
  9. mysql 修改最大连接数
  10. MySQL 8 新特性之持久化全局变量的修改
  11. 分布式唯一id生成器的想法
  12. Fish 环境下如何安装 nvm
  13. PRD产品需求文档原型模版 Axure RP格式
  14. [Python知识图谱] 四.Python和Gephi实现中国知网合作关系知识图谱
  15. opencv的lena项目,用android studio 3.6可以运行——drawable如何引入lena图片
  16. scrapy实现爬取全书网小说到本地TXT文件
  17. iPhone越狱cydia源大全
  18. 1-65535字符集
  19. 计算机屏幕黑屏让程序继续允许,电脑软件让对方黑屏
  20. ONLYOFFICE历史版本功能的开发技术之一

热门文章

  1. EL表达式的具体作用
  2. 百度地图绘画行政区域
  3. GNU Radio系列教程(二):初级篇之GNU Radio介绍
  4. 浅聊下后台管理系统权限控制的实现思路
  5. 【JavaWeb-遇错】继承或者实现Servlet相关时总是报红或者包导不进来
  6. MATLAB画三维球体函数
  7. 关于三通道彩色图像的存储方式理解
  8. 当网红本人成为网红毒瘤:Vtuber的纸片人模式能够破解困局吗?
  9. 计算机专业笔记本配置2020,2020大学生笔记本电脑推荐
  10. 前端里的button怎么去除点击自带边框_自媒体人做视频时配音中的噪音如何用EQ和采样去除(详细介绍)...