[每日电路图] 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% 的处理能力留给应用编程和开发。

[每日电路图] 12、带自动烧写能力的 ESP8266 开发板制作

2、原理图介绍

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

[每日电路图] 12、带自动烧写能力的 ESP8266 开发板制作

2.1 供电电路

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

[每日电路图] 12、带自动烧写能力的 ESP8266 开发板制作

常用封装:

[每日电路图] 12、带自动烧写能力的 ESP8266 开发板制作

2.2 串口电路

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

[每日电路图] 12、带自动烧写能力的 ESP8266 开发板制作

典型封装为:SSOP-20

[每日电路图] 12、带自动烧写能力的 ESP8266 开发板制作

我们使用的电路没有那么复杂,只要电源部分加个滤波,RX 和 TX 各串一个470R 的电阻(这颗芯片偏大,还有更小一些的国产串口芯片,也非常好用)。

2.3 自动烧写电路

ESP8266工作模式

  • 下载模式:芯⽚启动时,若 IO0 为低电平,芯⽚会进⼊下载模式;
  • 运⾏模式:芯⽚启动时,若 IO0 为⾼电平,芯⽚会进⼊运⾏模式;

[每日电路图] 12、带自动烧写能力的 ESP8266 开发板制作

上图的逻辑关系如下:

  • 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 电路,充放电都是需要时间的。

[每日电路图] 12、带自动烧写能力的 ESP8266 开发板制作

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

[每日电路图] 12、带自动烧写能力的 ESP8266 开发板制作

此处,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 效果展示

[每日电路图] 12、带自动烧写能力的 ESP8266 开发板制作

[每日电路图] 12、带自动烧写能力的 ESP8266 开发板制作

附录

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

[每日电路图] 12、带自动烧写能力的 ESP8266 开发板制作

Original: https://www.cnblogs.com/zjutlitao/p/14353305.html
Author: beautifulzzzz
Title: [每日电路图] 12、带自动烧写能力的 ESP8266 开发板制作

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/554610/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 如何在电脑上配置Vue开发环境

    一,开发环境 : Node JS(npm) Visual Studio Code(前端IDE) 安装NodeJS 下载地址: nodejs中文网 Visual Studio Cod…

    技术杂谈 2023年7月11日
    094
  • 上周热点回顾(7.4-7.10)

    热点随笔: · 一大波开源小抄来袭 (削微寒)· 一题多解,ASP.NET Core应用启动初始化的N种方案[上篇] (Artech)· [开源精品] .NET Redis Cli…

    技术杂谈 2023年5月31日
    0100
  • linux用户身份与文件权限

    tips:可以将安装好的系统设置为一次快照,这样即便系统彻底崩溃了,也可以在5秒的时间内快速还原出一台全新的系统,而不用担心数据丢失 1、用户身份和能力 Linux系统的管理员之所…

    技术杂谈 2023年7月11日
    097
  • Java开发之JavaWeb速成 —- 第二部分

    JavaWeb速成 前言 以最少时间,快速学完各知识点。知识点围绕概念,作用,使用方法来写,适合有javaweb基础的人复习 旨在快速入手/复习,放实例显得冗余,所以实例代码会以截…

    技术杂谈 2023年7月24日
    088
  • XSS 和 CSRF简述及预防措施

    java;gutter:true; 在 Web 安全领域中,XSS 和 CSRF 是最常见的攻击方式。本文将会简单介绍 XSS 和 CSRF 的攻防问题。</p> &l…

    技术杂谈 2023年5月31日
    0101
  • 小熊飞桨练习册-06Paddlex垃圾分类

    文件说明 文件 说明 train.py 训练程序 quant.py 量化程序 prune.py 裁剪程序 test.py 测试程序 infer.py 预测程序 onekey.sh …

    技术杂谈 2023年7月23日
    0141
  • RAID磁盘阵列技术

    RAID磁盘阵列技术 1、RAID概述 RAID(Redundant Array of Independent Disk),从字面意思讲的是基于独立磁盘的具有冗余的磁盘阵列,其核心…

    技术杂谈 2023年6月21日
    0100
  • 关于微服务

    原创不易,求分享、求一键三连 微服务会让我们的应用变多,并且为了高可用一个服务会在线上部署多台,那么进行服务调用就存在节点之间的负载均衡和服务发现,负载均衡是为了让各个节点的负载尽…

    技术杂谈 2023年6月1日
    0120
  • 自己定义ViewGroup实现仿淘宝的商品详情页

    近期公司在新版本号上有一个须要。 要在首页加入一个滑动效果, 详细就是仿照X宝的商品详情页, 拉到页面底部时有一个粘滞效果, 例如以下图 X东的商品详情页,假设用户继续向上拉的话就…

    技术杂谈 2023年5月31日
    089
  • 技术管理进阶——跨级管理/汇报

    原创不易,求分享、求一键三连 Hi,各位亲爱的小伙伴,小钗公号遵循日复盘->周复盘->月复盘->季度复盘->年总结策略,所以某类型文章到后期才会成体系。 今…

    技术杂谈 2023年6月1日
    0138
  • python数据可视化-matplotlib入门(6)-从文件中加载数据

    前几篇都是手动录入或随机函数产生的数据。实际有许多类型的文件,以及许多方法,用它们从文件中提取数据来图形化。 比如之前python基础(12)介绍打开文件的方式,可直接读取文件中的…

    技术杂谈 2023年7月25日
    0124
  • 2020 年你读过的书中,印象最深刻的 3 本是什么

    《过得刚好》、《真希望我父母读过这本书》、《CSS世界》。 这是亚马逊 kindle 发起的一个话题活动。我把自己的留言在博客中也记录一下。 从这本书了解了郭德纲。当年反对郭德纲的…

    技术杂谈 2023年7月10日
    099
  • Java通用树结构数据管理

    1、前言 ​ 树结构是一种较为常见的数据结构,如功能权限树、企业的组织结构图、行政区划结构图、家族谱、信令消息树等,都表现为树型数据结构。 ​ 树结构数据的共性是树节点之间都有相互…

    技术杂谈 2023年6月21日
    0111
  • ML/NLP中的一些术语/公式备忘录

    CCGcombinatory categorial grammar组合范畴语法 在数学中,误差函数(也称之为高斯误差函数,error function or Gauss error…

    技术杂谈 2023年6月21日
    0113
  • RISCV学习-1 RISCV模拟器

    最近有个项目需要用到RISCV开发板,没拿到开发板之前,先尝试配置一个虚拟机环境1、配置riscv-toolchain git clone https://github.com/r…

    技术杂谈 2023年6月1日
    090
  • Ubuntu 18.04安装sysv-rc-conf

    sudo nano /etc/apt/sources.list &#x52A0;&#x5165;deb http://archive.ubuntu.com/ubun…

    技术杂谈 2023年7月11日
    0102
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球