本帖最后由 XCray 于 2022-6-20 15:51 编辑
这两天想折腾一下ble,拿出一个esp32模块,按照以往的经验编译好固件后使用esphome-flasher工具烧写,不料失败了!
失败的原因挺恶心的,是因为github被墙,而烧写过程中需要从github下载几个很小的文件。
虽然我对gc党很尊敬,但这种连github都要墙的做法实在让人恼火!
为了这点事搬梯子有点不值当的,只好翻了一下ESPHome-Flasher的源码,终于找到了解决方案。
很显然,我们可以利用ESPressif官方的烧写工具完成烧写,只需要知道ESPHome-Flasher从github上下载了哪几个文件、各自对应的烧写地址就可以了。
答案:
1、在文件esphomeflasher/common.py里:
addr_filename.append((0x1000, bootloader))
addr_filename.append((0x8000, partitions))
addr_filename.append((0xE000, otadata))
addr_filename.append((0x10000, firmware))
2、在文件esphomeflasher/const.py里:
ESP32_DEFAULT_OTA_DATA = 'https://raw.githubusercontent.com/espressif/arduino-esp32/1.0.0/tools/partitions/boot_app0.bin'
ESP32_DEFAULT_BOOTLOADER_FORMAT = 'https://raw.githubusercontent.com/espressif/arduino-esp32/' \
'1.0.4/tools/sdk/bin/bootloader_$FLASH_MODE$_$FLASH_FREQ$.bin'
ESP32_DEFAULT_PARTITIONS = 'https://raw.githubusercontent.com/esphome/esphomeflasher/master/partitions.bin'
3、好了,固件是自己编译的,其他三个文件的链接和烧写地址都有了,借助github下载加速器就可以下载,然后用espressif官方的烧写工具烧写即可,以后就可以ota了
4、三个bin文件附在这儿,需要的自取
bins.rar
(10.28 KB, 下载次数: 354)
~~~~~~~~~~~~~~~~~~~~~
原理或原因解释:
esp32的整个flash被分为4个分区,esphome编译生成的固件只是其中之一。
所以第一次烧写必须把4个分区(分别对应一个bin文件)都写进去才行,以后OTA升级就不涉及这个问题了。
8266不一样,那个更简单,只有1个bin文件(可以理解成2个分区是地位相同的,每次OTA都使用其中之一,每次OTA来回倒着用)。
~~~~~~~~~~220401~~~~~~~~~和愚人节无关~~~
注:新版ESPHome已经提供了非常好用的webflash,直接在浏览器里操作就可以了,本贴所述方法也就没必要了
~~~~~~~~~~220612再补充~~~~~~~~~
esp32有多个变种,本贴提到的bin文件只适用于标准的esp32,对于s2、s3、c3等变种,需要其对应的bin文件!!!!
处理器架构都变了,bootloader肯定得变!直接无脑乱用bin文件肯定是不行的呀!
参考:GitHub - esphome/esp-web-tools: Open source tools to allow working with ESP devices in the browser
另外,每种板子上的flash参数(SPI Mode)、晶振的频率(SPI Speed)可能不一样,必须正确选择对应的bootloader.bin文件!
|