编程RF设置ESP-12-Q后无法将GPIO0置为高电平

时间:2016-05-31 10:37:56

标签: esp8266 nodemcu

我试图使用自定义编译的nodemcu图像来闪存AI-Thinker ESP-12-Q模块。当芯片第一次启动时,它会显示一条消息,说它有8mbit(1MB)闪存。在每个文档上还显示该模块具有32mbit(4MB)闪存。这就是我所做的和结果:

  • 为了消除电源问题,我使用10安培实验室电源为模块供电(当然是3.3伏)。
  • 在esp和计算机之间有一个3.3v ftdi模块。
  • 我正在使用Espressif的官方Flash下载工具v2.4。
  • 如所述,nodemcu图像转到0x00000

在编程之后,nodemcu图像esp模块运行nodemcu。我需要使用ADC通道。当我说adc.read(0)时,它会给我65535。然后按原样说到处我需要更改配置的第107个字节。要做到这一点:

  • 打开esp flash下载工具2.4
  • 转到RF InitConfig页面
  • 按默认值按钮
  • 将CrystalFreq更改为26MHz(因为芯片启动时为74880波特)
  • 将TOUT Pin Conf更改为TOUT_ADC_EN,将电压更改为3.3v
  • 不做其他改动
  • 按GenInitBin
  • 转到Flash下载页面
  • 选择esp_init_data_setting.bin文件以闪烁地址:0x3FC00
  • 按开始。一切似乎都没问题。

然后恐怖开始:当芯片启动时,我可以设法捕获像system parameter error这样的消息,然后芯片没有启动到nodemcu图像。当我检查引脚GPIO0时,电压读数大约是1.9v。该引脚上有一个10K外部上拉电阻。当电压读取时,esp无法启动到nodemcu图像。当我通过短接上拉电阻将此引脚强制为3.3v时,它会启动到nodemcu但有一些错误(我会尝试捕捉它们)。

所以问题是,我做错了什么?

编辑#1:

这是芯片的输出:

 ets Jan  8 2013,rst cause:2, boot mode:(3,0)

load 0x40100000, len 30288, room 16
tail 0
chksum 0xa5
load 0x3ffe8000, len 2268, room 8
tail 4
chksum 0x3f
load 0x3ffe88dc, len 8, room 4
tail 4
chksum 0xca
csum 0xca
system param error
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... goes on for 100 meters.

编辑#2:

我尝试加载"出厂默认设置"在SDK v1.5中定义的芯片

Flash size 32Mbit-C1:       1024KB+1024KB
boot_v1.2+.bin              0x00000
user1.2048.new.5.bin        0x01000
esp_init_data_default.bin   0x3fc000 (optional)
blank.bin                   0xfe000 & 0x3fe000

然后芯片开始正常工作。我尝试了一些AT命令,得到了预期的答案等...然后我加载了nodemcu图像。它也运作良好。然后是棘手的部分:这次我从SDK1.5中取出esp_init_data_default.bin并通过十六进制编辑器将 107th 字节更改为 0x21(33 DEC)。然后将esp_init_data_default.binblank.bin文件刷新到芯片。重新启动并检查adc读取的内容。不过,我得到了一些合理的结果。好像芯片正常。

1 个答案:

答案 0 :(得分:2)

这不是一个明确的答案,因为涉及硬件,但它可能仍然有用(评论时间太长)。

因此,首先要尝试使用允许明确设置闪光灯尺寸的闪光灯。我不知道Espressif工具,但NodeMCU社区中的很多人都很happy with esptool.py

esptool.py --port <USB-port-with-ESP8266> write_flash -fm dio -fs 32m 0x00000 <nodemcu-firmware>.bin

在确认无法正常工作(即启动无错误)并且闪存大小和堆大小看起来没问题之前,请不要尝试修改固件。

接下来,如果您使用dev分支中最近的NodeMCU固件,则可以跳过byte-107-dance,因为you can set it in Lua

adc.force_init_mode(adc.INIT_ADC)
-- now reboot