ESP8266 更新韧体

ESP8266 更新韧体

对于ESP8266的韧体类型有所了解后,接下来就是要利用工具将韧体上传至ESP8266,首先必需先将更新韧体的电路完成后,就能使用工具将韧体上传至ESP8266。

更新韧体必需要将ESP8266切换至UART0启动,之后利用命令去读、写ESP8266上的外置FLASH,因命令是公开的,所以有官方及开发者提供的更新工具,这里会大略说明一下常用的更新工具。

官方

ESP8266 DOWNLOAD TOOL

下载

官方网站下载:

下按完后后为ZIP档案自行解压缩后进到flash_download_tools_v3.4.4'目录中执行ESPFlashDownloadTool_v3.4.4.exe`:

选择ESP8266 DownloadTool后会进入程式的画面:

进入画面后依照下面步骤检查:

  • 选择依序选择档案并且输入写入的位址(Ex:boot.bin 0x0)

  • 选择Serial埠,COMx,如果你执行程式之前已经连接好ESP8266,那程式会自动选择,如果没有就到装置管理员查看

  • 设定BAUD 可依照你的状态选择,一般选择230400

  • 勾选SpiAutoSet让程式自动补齐设定(SPI SPEED/MODE/SIZE)

  • 勾选DoNotChgBin不让程式改变韧体中针整Flash相关设定,如UI上的FLASH SIZE,因为你已经选择SpiAutoSet

  • 按下START进行上传

上传之间会有一个Console视窗显示进度:

完成后会看到下图中的Console视窗已经显示到100%并且有出现提示Wrote 41943xxxxxxx....

基本上SpiAutoSet勾选后,设定值程式会自动侦测,除非你有特定需求,如:32Mbit flash,但要烧录的韧体是给8Mbit的Flash,那就要手动选择(SPI SPEED/MODE/SIZE),并且将DoNotChgBinSpiAutoSet勾选取消再进行更新即完成,另外烧录细节也可以参考安信可官方提供的:如何为 ESP 系列模组烧录固件

esptool.py

[esptool](esptool原先由Fredrik Ahlberg利用Python所开发的工具,它具有跨平台的特性,只要有安装Python 及 pySerial函数库都能运作的很正常,丹尼已在Windows、Linux、macOS都使用过,Windows使用必需要注意先安装python for windows版本,因普遍率及功能性,目前已经纳入乐鑫官方专案,esptool新版1.3已支援python 2.7与python 3。。

esptool.py v1.3 - ESP8266 ROM Bootloader Utility

positional arguments:
  {load_ram,dump_mem,read_mem,write_mem,write_flash,run,image_info,make_image,elf2image,read_mac,chip_id,flash_id,read_flash,verify_flash,erase_flash,version}
                        Run esptool {command} -h for additional help
    load_ram            将映像档载入RAM中并行执行
    dump_mem            转存记忆体资料至档案(转存ESP资料)
    read_mem            读取记忆体指定位址并存至档案
    write_mem           读取档案内容并写入至记忆体指定位址
    write_flash         将档案内容写入至SPI Flash
    run                 执行Flash里的应用程式码
    image_info          转存可执行应用映像档的标头
    make_image          从二进位档建立可执行的应用
    elf2image           从ELF档建立可执行的应用
    read_mac            从OTP ROM读取MAC位址
    chip_id             从OTP ROM读取晶片资讯
    flash_id            读取Flash出厂资讯(可透过此ID得知容量大小)
    read_flash          取读SPI Flash内容
    verify_flash        验证bin与Flash
    erase_flash         抹除SPI Flash
    version             列印出esptool版本

optional arguments:
  -h, --help            show this help message and exit
  --port PORT, -p PORT  Serial埠名称(Linux ttyxxx,macOS cu.xxx,Windows COMx)
  --baud BAUD, -b BAUD  Serial埠速度


韧体上传命令示范:


./esptool.py -p /dev/ttyUSB0 write_flash 0x00000 Ai-Thinker_ESP8266_DOUT_32Mbit_AiCloud_0.0.0.6_20170517.bin

其中-p后所接的是你的通讯埠名称(macOS以cu.命名规则,Linux以ttyXXX,Windows以COMx),韧体写入位址从0x00000开始,来源档为Ai-Thinker_ESP8266_DOUT_32Mbit_AiCloud_0.0.0.6_20170517.bin,一切顺利后就会更新完成:


./esptool.py -p /dev/cu.usbmodem5d11 write_flash 0x00000 Ai-Thinker_ESP8266_DOUT_32Mbit_AiCloud_0.0.0.6_20170517.bin Connecting... Erasing flash... Writing at 0x0007ef00... (100 %)

非官方

NodeMCU Flasher

ESP8266一开始会受欢迎也是因为有名为NodeMcu所制作的开发板,它内建支援Lua语法,可以利用Serial console进行程式的线上编写,该官方也提供一款专为NodeMcu使用的上传程式,不过它也可以使用在其他的ESP8266开发板。,主程式分为:

开启后选择你连接的Serial埠名称。

Config页面,每个firmware更新方式不同,依照官方SDK所产生出来的是多个档案并且指定位址的,要记得依照位扯选定档案后后再输入写入的位址,不过有的像安信可提供的韧体大小是符合整个flash大小,不需要分段更新,所以只要设定写入从0x00000,并且选择好档案:

选择好档案后再回到Operation页面按下Flash开始升级韧体,要记得进入UART0启动(升级模式)。

上传过程中切换至Log能看到更新韧体所进行的过程

更新一切正常后就能看到左下方图示为绿色打勾,代表已经将韧体更新成功。

注意事项

官方提供的程式已经非常久没更新,据丹尼实测结果,韧体档案超过512KBytes就会无法上传。丹尼推测更新程式应该只是针对当时SDK编译出来的程式码大小(通常都<512KBytes)进行规范,再加上一些系统设定(esp_init_data_default.bin、eagle.irom0text.bin…)是分开烧录,所以限制在512KBytes,所以,要记住,如果你的档案超过512KBytes就可能无法使用。

参考资料