[每日电路图] 12、带自动烧写能力的 ESP8266 开发板制作
前言
ESP8266 是乐鑫公司面向物联网应用的高性价比、高度集成的 WiFi MCU。乐鑫靠这颗芯片扭转了 WiFi SOC 的市场格局,甚至加速了国内智能家居产业的爆发。也因此乐鑫上市科创板受投资者看好,目前总市值达106.04亿人民币(最近一年下跌,购买需谨慎)。本文介绍如何用 KiCad 设计一个 ESP8266 最小开发板。
1、芯片先关信息
- ESP8266EX 集成了 32 位 Tensilica 处理器、标准数字外设接口、天线开关、射频 balun、功率放大器、低噪放大器、过滤器和电源管理模块等,仅需很少的外围电路,可将所占 PCB 空间降低。
- ESP8266EX 专为移动设备、可穿戴电子产品和物联网应用而设计,通过多项专有技术实现了超低功耗。ESP8266EX 具有的省电模式适用于各种低功耗应用场景。
- ESP8266EX 内置超低功耗 Tensilica L106 32 位 RISC 处理器,CPU 时钟速度最高可达 160 MHz,支持实时操作系统 (RTOS) 和 Wi-Fi 协议栈,可将高达 80% 的处理能力留给应用编程和开发。

2、原理图介绍
我们这里直接采用 ESP-12F 模块来设计开发板,会简单不少,原理图如下:

2.1 供电电路
供电采用 ASM1117-3.3,能够将USB的 5V 转 3.3V。除此之外,我还用了一个 ASM1117-5.0 来产生 5V 的稳压,供其他外围电路使用(如舵机、马达等)。该芯片的参数如下:

常用封装:

2.2 串口电路
ESP8266 烧写和调试一般都是用串口的,因此我们开发板上需要集成一个串口电路,选择一颗比较便宜的:CH340。其典型电路:

典型封装为:SSOP-20

我们使用的电路没有那么复杂,只要电源部分加个滤波,RX 和 TX 各串一个470R 的电阻(这颗芯片偏大,还有更小一些的国产串口芯片,也非常好用)。
2.3 自动烧写电路
ESP8266工作模式
- 下载模式:芯⽚启动时,若 IO0 为低电平,芯⽚会进⼊下载模式;
- 运⾏模式:芯⽚启动时,若 IO0 为⾼电平,芯⽚会进⼊运⾏模式;

上图的逻辑关系如下:
- DTR = 0,RTS = 0,此时Q1截止,Q2截止,EN = 1,IO0 = 1;
- DTR = 0,RTS = 1,此时Q1截止,Q2导通,EN = 1,IO0 = DTR = 0;
- DTR = 1,RTS = 0,此时Q1导通,Q2截止,EN = RTS = 0,IO0 = 1;
- DTR = 1,RTS = 1,此时Q1截止,Q2截止,EN = 1,IO0 = 1;
显然,这种逻辑关系下 EN 和 IO0 不可能同时为 0
然而,ESP8266 进入下载模式却需要如下条件:
- EN = 0,IO0 = 0,ESP8266 芯片掉电复位;
- EN = 1,IO0 = 0,保持 IO0 为低电平重新上电
此时要看下 esp8266 的下载烧录脚本(esptool.py):
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/136
last_error = None
# If we're doing no_sync, we're likely communicating as a pass through
# with an intermediate device to the ESP32
if 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=HIGH
self._setRTS(True) # EN=LOW, chip in reset
time.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 period
time.sleep(1.2)
self._setDTR(True) # IO0=LOW
self._setRTS(False) # EN=HIGH, chip out of reset
if 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 occur
time.sleep(0.05)
self._setDTR(False) # IO0=HIGH, done
for _ in range(5):
try:
self.flush_input()
self._port.flushOutput()
self.sync()
return None
except FatalError as e:
if esp32r0_delay:
print('_', end='')
else:
print('.', end='')
sys.stdout.flush()
time.sleep(0.05)
last_error = e
return last_error
其中:
- 利用 RTS 控制 EN 或 nRST,因为它们都是低电平触发芯片复位;
- 利用 DTR 控制 IO0,低电平启动则进入下载模式;
# ie True = pin @ 0V, False = pin @ VCC.
注意,此处 True 为低电平,False 为高电平
程序解析如下:
self._setDTR(False) # IO0=HIGH
self._setRTS(True) # EN=LOW, chip in reset
.
设置 DTR = 1,RTS = 0,此时 Q1 导通,Q2 截止,EN = RTS = 0,IO0 = 1,芯片掉电复位;
time.sleep(0.1)
延时 100ms,为了确保 EN 为低电平,因为 EN 附近有一个 RC 电路,充放电都是需要时间的。

例如低电平为 0.25VCC,则由高电平放电至低电平需要的时间可按如下公式计算:

此处,t ≈ 0.29ms,延时 100ms 绰绰有余
self._setDTR(True) # IO0=LOW
self._setRTS(False) # EN=HIGH, chip out of reset
.
设置 DTR = 0,RTS = 1,此时 Q1 截止,Q2 导通,EN = 1,IO0 = 0,芯片重新上电,由于 IO0 为低电平,芯片进入下载模式;
time.sleep(0.05)
延时 50ms,为了确保 EN 为高电平:(高电平认为 0.75V,用上面公式计算,t ≈ 1.39ms,延时 50ms 绰绰有余)
self._setDTR(False) # IO0=HIGH, done
设置 DTR = 1,RTS = 1,此时 Q1 导通,Q2 导通,EN = 1,IO0 = 1,确保下载完成后再复位芯片正常运行。
补充一下,不点击下载按钮的话,实际测试 DTR 和 RTS 均为高电平,也就是说不会影响 ESP8266 芯片的正常运行。
3、PCB 效果展示


