十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

ESP01 固件烧录全攻略:Flash Download Tool 从入门到精通

ESP01 固件烧录全攻略:Flash Download Tool 从入门到精通 ESP01 这个小模块玩过物联网的应该都不陌生——巴掌大一块价格便宜到离谱插上就能连 WiFi。但很多人拿到手第一件事就卡住了这玩意儿出厂自带的 AT 固件版本太老或者干脆是空的连串口发 AT 指令都没反应。更让人头疼的是网上教程五花八门有的让你装 Arduino IDE有的让你用 Python 脚本还有的甩给你一堆命令行参数看完直接劝退。其实乐鑫官方早就提供了一个专门用来烧录固件的工具——Flash Download Tool。这东西是图形界面的不用写代码不用配环境选好文件、点一下 START 就完事。我前后用这个工具刷过几十片 ESP01 和 ESP8266 模组从最早的 V1.2 到现在的 V1.5.1踩过的坑基本能写一本小册子。这篇内容就把整个流程拆开揉碎讲清楚从工具下载、接线、参数配置到常见报错处理一步步来。不管你是刚接触 ESP8266 的新手还是刷固件刷到怀疑人生的老玩家照着走一遍应该能少走不少弯路。1. 先搞清楚为什么要用官方工具而不是其他方案1.1 几种常见烧录方式的对比在动手之前有必要先弄明白市面上几种烧录方式各自的适用场景。很多人一上来就搜ESP8266 刷固件教程结果搜到的是用 esptool.py 命令行、Arduino IDE 或者 NodeMCU Flasher 的方案照着做了一半发现各种报错最后不了了之。我把常见的几种方式列出来对比一下烧录方式操作难度适用场景主要缺点Flash Download Tool低批量烧录、AT 固件、出厂固件仅 Windowsesptool.py中高自动化脚本、Linux/Mac需要 Python 环境参数多Arduino IDE中自己编译的固件编译慢不适合烧官方 ATNodeMCU Flasher低NodeMCU 固件年久失修兼容性差Flash Download Tool 最大的优势在于它是乐鑫自己出的跟 ESP8266 的 ROM 引导程序配合得最好。你不需要关心什么波特率握手、什么 flash 模式工具界面上选好参数就行。而且它支持多路烧录如果你要批量生产插一个 USB Hub 可以同时刷好几片效率比命令行高得多。1.2 ESP01 这个模块的特殊性ESP01 跟 ESP12、ESP07 这些模组不太一样它引脚少得可怜只有 8 个引脚VCC、GND、TX、RX、CH_PD、RST、GPIO0、GPIO2。没有 USB 接口没有复位按键也没有 flash 按键。这意味着你没法像 NodeMCU 开发板那样一键进入下载模式必须手动控制 GPIO0 和 RST 的电平。另外 ESP01 的 flash 容量通常是 1MB8Mbit这个容量决定了你能刷什么固件。AT 固件有多个版本有 1MB 的、2MB 的、4MB 的选错了要么刷不进去要么刷进去跑不起来。这一点后面会详细说。还有一点ESP01 的供电要求比较苛刻必须稳定在 3.3V电流至少要能提供 300mA 以上。很多人用 USB 转 TTL 模块上的 3.3V 引脚直接供电结果一烧录就失败就是因为供电电流不够。这个坑后面会专门讲。2. 工具和固件的获取别从乱七八糟的地方下载2.1 Flash Download Tool V1.5.1 的下载Flash Download Tool 在乐鑫官网的下载页面就能找到搜索Flash Download Tool就能定位到。V1.5.1 是目前比较稳定的版本支持 ESP8266 和 ESP32 全系列。下载下来是一个压缩包解压后直接运行 exe 就行不需要安装。注意下载的时候认准乐鑫官方域名不要从第三方网盘或者论坛附件下载。我见过有人从某论坛下载的汉化版结果里面捆绑了乱七八糟的东西刷完固件模块直接变砖。解压后的文件夹里通常包含这几个文件flash_download_tool_1.5.1.exe主程序configure/配置文件目录doc/说明文档双击 exe 后会先弹出一个芯片选择窗口让你选 ESP8266 还是 ESP32选完才进入主界面。2.2 AT 固件的版本选择AT 固件是乐鑫官方提供的、让 ESP8266 可以通过串口指令控制 WiFi 的固件。它的版本号跟 ESP8266 的 SDK 版本是对应的。截至我写这篇内容的时候比较常用的 AT 固件版本有V1.7.4基于 ESP8266_NONOS_SDK 3.0支持 1MB flashV2.2.1基于 ESP8266_RTOS_SDK功能更多但体积也更大V1.5.1老版本但胜在稳定1MB flash 刚好够用对于 ESP01 这种 1MB flash 的模块我建议优先选V1.7.4 的 1MB 版本。如果你手头的 ESP01 是早期批次flash 可能只有 512KB那就只能刷更老的版本了。固件文件通常是一个 bin 文件比如ESP8266_AT_Bin_V1.7.4.zip解压后会有多个 bin 文件对应不同的 flash 大小。你需要根据自己模块的实际容量选择对应的文件。提示怎么确认 ESP01 的 flash 大小最靠谱的方法是看模块上 flash 芯片的丝印。常见的 1MB flash 芯片型号是 25Q802MB 是 25Q164MB 是 25Q32。如果丝印磨掉了看不清那就只能试先按 1MB 刷不行再换。2.3 USB 转 TTL 模块的准备ESP01 没有 USB 接口必须通过 USB 转 TTL 模块跟电脑通信。常见的模块有 CH340、CP2102、FT232 这几种芯片方案。我个人的经验是CH340便宜但驱动兼容性一般Windows 10 以上有时候要手动装驱动CP2102稳定性好驱动安装简单推荐FT232最稳但价格贵假货多不管你用哪种一定要确保模块上有3.3V 和 5V 两个供电引脚并且有一个跳线帽或者开关能切换输出电压。ESP8266 是 3.3V 器件接 5V 会直接烧掉。另外模块的 TX 要接 ESP01 的 RX模块的 RX 要接 ESP01 的 TX这个交叉关系千万别搞反。我见过有人接反了之后一直说模块没反应查了半天才发现是 TX 对 TX 了。3. 接线ESP01 进入下载模式的关键操作3.1 正常模式和下载模式的引脚电平差异ESP8266 芯片内部有一个 ROM 引导程序上电的时候它会检查 GPIO0、GPIO2、GPIO15 这几个引脚的电平来决定是进入正常运行模式还是下载模式。对于 ESP01 来说关键就是 GPIO0正常运行模式GPIO0 接高电平或悬空下载模式GPIO0 接低电平GND所以刷固件的时候必须让 GPIO0 在复位瞬间保持低电平。ESP01 没有按键只能手动接线。3.2 具体接线方案我画一个接线表照着接就行ESP01 引脚接到哪里说明VCC3.3V 电源必须 3.3V电流 ≥300mAGNDGND共地TXUSB 转 TTL 的 RX交叉连接RXUSB 转 TTL 的 TX交叉连接CH_PD3.3V使能引脚必须拉高RST悬空或接复位电路下载时先接 GND 再断开GPIO0GND下载模式必须拉低GPIO2悬空保持悬空即可实际操作的时候我习惯用一个面包板加几个杜邦线把 GPIO0 和 RST 各引出一根线方便手动控制。3.3 进入下载模式的操作顺序这是整个流程里最容易出错的一步。正确的操作顺序是先把 GPIO0 接到 GND确认 CH_PD 已经接到 3.3V给 VCC 上电或者把 RST 短暂接一下 GND 再松开此时模块就进入了下载模式如果你先上电再拉低 GPIO0模块已经跑起来了不会进入下载模式。这时候需要把 RST 拉低一下再松开让模块复位重新检测引脚电平。注意有些 USB 转 TTL 模块的 3.3V 输出电流不够上电后模块会反复重启串口会看到一堆乱码。遇到这种情况换一个供电能力强的模块或者单独用一个 3.3V 稳压电源给 ESP01 供电。4. Flash Download Tool 的参数配置详解4.1 主界面各个选项的含义打开 Flash Download Tool选 ESP8266 之后你会看到这样一个界面SPI SpeedSPI 通信速度默认 40MHz 就行SPI ModeQIO 或 DIOESP01 一般选 DIOFlash Sizeflash 容量选 1MBCOM串口号选你 USB 转 TTL 对应的那个BAUD波特率默认 115200可以调到 460800 加快速度下面是一个文件列表区域每一行可以添加一个 bin 文件并指定烧录的起始地址。4.2 固件文件的地址分配AT 固件的 bin 文件不止一个每个文件要烧到不同的地址。以 V1.7.4 的 1MB 版本为例文件起始地址说明boot_v1.7.bin0x00000引导程序user1.1024.new.2.bin0x01000用户程序esp_init_data_default_v08.bin0xFC000初始化数据blank.bin0x7E000空白填充blank.bin0xFE000空白填充注意blank.bin要添加两次地址不一样。这个地址分配是乐鑫官方文档里规定的不能随便改。填错地址的后果就是模块刷完不启动或者启动后不断重启。4.3 波特率的选择与稳定性波特率越高烧录越快。115200 烧 1MB 大概要 30 秒左右460800 能缩短到 10 秒以内。但波特率越高对 USB 转 TTL 模块的质量要求也越高。CH340 在 460800 下有时候会丢数据CP2102 一般没问题。我的建议是第一次刷的时候用 115200确认流程没问题了再尝试提高波特率。如果烧录过程中报同步失败或者校验错误先把波特率降回 115200 再试。5. 烧录过程中最常见的几个报错及处理5.1 Failed to connect to ESP8266: Timed out waiting for packet header这个报错出现的频率最高基本占了所有失败案例的一半以上。它的意思是工具尝试跟模块握手但模块没有回应。原因通常有这几个GPIO0 没有拉低模块没进入下载模式检查接线供电不足模块上电后反复重启换供电方案TX/RX 接反检查交叉连接串口号选错在设备管理器里确认 COM 号模块本身损坏换一个模块试试排查的时候按这个顺序来先确认 GPIO0 和 RST 的操作顺序对不对再量一下 VCC 电压是不是稳定的 3.3V然后检查 TX/RX 有没有接反最后换模块。5.2 Serial data error 或 Invalid head of packet这个报错通常是通信质量的问题可能的原因波特率太高USB 转 TTL 模块跟不上杜邦线太长或者接触不良电源纹波太大解决办法很简单降波特率、换短线、加滤波电容。我一般会在 ESP01 的 VCC 和 GND 之间并一个 100uF 的电解电容能明显改善稳定性。5.3 烧录成功但模块不工作有时候工具提示FINISH了但模块上电后串口没有任何输出。这种情况一般是固件版本跟 flash 容量不匹配比如 1MB 的模块刷了 2MB 的固件地址填错检查每个 bin 文件的起始地址flash 模式选错ESP01 一般用 DIO如果选了 QIO 可能不启动遇到这种情况先确认固件版本再核对地址表最后试试把 SPI Mode 改成 DIO。6. 刷完之后怎么验证固件是否正常工作6.1 用串口助手发 AT 指令刷完固件后把 GPIO0 断开悬空或接高电平重新上电模块就进入正常运行模式了。这时候打开串口助手比如 SSCOM、PuTTY波特率设成 115200发送AT如果返回OK说明固件跑起来了。接着可以发几个常用指令测试ATGMR查看固件版本信息ATCWMODE1设置成 Station 模式ATCWLAP扫描附近的 WiFiATCWJAPSSID,password连接 WiFi如果AT有返回但ATCWLAP没反应可能是天线部分有问题检查一下 ESP01 的 PCB 天线周围有没有金属遮挡。6.2 常见 AT 指令返回异常的处理有时候发AT返回的是乱码这通常是波特率不对。AT 固件默认波特率是 115200但有些版本可能是 74880 或 9600。可以逐个试一下。如果返回ERROR说明指令格式不对注意 AT 指令后面要加回车换行\r\n很多串口助手默认只发\n需要在设置里改成发送\r\n。6.3 固件版本确认与后续升级用ATGMR可以看到当前固件的版本号和编译时间。如果版本太老有些新指令不支持可以考虑刷更新的版本。升级的流程跟第一次刷一样只是固件文件换成新版本的。提示升级之前最好把原来的固件备份一下万一新固件有问题还能刷回去。备份的方法是用 Flash Download Tool 的读取功能不过这个功能在 V1.5.1 里藏得比较深需要先切换到Develop模式才能看到。7. 一些提高成功率的实操经验7.1 供电是重中之重我刷 ESP01 失败的经历里至少有一半是供电问题。USB 转 TTL 模块上的 3.3V 引脚标称能输出 500mA但实际上很多模块用的是 AMS1117 稳压芯片压差大、发热严重带 ESP01 这种瞬时电流能到 300mA 的负载很吃力。我的做法是单独用一个 3.3V 稳压电源给 ESP01 供电USB 转 TTL 只负责通信不负责供电。这样成功率能提高到九成以上。7.2 接线要短、要牢杜邦线看起来方便但接触电阻大尤其是那种便宜的排线用几次就松了。我后来改用焊接的方式把线直接焊在 ESP01 的引脚上稳定性好很多。如果非要用杜邦线尽量选短一点的20cm 以内。7.3 先测试再批量如果你要批量刷几十片先拿一片出来完整走一遍流程确认参数没问题了再批量操作。批量的时候可以用 USB Hub 扩展多个串口Flash Download Tool 支持同时烧录多个模块每个模块对应一个 COM 口。7.4 记录每次成功的参数我习惯把每次成功烧录的参数记下来包括固件版本、地址分配、波特率、SPI 模式。下次刷同样的模块直接照抄省得重新试。这个习惯帮我省了很多时间尤其是在刷不同批次的模块时参数可能略有差异。7.5 遇到问题先降速不管是连接超时还是校验错误第一反应应该是把波特率降到 115200。大部分通信问题都能通过降速解决。如果降速还不行再检查接线和供电。8. 关于 ESP8266 固件的一些延伸话题8.1 AT 固件和 NodeMCU 固件的区别AT 固件是指令式的你通过串口发指令控制它它本身不跑你的代码。NodeMCU 固件是脚本式的里面内置了 Lua 解释器你可以直接写 Lua 脚本上传运行。两者用途不同AT 固件适合搭配单片机使用NodeMCU 适合独立开发。8.2 固件安全的一点常识烧录固件的时候Flash Download Tool 默认是不加密的。如果你的产品要量产可以考虑启用 flash 加密功能防止固件被读取。不过 ESP8266 的加密功能比较有限ESP32 系列支持得更好。对于个人玩票来说加密不是必须的。8.3 固件烧录与云端平台的配合很多人刷 AT 固件是为了让 ESP8266 连接云端平台比如通过 MQTT 协议上传数据。AT 固件本身支持 TCP/UDP 通信你可以在单片机里实现 MQTT 协议也可以刷支持 MQTT 的定制固件。这块内容展开就多了以后有机会再单独聊。8.4 从 ESP8266 过渡到 ESP32如果你已经玩熟了 ESP8266想升级到 ESP32烧录流程其实差不多Flash Download Tool 同样支持。区别在于 ESP32 的固件文件更多地址分配更复杂而且 ESP32 支持双核和蓝牙功能强很多。乐鑫的开发文档里对 ESP32-S3 这些新芯片有详细说明感兴趣可以去看。说到底刷固件这件事本身不难难的是第一次做的时候不知道哪里会出问题。把供电、接线、参数这三块搞定了剩下的就是熟练度的问题。我刚开始刷的时候一片 ESP01 折腾了一下午现在基本上两分钟搞定一片。希望这篇内容能帮你省下那一下午的时间。
返回列表