乐鑫技术交流
直播中

李丹

8年用户 1471经验值
私信 关注
[问答]

ESP-12F进入闪存模式以从Arduino IDE上传程序,激活闪存模式会导致GPIO0时钟输出怎么解决?

我正在尝试让我的 ESP-12F 进入闪存模式以从 Arduino IDE 上传程序。然而,当我尝试将 ESP-12F 置于闪存模式时,我在 GPIO0 上获得了时钟输出 (26 MHz)。如果我尝试从 Arduino IDE 上传,我会收到“错误:espcomm_upload_mem 失败”。在串行监视器上,设置为 74880 波特,我得到“ets Jan 8 2013,rst cause:2, boot mode:(1,6)”。即我无法将任何程序上传到 ESP-12F。
我的设置如下:
- 使用 AMS1117 的 3.3V 为 ESP-12F 供电。Vcc 和地之间的 100 uF 电容。
- 复位拉高 1k,按下按钮时拉至地面。100nF 电容从 - Reset 连接
到 GND,以最大限度地减少噪声。
- GPIO15 通过 2k 拉至 GND
- GPIO2 通过 10k 拉至 Vcc
- GPIO0 通过 1k 拉至 Vcc,按下按钮时拉至 GND。
- CP2102 3.3V USB 转 UART 串​​行接口模块适配器将我的笔记本电脑连接到 ESP-12。
   - GND 到 GND
   - Tx - Rx
   - Rx - Tx
让 ESP-12 进入闪光模式的步骤如下:
1. 当我给电路上电时,示波器显示 Reset 和 GPIO0 都为高电平。
2. 按住 GPIO0 上的按钮。GPIO0 降至 0V。
3. 按住重置按钮。现在复位和 GPIO0 都为 0V。
4. 释放重置按钮。GPIO0 显示一个 26MHz 的信号。DC 平均电平为 0V,AC RMS = 385mV
5. 松开 GPIO0 按钮。GPIO0 显示一个 26MHz 的信号。DC 平均电平为 2.05V,AC RMS = 630mV
我原以为 GPIO0 会返回到 3.3V,但它有一个以 2.05 VDC 为中心的时钟输出波。
如果我尝试上传程序,我会收到“错误:espcomm_upload_mem 失败”。
有什么想法吗?我有没有错误地接线?我可以尝试让 ESP-12 进入闪存模式吗?


               


                        

回帖(1)

远不及你

2024-2-6 16:27:52
这个问题的原因是,GPIO0 的状态影响 ESP8266 的启动模式 (启动模式 0:正常启动/启动模式 1:串行闪存/启动模式 2:启动并运行用户代码/启动模式 3:从 SD 卡启动),并且在如果 GPIO0 被持续地连接到地,ESP8266 将进入闪存模式 (启动模式 1)。 一旦启动模式设置为 1,ESP8266 会尝试自行从闪存启动,而不是从串行口 (UART) 启动。问题在于,由于 GPIO0 在闪存模式下被拉低,因此它会将 ESP8266 的 CPU 时钟输出到 GPIO0 引脚,并在闪存模式下启动时使它处于高速晶振状态。这导致了串行上传失败和芯片不能正常运行。为了解决这个问题,有几个不同的方法可以尝试:

1. 通过添加 10K 上拉电阻来将 GPIO0 引脚与 VCC 相连,确保在上电时保持高电平。在上传程序之前,通过按下复位按钮来切换到闪存模式。上传程序完成后,再次断电断电,从而重新开始您的自定义代码。这种方法适用于初学者和快速验证,但如果您需要频繁地切换启动模式,则不是一个实际的解决方案。

2. 使用切换开关或按钮帮助切换两种启动模式。通过将 GPIO0 连接到这些开关之一并添加适当的上拉电阻和下拉电阻,可以在上传时切换到闪存模式,然后在上传完成后返回到正常模式。这种方法需要一些电路设计和布线工作,并且需要花费更多的时间,但可以提供更好的控制以及允许频繁切换两种模式。

3. 最后,您可以考虑使用 USB 转 TTL 芯片来上传程序。 通过将 GPIO0(和 GPIO2)连接到转换器中的相应针脚,并使用转换器的 DTR 和 RTS 来控制重置和GPIO0 引脚的状态,您可以远程上传程序并启动 ESP8266 模块而无需手动切换模式。这种方法需要具有多种串口芯片控制功能的转换器,例如 CH340G 或 FTDI 芯片,并且需要一些额外的布线工作和调试,但可以节省时间并为项目提供便携性。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分