附录
[1]. 乐鑫官网
[2]. CSDN ESP8266 自动烧录原理分析
- : 希望这个简单的小 DEMO 能帮助你快速上手画 ESP8266 最新开发板 ~
- 后续还有更多实用 IoT 技术文章~

[每日电路图] 12、带自动烧写能力的 ESP8266 开发板制作的更多相关文章
- 【OpenWRT】【RT5350】【二】烧写OpenWrt到RT5350开发板
烧写bin文件到开发板的方式有很多种,我采用的是通过web页面直接上传文件的方式 首先通过浏览器登陆路由器(192.168.1.1),作者的开发板已经烧好了OpenWrt并且可以通过Luci登陆,所以 ...
- 使用JLink间接烧写S3C2410、S3C2440开发板Nor、Nand Flash的方法
1. 简要说明 JLink的调试功能.烧写Flash的功能都很强大,但是对于S3C2410.S3C2440的Flash操作有些麻烦:烧写Nor Flash时需要设置SDRAM,否则速率很慢:烧写Nan ...
- 手把手教你写Kconfig---基于tiny4412开发板
转自:http://blog.csdn.net/morixinguan/article/details/54744237 今天,我就来教大家写写最简单的Kconfig,什么是Kconfig? 我们配置 ...
- 1_jz2440在linux下烧写裸机程序
常用的烧写方法有: 1.使用并口工具烧写:接线(参考百问网JZ2440V2开发板使用手册),使用oflash烧写(速度比较慢),可烧写.bin文件,从新上电观察效果.可烧写u_boot. 2.使用op ...
- 【分享】4412开发板POP烧写ubuntu出错,如何挂载emmc分区解决方法
本文转自:http://bbs.topeetboard.com 平台:4412精英版系统:ubuntu系统 按照教程烧写ubuntu文件系统,TF卡和EMMC分区都完成(总之之前的操作试了几遍都是没问 ...
- 迅为iTOP-4412开发板Ubuntu操作系统烧写方法
本文转自:http://www.topeetboard.com Ubuntu系统烧写硬件平台:iTOP4412开发板 需要准备:串口线.读卡器.一张SD卡最好是2G(自备).另外一张卡(大于等于2G都 ...
- MDK972-EK开发板裸调试设置和裸机程序烧写(转)
硬件平台:MDK972-EK开发板编译调试软件:KEIL uVision4仿真工具:JLINK V7/V8 本例子从串口输出信息,如图: KEIL uVision4调试设置如图所示: ...
- Quartus 11生成pof文件在AS烧写之后,程序无法启动
1. 首先配置成AS,生成.pof文件,选择上面的图标Device 2. 选择Device and Pin Options... 3. 进入配置界面,选择如下 4. 进入下载界面,烧写.pof文件,开 ...
- F28379D烧写双核程序(在线&离线)
烧写双核程序前需知在分别对F28379D的CPU1和CPU2两个核进行烧写程序时,需要在CCS中建立两个工程,独立编写两个核的程序.如controlSUITE中提供的双核程序例程: 1. 在线1.1 ...
随机推荐
- Centos7 搭建openldap完整详细教程(真实可用)
最近,由于公司需求,需要搭建openldap来统一用户名和密码,目前市面上几乎所有的工具都支持ldap协议,具体ldap的介绍这里就不详细说明了,这里主要记录一下如果部署openldap来实现Ldap ...
- [leetcode]54. Spiral Matrix2生成螺旋数组
import java.util.Arrays; /** * Created by lvhao on 2017/7/6. * Given an integer n, generate a square ...
- ESP32 BLE蓝牙 微信小程序通信发送大于20字符数据
由于微信小程序只支持BLE每次发送数据不大于20个字节,ESP32则有经典蓝牙.低功耗蓝牙两种模式. 要解决发送数据大于20个字节的问题,最简单实用的方式就是分包发送.如下图所示: 1.什么起始字符和 ...
- docker配置mysql实现主从同步问题
主从同步遇到 Got fatal error 1236 from master when reading data from binary log: 'Could not find first log ...
- 【分布式锁】Redis实现可重入的分布式锁
一.前言 之前写的一篇文章<细说分布式锁>介绍了分布式锁的三种实现方式,但是Redis实现分布式锁关于Lua脚本实现.自定义分布式锁注解以及需要注意的问题都没描述.本文就是详细说明如何利用 ...
- QtCreator使用技巧
快捷键 "F4" 在同名的头文件和源程序文件之间切换 "F2" 跟踪光标下的符号,若是变量,可以跟踪到变量声明的地方:若是函数体或函数声明,可以在两者之间切换. ...
- [ABP教程]第五章 授权
原文档 地址: Web Application Development Tutorial - Part 5: Authorization 关于此教程 在这个教程系列中,您将构建一个基于ABP的Web应 ...
- SpringCloud --服务调用Feign
介绍 服务间通信简介 一个系统可以由不同的微服务构成,比如一个电商系统可以由订单服务.商品服务.用户服务等共同组成. 这些服务相互独立,但又相互依赖.由于它们相互依赖,所以需要通过通信的方式来进行相互 ...
- Kali Debian 修改时区
1.KaliDebian默认读取时区文件是/etc/localtime(重建软连接,达到修改时区目的) 2./etc/localtime是个软连接,连接到时区文件/usr/share/zoneinfo ...
- oracle 11g 安装与卸载
安装 点击是,这是位数不一致,但可用. 桌面类――这种安装方式一般适用于台式机和笔记本.它包含一个最小数据库和最低的配置需求. 服务器类――这种安装方式适用于服务器,例如,它会向您提供数据中心和用于支 ...