• esp32-wrover-B的开发板烧入程序不正常


      今天自己做esp32-wrover-B的开发板,在网上采用了ch340c的自动下载电路。下载后,发现一个问题:在烧入程序后发现,烧入程序正常。但一旦掉电,再次上电后,发现开发板处于 DOWNLOAD_BOOT 模式。
    串口返回的数据时发现仅返回了一段文字:

    rst:0x1 (POWERON_RESET),boot:0x3 (DOWNLOAD_BOOT(UART0/UART1/SDIO_REI_REO_V2))
    waiting for download
    

      最后查了很久,从这里找到答案:https://blog.csdn.net/milk_paramecium/article/details/113063642
    因为IO0口被拉到了低电平。但网上资料说进入这个模式需要将IO0口手动接地,拉低电平,而我手上的这个默认就是低电平。最后将IO0口与3.3V连接后恢复正常。
      纠结电路为何直接进入DOWNLOAD_BOOT的模式。怀疑是工程底层没有配置对,然后反复测试,发现ch340未识别时,IO0是3.3V,一旦CH340被电脑识别后,然后IO0是0V。推测是CH340导致IO0不正常。最后照着这个方向去搜寻答案。发现一篇可能是答案(因为还未测试):https://zhuanlan.zhihu.com/p/145369083?from_voters_page=true
      大致总结一下:由于这个自动下载电路构成RS触发器后,

    当不同时为0或者1时:
    
    EN  = RTS
    IO0 = DTR
    

      然而进入下载模式则需要如下的序列

    1.  IO = 0; EN = 0
    2.  IO = 0; EN 0 -> 1
    

      我们看下esptool.py里下载相关的代码

            # 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
            (1)  self._setRTS(True)   # EN=LOW, chip in reset  
            //设置DTR = 1; RTS = 0, EN = 0; IO0 = 1
                time.sleep(0.1)//延时100ms
            (2)  self._setDTR(True)   # IO0=LOW
            (3)  self._setRTS(False)  # EN=HIGH, chip out of reset  
            //设置DTR = 0; RTS = 1,EN = 1; IO0 = 0
                time.sleep(0.05)/延时50ms
            (4)  self._setDTR(False)  # IO0=HIGH, done  
    

    在(2)的过程中IO0由1->0,EN由0->1的时间为多少呢?
    如图所示:

      CHIP_PU即EN,代码中23阶段之后会延时一段时间,而EN由于电容充电,电平并不会立马变为高电平,而是缓慢上升,以如上参数为例计算,同时参考芯片电气参数特性

      高电平为0.75VDD,则达到高电平按照如下公式计算:

      电容的充放电的时间要14ms,代码中延时了50ms为了等待EN由0->1。
    在(1)需要等待一段时间,让电容放电,保证EN电平下降到电平0,才能保证系统正常复位,在代码中预留了100ms的等待时间。
    我的开发板中C22为100nF充电时间为140ms。明天去试验一下是否是这个问题。
    9.14
      今天测试了一下,发现问题并不是出现在C22上,我更换了10uf,1uf,100nf。都没有使掉电跳出下载模式
    根据昨天的资料查找。发现esptool.py的代码中

          DTR RTS EN IO0  
    (1)   1   0  0   1
    (3)   0   1  1   0
    (4)   1   X  X   1
    

    第四步需要将DTR置为1,IO0置为1
    而我的原理图如下所示

    实际测试中,在测ch340c的DTR引脚
    1.在掉电后,上电去识别串口:

    2.在上电去下载,然后连接串口:

      可以发现DTR在掉电识别时和上电下载的状态是不一样的,DTR在上电后,连接串口,变成低电平,也使IO0变成0.
      最后询问同学发现是,串口连接助手中有一个选项

      对,流控,把流控选择RTS就可以了。好像选择这个可以控制ch340的RTS。
    至于为什么会使掉电再次上电串口信息流正常,下次再来研究,现在要继续调试了。

    原文借鉴:https://zhuanlan.zhihu.com/p/145369083?from_voters_page=true
    https://blog.csdn.net/milk_paramecium/article/details/113063642

  • 相关阅读:
    五分钟完成 ABP vNext 通讯录 App 开发
    .NET Conf: Xamarin专场会议3.23 开幕
    2020 年 中国.NET开发者调查报告
    推荐一个很棒的开源工作流elsa-core
    尝试使用 Visual Studio Online (Cloud IDE)
    Mongo2Go 介绍
    DevExpress作为企业赞助商加入.NET基金会
    【新书推荐】《ASP.NET Core微服务实战:在云环境中开发、测试和部署跨平台服务》 带你走近微服务开发
    云原生时代 来看看十年前李彦宏、马化腾和马云对云计算的评价
    .NET 在云原生时代的蜕变,让我在云时代脱颖而出
  • 原文地址:https://www.cnblogs.com/action0/p/15265699.html
Copyright © 2020-2023  润新知