为了测试成本更低,把 8MB 的 ESP32S3 换成了 4MB 的。上传测试程序就出现了一直刷屏重置的问题:
rst:0x3 (RTC_SW_SYS_RST),boot:0xc (SPI_FAST_FLASH_BOOT)
和
spi_flash: Detected size(4096k) smaller than the size in the binary image header(8192k). Probe failed.
我在本地使用的是 PlatformIO 作为开发环境,但是在所有基于 ESPTool 的环境中应该都适用
问题 #1
首先是 ESP32S3 在新版本 platformio 环境下的问题

这个问题在 ini 中指定 6.6.0 版本即可
[env:esp32-s3-devkitm-1]
platform = espressif32@6.6.0
问题 #2
在解决上面的问题后,又遇到了
spi_flash: Detected size(4096k) smaller than the size in the binary image header(8192k). Probe failed.
这个报错的问题.
从字面上来理解,就是一个很简单的大小不匹配的问题,尝试给这个 4MB 的单片机塞了个 8MB 的固件进去,当然会炸。于是尝试设置:
board_upload.flash_size = 4MB
board_upload.maximum_size = 4194304
问题 #3
设置后上传,这个问题就解决了,变成了新的报错…
rst:0x3 (RTC_SW_SYS_RST),boot:0xc (SPI_FAST_FLASH_BOOT)
别的错误还能看出来是怎么回事,这个就他妈告诉你是重置了…
想起来之前遇到过类似的问题,在设置分区表后解决了,于是抱着侥幸心理尝试
在官方仓库中获取默认分区表:https://github.com/espressif/arduino-esp32/tree/master/tools/partitions

由于使用的是 4MB 的芯片,于是在这里选择了 default.csv 文件。下载后放在项目根目录中:

最后在 ini 中,配置分区表:
board_build.partitions = default.csv
最终 ini 文件如下:
[env:esp32-s3-devkitm-1]
platform = espressif32@6.6.0
board = esp32-s3-devkitm-1
framework = arduino
monitor_speed = 9600
board_upload.flash_size = 4MB
board_upload.maximum_size = 4194304
board_build.partitions = default.csv
烧录启动,成功看见串口输出的东西。
当然,很多错误代码可以在文档中查到:https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-guides/fatal-errors.html