diff --git a/.github/workflows/build_esp32s3.yml b/.github/workflows/build_esp32s3.yml index c14ec3b..b81d1a9 100644 --- a/.github/workflows/build_esp32s3.yml +++ b/.github/workflows/build_esp32s3.yml @@ -3,13 +3,8 @@ name: ESP32 S3 # https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#onschedule on: - push: - pull_request: - paths-ignore: - - 'examples/**' - - 'README.md' - - 'ci/*unix*.sh' - - '.github/workflows/build_unix.yml' + workflow_dispatch + jobs: tensorflow_micropython_esp32_s3_build: @@ -17,7 +12,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Prepare to Build Tensorflow Micropython Firmware for ESP32 run: | git submodule init @@ -41,7 +36,7 @@ jobs: echo "tflm-commit=$TFLM_COMMIT" >> $GITHUB_ENV # - name: Cache esp-idf # id: cache-esp-idf -# uses: actions/cache@v2 +# uses: actions/cache@v4 # env: # cache-name: cache-esp-idf # with: @@ -53,7 +48,7 @@ jobs: source ./micropython/tools/ci.sh && ci_esp32_idf44_setup - name: Cache tflm id: cache-tflm - uses: actions/cache@v2 + uses: actions/cache@v4 env: cache-name: cache-tflm with: @@ -98,7 +93,7 @@ jobs: ../../../micropython/ports/esp32 - name: Archive ESP32-MICROLITE_S3 firmware - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: name: microlite-esp32s3-firmware path: | @@ -120,7 +115,7 @@ jobs: ../../../micropython/ports/esp32 - name: Archive ESP32-MICROLITE_S3_SPIRAM firmware - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: name: microlite-esp32s3-spiram-firmware path: | @@ -142,7 +137,7 @@ jobs: ../../../micropython/ports/esp32 - name: Archive ESP32-MICROLITE_S3_SPIRAM_CS_GPIO_20 firmware - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: name: microlite-esp32-s3-spiram-cs-gpio-20-firmware path: | @@ -164,7 +159,7 @@ jobs: ../../../micropython/ports/esp32 - name: Archive ESP32-MICROLITE_S3_SPIRAM_OCTAL firmware - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: name: microlite-esp32-s3-spiram-octal-firmware path: | diff --git a/.github/workflows/build_esp32s3_cam.yml b/.github/workflows/build_esp32s3_cam.yml new file mode 100644 index 0000000..f8838ef --- /dev/null +++ b/.github/workflows/build_esp32s3_cam.yml @@ -0,0 +1,102 @@ + +name: ESP32 S3 CAM + +# https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#onschedule +on: + workflow_dispatch + + +jobs: + tensorflow_micropython_esp32_s3_build: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Prepare to Build Tensorflow Micropython Firmware for ESP32 + run: | + git submodule init + git submodule update --recursive + cd micropython + git submodule update --init lib/axtls + git submodule update --init lib/berkeley-db-1.xx + cd ports/esp32 + make BOARD= submodules + cd ../../.. + cd tflm_esp_kernels + git submodule update --init components/esp32-camera + git submodule update --init components/esp-nn + - name: Get Cache Keys + # later get this like this: git ls-remote --heads https://github.com/espressif/esp-idf + # this commit is hard-coded in micropython/tools/ci.sh + run: | + IDF_COMMIT=5bb59b00e72f8f91eb24d8c65bf9a7ea2b8a4f5f + echo "esp-idf-commit=$IDF_COMMIT" >> $GITHUB_ENV + TFLM_COMMIT=$(git submodule status tensorflow | awk '{print ($1)}') + echo "tflm-commit=$TFLM_COMMIT" >> $GITHUB_ENV +# - name: Cache esp-idf +# id: cache-esp-idf +# uses: actions/cache@v4 +# env: +# cache-name: cache-esp-idf +# with: +# path: ./esp-idf +# key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.esp-idf-commit }} + - name: Setup IDF +# if: steps.cache-esp-idf.outputs.cache-hit != 'true' + run: | + source ./micropython/tools/ci.sh && ci_esp32_idf44_setup + - name: Cache tflm + id: cache-tflm + uses: actions/cache@v4 + env: + cache-name: cache-tflm + with: + path: ./micropython-modules/microlite/tflm + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.tflm-commit }} + - name: Setup Build for Tensorflow + if: steps.cache-tflm.outputs.cache-hit != 'true' + run: | + + source ./esp-idf/export.sh + + pip3 install Pillow + pip3 install Wave + + echo "Regenerating microlite/tfm directory" + rm -rf ./micropython-modules/microlite/tflm + + cd ./tensorflow + + ../micropython-modules/microlite/prepare-tflm-esp.sh + + - name: Build micropython cross compiler + run: | + source ./esp-idf/export.sh + cd ./micropython + echo "make -C mpy-cross V=1 clean all" + make -C mpy-cross V=1 clean all + + + + - name: Build ESP32 S3 psram support and 8MB Flash firmware - OCTAL SPIRAM + run: | + + source ./esp-idf/export.sh + + echo "cd ./boards/esp32/MICROLITE_S3_SPIRAM_OCTAL" + cd ./boards/esp32/MICROLITE_S3_SPIRAM_OCTAL + + echo "Building ESP32-MICROLITE_S3_SPIRAM_OCTAL" + rm -rf builds + idf.py clean build + + ../../../micropython-modules/microlite/assemble-unified-image-esp.sh \ + ../../../micropython/ports/esp32 + + - name: Archive ESP32-MICROLITE_S3_SPIRAM_OCTAL firmware + uses: actions/upload-artifact@v4 + with: + name: microlite-esp32-s3-spiram-octal-firmware + path: | + boards/esp32/MICROLITE_S3_SPIRAM_OCTAL/build/firmware.bin diff --git a/boards/esp32/MICROLITE_S3_SPIRAM_OCTAL/CMakeLists.txt b/boards/esp32/MICROLITE_S3_SPIRAM_OCTAL/CMakeLists.txt index 1fdbb5e..be63d46 100644 --- a/boards/esp32/MICROLITE_S3_SPIRAM_OCTAL/CMakeLists.txt +++ b/boards/esp32/MICROLITE_S3_SPIRAM_OCTAL/CMakeLists.txt @@ -8,6 +8,9 @@ get_filename_component(PROJECT_DIR "../../.." ABSOLUTE) set(MICROPY_PORT_DIR ${PROJECT_DIR}/micropython/ports/esp32) get_filename_component(MICROPY_BOARD_DIR "." ABSOLUTE) +set(EXTRA_COMPONENT_DIRS ../../../tflm_esp_kernels/components/esp32-camera) + +message (STATUS "EXTRA_COMPONENT_DIRS=${EXTRA_COMPONENT_DIRS}") message (STATUS "PROJECT_DIR=${PROJECT_DIR}") message (STATUS "MICROPY_PORT_DIR=${MICROPY_PORT_DIR}") message (STATUS "MICROPY_BOARD_DIR=${MICROPY_BOARD_DIR}") @@ -29,4 +32,4 @@ set(SDKCONFIG_DEFAULTS ${CMAKE_BINARY_DIR}/sdkconfig.combined) # Include main IDF cmake file and define the project. include($ENV{IDF_PATH}/tools/cmake/project.cmake) -project(micropython) \ No newline at end of file +project(micropython) diff --git a/boards/esp32/MICROLITE_S3_SPIRAM_OCTAL/mpconfigboard.cmake b/boards/esp32/MICROLITE_S3_SPIRAM_OCTAL/mpconfigboard.cmake index 3633177..5aff9b1 100644 --- a/boards/esp32/MICROLITE_S3_SPIRAM_OCTAL/mpconfigboard.cmake +++ b/boards/esp32/MICROLITE_S3_SPIRAM_OCTAL/mpconfigboard.cmake @@ -10,6 +10,9 @@ set(SDKCONFIG_DEFAULTS ${MICROPY_BOARD_DIR}/sdkconfig-8m.partition ) +# this option causes the camera module to build +set(CAMERA_TYPE esp32) + message (STATUS "mpconfigboard.cmake: PROJECT_DIR=${PROJECT_DIR}") set(USER_C_MODULES diff --git a/boards/esp32/MICROLITE_S3_SPIRAM_OCTAL/mpconfigboard.h b/boards/esp32/MICROLITE_S3_SPIRAM_OCTAL/mpconfigboard.h index 6dd92bd..b15a079 100644 --- a/boards/esp32/MICROLITE_S3_SPIRAM_OCTAL/mpconfigboard.h +++ b/boards/esp32/MICROLITE_S3_SPIRAM_OCTAL/mpconfigboard.h @@ -6,3 +6,9 @@ #define MICROPY_HW_I2C0_SCL (9) #define MICROPY_HW_I2C0_SDA (8) +#define MODULE_CAMERA_ENABLED (1) + +// The offset only has an effect if a board has psram +// it allows the start of the range allocated to +#define MICROPY_ALLOCATE_HEAP_USING_MALLOC (1) +#define MICROPY_HEAP_SIZE_REDUCTION (512 * 1024) diff --git a/boards/esp32/MICROLITE_S3_SPIRAM_OCTAL/sdkconfig.board b/boards/esp32/MICROLITE_S3_SPIRAM_OCTAL/sdkconfig.board index d723639..9632e20 100644 --- a/boards/esp32/MICROLITE_S3_SPIRAM_OCTAL/sdkconfig.board +++ b/boards/esp32/MICROLITE_S3_SPIRAM_OCTAL/sdkconfig.board @@ -3,7 +3,23 @@ CONFIG_ESPTOOLPY_FLASHFREQ_80M=y CONFIG_ESPTOOLPY_FLASHSIZE_DETECT=y CONFIG_ESPTOOLPY_AFTER_NORESET=y -CONFIG_SPIRAM_MEMTEST= +CONFIG_CAMERA_MODULE_ESP_S3_EYE=y + +# ESP32-CAMERA +CONFIG_OV2640_SUPPORT=y +CONFIG_OV3660_SUPPORT=y +CONFIG_SCCB_HARDWARE_I2C_PORT1=y +CONFIG_SCCB_CLK_FREQ=140000 +CONFIG_CAMERA_TASK_STACK_SIZE=2048 +# CONFIG_CAMERA_CORE0 is not set +CONFIG_CAMERA_CORE1=y +# CONFIG_CAMERA_NO_AFFINITY is not set +CONFIG_CAMERA_DMA_BUFFER_SIZE_MAX=32768 +CONFIG_CAMERA_JPEG_MODE_FRAME_SIZE_AUTO=y + + +CONFIG_NN_OPTIMIZED=y +CONFIG_NN_OPTIMIZATIONS=1 CONFIG_ESPTOOLPY_FLASHSIZE_4MB= CONFIG_ESPTOOLPY_FLASHSIZE_8MB=y @@ -12,7 +28,7 @@ CONFIG_PARTITION_TABLE_CUSTOM=y CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions-8MiB.csv" # overrides -CONFIG_DEFAULT_PSRAM_CS_IO=26 +# CONFIG_DEFAULT_PSRAM_CS_IO=26 # Customizations from issue #40 @@ -36,21 +52,18 @@ CONFIG_ESP32S3_ICACHE_ASSOCIATED_WAYS=8 CONFIG_ESP32S3_INSTRUCTION_CACHE_LINE_32B=y CONFIG_ESP32S3_INSTRUCTION_CACHE_LINE_SIZE=32 # CONFIG_ESP32S3_DATA_CACHE_16KB is not set -CONFIG_ESP32S3_DATA_CACHE_32KB=y -# CONFIG_ESP32S3_DATA_CACHE_64KB is not set -CONFIG_ESP32S3_DATA_CACHE_SIZE=0x8000 +# CONFIG_ESP32S3_DATA_CACHE_32KB is not set +CONFIG_ESP32S3_DATA_CACHE_64KB=y +CONFIG_ESP32S3_DATA_CACHE_SIZE=0x10000 # CONFIG_ESP32S3_DATA_CACHE_4WAYS is not set CONFIG_ESP32S3_DATA_CACHE_8WAYS=y CONFIG_ESP32S3_DCACHE_ASSOCIATED_WAYS=8 -# CONFIG_ESP32S3_DATA_CACHE_LINE_16B is not set -CONFIG_ESP32S3_DATA_CACHE_LINE_32B=y -# CONFIG_ESP32S3_DATA_CACHE_LINE_64B is not set -CONFIG_ESP32S3_DATA_CACHE_LINE_SIZE=32 +# CONFIG_ESP32S3_DATA_CACHE_LINE_32B is not set +CONFIG_ESP32S3_DATA_CACHE_LINE_64B=y +CONFIG_ESP32S3_DATA_CACHE_LINE_SIZE=64 # end of Cache config -# end of Cache config - CONFIG_ESP32S3_SPIRAM_SUPPORT=y # SPI RAM config @@ -59,30 +72,27 @@ CONFIG_ESP32S3_SPIRAM_SUPPORT=y CONFIG_SPIRAM_MODE_OCT=y CONFIG_SPIRAM_TYPE_AUTO=y # CONFIG_SPIRAM_TYPE_ESPPSRAM64 is not set -CONFIG_SPIRAM_SIZE=-1 - -# PSRAM Clock and CS IO for ESP32S3 -# -CONFIG_DEFAULT_PSRAM_CLK_IO=30 -CONFIG_DEFAULT_PSRAM_CS_IO=26 -# end of PSRAM Clock and CS IO for ESP32S3 - - -CONFIG_SPIRAM_FETCH_INSTRUCTIONS= -CONFIG_SPIRAM_RODATA= -CONFIG_SPIRAM_SPEED_120M= +CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y +CONFIG_SPIRAM_CLK_IO=30 +CONFIG_SPIRAM_CS_IO=26 +# CONFIG_SPIRAM_XIP_FROM_PSRAM is not set +# CONFIG_SPIRAM_FETCH_INSTRUCTIONS is not set +# CONFIG_SPIRAM_RODATA is not set CONFIG_SPIRAM_SPEED_80M=y -CONFIG_SPIRAM_SPEED_40M= -CONFIG_SPIRAM=y +# CONFIG_SPIRAM_SPEED_40M is not set +CONFIG_SPIRAM_SPEED=80 +# CONFIG_SPIRAM_ECC_ENABLE is not set CONFIG_SPIRAM_BOOT_INIT=y -CONFIG_SPIRAM_IGNORE_NOTFOUND=y -CONFIG_SPIRAM_USE_MEMMAP= +# CONFIG_SPIRAM_IGNORE_NOTFOUND is not set +# CONFIG_SPIRAM_USE_MEMMAP is not set CONFIG_SPIRAM_USE_CAPS_ALLOC=y -CONFIG_SPIRAM_USE_MALLOC= -CONFIG_SPIRAM_MEMTEST= -CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP= - +# CONFIG_SPIRAM_USE_MALLOC is not set +CONFIG_SPIRAM_MEMTEST=y +# CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP is not set +# CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY is not set # end of SPI RAM config +# end of ESP PSRAM + CONFIG_ESP32S3_TRAX= CONFIG_ESP32S3_TRACEMEM_RESERVE_DRAM=0x0