ESP32-S3-WROOM-1-N16R8 编译 CircuitPython 固件

CircuitPython 主要由 Adafruit 维护,但是仅支持他们销售的开发板,并且 Adafruit 在撰写本文时不销售任何 ESP32-S3-WROOM-1-N16R8 板。

如果你没有设置正确的 ESP-IDF 配置,开发板将无法成功启动并持续抛出如下异常:

ESP-ROM:esp32s3-20210327
Build:Mar 27 2021
rst:0xc (RTC_SW_CPU_RST),boot:0x2b (SPI_FAST_FLASH_BOOT)
Saved PC:0x40378514
SPIWP:0xee
mode:DIO, clock div:2
load:0x3fcd0108,len:0x132c
load:0x403b6000,len:0xb80
load:0x403ba000,len:0x2ea8
entry 0x403b6238

设置开发板编译参数

  1. cp -r espressif_esp32s3_devkitc_1_n8r2 espressif_esp32s3_devkitc_1_n16r8 (Adafruit 不支持 N16R8, 所以选择一个带有 PSRAM 的 ESP32-S3 板子更容易修改)
  2. 编辑 mpconfigboard.h
    • 修改 MICROPY_HW_BOARD_NAME: ESP32-S3-DevKitC-1-N8R2ESP32-S3-DevKitC-1-N16R8
  3. 编辑 mpconfigboard.mk
    • 修改 USB_PRODUCT: ESP32-S3-DevKitC-1-N8R2ESP32-S3-DevKitC-1-N16R8
    • 修改 CIRCUITPY_ESP_FLASH_MODE: dioqio (DIO to QIO for Flash)
    • 修改 CIRCUITPY_ESP_FLASH_SIZE: 8MB16MB (8MB to 16MB for Flash)
  4. 编辑 sdkconfig
    • 修改 CONFIG_SPIRAM_MODE_QUAD=yCONFIG_SPIRAM_MODE_OCT=y (QUAD to OCTAL for PSRAM)
    • 修改 CONFIG_SPIRAM_SIZE: 20971528388608 (2MB to 8MB for PSRAM)

以上配置基于 ESP32-S3 文档,主要修改 flash 大小和 flash 模式。

ESP32-S3 文档
我制作了一个 docker 文件来编译 CircuitPython 固件。

# https://learn.adafruit.com/building-circuitpython/build-circuitpython
# https://docs.circuitpython.org/en/latest/BUILDING.html
# https://learn.adafruit.com/building-circuitpython/espressif-build
FROM python:3

USER root

RUN apt-get update && apt-get -y install \
    git \
    ninja-build cmake libusb-1.0-0 gettext

WORKDIR /root
# it's taking a long time
RUN git clone https://github.com/adafruit/circuitpython.git && \
    cd circuitpython && \
    git checkout 7.3.3 && \
    make fetch-submodules

WORKDIR /root/circuitpython/ports/espressif
RUN esp-idf/install.sh

WORKDIR /root/circuitpython/ports/espressif/boards
# https://github.com/adafruit/circuitpython/tree/main/ports/espressif/boards/espressif_esp32s3_devkitc_1_n8r2
RUN cp -r espressif_esp32s3_devkitc_1_n8r2 espressif_esp32s3_devkitc_1_n16r8 && \
    sed -i 's/ESP32-S3-DevKitC-1-N8R2/ESP32-S3-DevKitC-1-N16R8/g' espressif_esp32s3_devkitc_1_n16r8/mpconfigboard.h && \
    sed -i 's/ESP32-S3-DevKitC-1-N8R2/ESP32-S3-DevKitC-1-N16R8/g' espressif_esp32s3_devkitc_1_n16r8/mpconfigboard.mk && \
    # CIRCUITPY_ESP_FLASH_MODE DIO -> QIO
    sed -i 's/dio/qio/g' espressif_esp32s3_devkitc_1_n16r8/mpconfigboard.mk && \
    # CIRCUITPY_ESP_FLASH_SIZE 8MB -> 16MB
    sed -i 's/8MB/16MB/g' espressif_esp32s3_devkitc_1_n16r8/mpconfigboard.mk && \
    echo 'CIRCUITPY_ESP32_CAMERA = 0' >> espressif_esp32s3_devkitc_1_n16r8/mpconfigboard.mk && \
    #  QUAD -> OCTAL
    sed -i 's/CONFIG_SPIRAM_MODE_QUAD/CONFIG_SPIRAM_MODE_OCT/g' espressif_esp32s3_devkitc_1_n16r8/sdkconfig && \
    # 2MB -> 8MB
    sed -i 's/2097152/8388608/g' espressif_esp32s3_devkitc_1_n16r8/sdkconfig

WORKDIR /root/circuitpython/ports/espressif

VOLUME ["/root/build"]

CMD ["/bin/bash", "-c", "source esp-idf/export.sh && make -j$(getconf _NPROCESSORS_ONLN) BOARD=espressif_esp32s3_devkitc_1_n16r8 && cp -r build-espressif_esp32s3_devkitc_1_n16r8/* /root/build"]

用法:

docker build . -t circuitpython
docker run -it --rm -v $(PWD)/build:/root/build circuitpython

烧录固件

esptool.py --port /dev/cu.SLAB_USBtoUART --chip esp32s3 --baud 921600 \
    erase_flash && \
esptool.py --port /dev/cu.SLAB_USBtoUART --chip esp32s3 --baud 921600 \
    --before=default_reset --after=hard_reset \
    write_flash --flash_mode qio --flash_freq 80m --flash_size 16MB \
    0x0 build/firmware.bin

你可以看到 USB 存储已经连接,并且 REPL 也可以正常工作。

USB 存储

REPL

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值