From 2f0cb8b5f1a944187635a58a748ed08738d324a5 Mon Sep 17 00:00:00 2001 From: Alex Lisitsyn Date: Tue, 9 Mar 2021 11:29:07 +0100 Subject: [PATCH 1/4] tinyusb: add support of esp32s3 target add support of new esp32s3 target and the board update the roles.mk wrapper to allow dfu flashing of espressif chip update examples to allow compilation for esp32s3_addax_1 board once the code is tested the PR to original tinyusb repo will be submitted --- .github/workflows/build.yml | 7 +-- README.md | 2 +- examples/device/board_test/CMakeLists.txt | 2 +- examples/device/board_test/sdkconfig.defaults | 3 +- examples/device/board_test/src/CMakeLists.txt | 12 ++++- examples/device/board_test/src/main.c | 2 +- examples/device/cdc_msc/CMakeLists.txt | 2 +- .../device/cdc_msc_freertos/CMakeLists.txt | 2 +- .../cdc_msc_freertos/sdkconfig.defaults | 2 - .../cdc_msc_freertos/src/CMakeLists.txt | 15 ++++++- examples/device/cdc_msc_freertos/src/main.c | 6 +-- .../hid_composite_freertos/CMakeLists.txt | 4 +- .../hid_composite_freertos/sdkconfig.defaults | 2 - .../hid_composite_freertos/src/CMakeLists.txt | 15 ++++++- .../device/hid_composite_freertos/src/main.c | 6 +-- examples/host/cdc_msc_hid/CMakeLists.txt | 2 +- examples/make.mk | 3 ++ examples/rules.mk | 4 +- hw/bsp/board_mcu.h | 3 ++ hw/bsp/esp32s2/family.cmake | 6 --- hw/bsp/esp32s2/family.mk | 36 --------------- .../boards/CMakeLists.txt | 8 ++-- .../adafruit_feather_esp32s2/CMakeLists.txt | 15 +++++++ .../boards/adafruit_feather_esp32s2/board.h | 0 .../boards/adafruit_feather_esp32s2/board.mk | 3 ++ .../adafruit_magtag_29gray/CMakeLists.txt | 15 +++++++ .../boards/adafruit_magtag_29gray/board.h | 0 .../boards/adafruit_magtag_29gray/board.mk | 3 ++ .../adafruit_metro_esp32s2/CMakeLists.txt | 15 +++++++ .../boards/adafruit_metro_esp32s2/board.h | 0 .../boards/adafruit_metro_esp32s2/board.mk | 3 ++ .../esp32s2.c => esp32sx/boards/esp32sx.c} | 0 .../boards/espressif_addax_1/CMakeLists.txt | 15 +++++++ .../esp32sx/boards/espressif_addax_1/board.h | 44 +++++++++++++++++++ .../esp32sx/boards/espressif_addax_1/board.mk | 3 ++ .../boards/espressif_kaluga_1/CMakeLists.txt | 14 ++++++ .../boards/espressif_kaluga_1/board.h | 0 .../boards/espressif_kaluga_1/board.mk | 3 ++ .../boards/espressif_saola_1/CMakeLists.txt | 14 ++++++ .../boards/espressif_saola_1/board.h | 0 .../esp32sx/boards/espressif_saola_1/board.mk | 3 ++ .../components/led_strip/CMakeLists.txt | 0 .../components/led_strip/include/led_strip.h | 0 .../led_strip/src/led_strip_rmt_ws2812.c | 0 hw/bsp/esp32sx/family.cmake | 6 +++ hw/bsp/esp32sx/family.mk | 26 +++++++++++ src/osal/osal_freertos.h | 4 +- .../dcd_esp32s2.c => esp32sx/dcd_esp32sx.c} | 7 +-- src/tusb_option.h | 1 + tools/{build_esp32s2.py => build_esp32sx.py} | 2 +- tools/build_family.py | 2 +- 51 files changed, 257 insertions(+), 85 deletions(-) delete mode 100644 hw/bsp/esp32s2/family.cmake delete mode 100644 hw/bsp/esp32s2/family.mk rename hw/bsp/{esp32s2 => esp32sx}/boards/CMakeLists.txt (68%) create mode 100644 hw/bsp/esp32sx/boards/adafruit_feather_esp32s2/CMakeLists.txt rename hw/bsp/{esp32s2 => esp32sx}/boards/adafruit_feather_esp32s2/board.h (100%) create mode 100644 hw/bsp/esp32sx/boards/adafruit_feather_esp32s2/board.mk create mode 100644 hw/bsp/esp32sx/boards/adafruit_magtag_29gray/CMakeLists.txt rename hw/bsp/{esp32s2 => esp32sx}/boards/adafruit_magtag_29gray/board.h (100%) create mode 100644 hw/bsp/esp32sx/boards/adafruit_magtag_29gray/board.mk create mode 100644 hw/bsp/esp32sx/boards/adafruit_metro_esp32s2/CMakeLists.txt rename hw/bsp/{esp32s2 => esp32sx}/boards/adafruit_metro_esp32s2/board.h (100%) create mode 100644 hw/bsp/esp32sx/boards/adafruit_metro_esp32s2/board.mk rename hw/bsp/{esp32s2/boards/esp32s2.c => esp32sx/boards/esp32sx.c} (100%) create mode 100644 hw/bsp/esp32sx/boards/espressif_addax_1/CMakeLists.txt create mode 100644 hw/bsp/esp32sx/boards/espressif_addax_1/board.h create mode 100644 hw/bsp/esp32sx/boards/espressif_addax_1/board.mk create mode 100644 hw/bsp/esp32sx/boards/espressif_kaluga_1/CMakeLists.txt rename hw/bsp/{esp32s2 => esp32sx}/boards/espressif_kaluga_1/board.h (100%) create mode 100644 hw/bsp/esp32sx/boards/espressif_kaluga_1/board.mk create mode 100644 hw/bsp/esp32sx/boards/espressif_saola_1/CMakeLists.txt rename hw/bsp/{esp32s2 => esp32sx}/boards/espressif_saola_1/board.h (100%) create mode 100644 hw/bsp/esp32sx/boards/espressif_saola_1/board.mk rename hw/bsp/{esp32s2 => esp32sx}/components/led_strip/CMakeLists.txt (100%) rename hw/bsp/{esp32s2 => esp32sx}/components/led_strip/include/led_strip.h (100%) rename hw/bsp/{esp32s2 => esp32sx}/components/led_strip/src/led_strip_rmt_ws2812.c (100%) create mode 100644 hw/bsp/esp32sx/family.cmake create mode 100644 hw/bsp/esp32sx/family.mk rename src/portable/espressif/{esp32s2/dcd_esp32s2.c => esp32sx/dcd_esp32sx.c} (99%) rename tools/{build_esp32s2.py => build_esp32sx.py} (98%) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index cccf8eac..41ce430a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -180,9 +180,9 @@ jobs: asset_content_type: application/zip # --------------------------------------- - # Build ESP32S2 family + # Build ESP32SX family # --------------------------------------- - build-esp32s2: + build-esp32sx: runs-on: ubuntu-latest strategy: fail-fast: false @@ -192,6 +192,7 @@ jobs: - 'adafruit_feather_esp32s2' - 'adafruit_magtag_29gray' - 'adafruit_metro_esp32s2' + - 'espressif_addax_1' - 'espressif_kaluga_1' - 'espressif_saola_1' @@ -206,7 +207,7 @@ jobs: uses: actions/checkout@v2 - name: Build - run: docker run --rm -v $PWD:/project -w /project espressif/idf:latest python3 tools/build_esp32s2.py ${{ matrix.board }} + run: docker run --rm -v $PWD:/project -w /project espressif/idf:latest python3 tools/build_esp32sx.py ${{ matrix.board }} # --------------------------------------- # Build msp430 family diff --git a/README.md b/README.md index ddbd8a7f..b77ddb66 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ Special thanks to all the people who spent their precious time and effort to hel The stack supports the following MCUs: - **Dialog:** DA1469x -- **Espressif:** ESP32-S2 +- **Espressif:** ESP32-S2, ESP32-S3 - **MicroChip:** SAMD11, SAMD21, SAMD51, SAME5x, SAMG55 - **NordicSemi:** nRF52833, nRF52840 - **Nuvoton:** NUC120, NUC121/NUC125, NUC126, NUC505 diff --git a/examples/device/board_test/CMakeLists.txt b/examples/device/board_test/CMakeLists.txt index 32c0329e..7658fae4 100644 --- a/examples/device/board_test/CMakeLists.txt +++ b/examples/device/board_test/CMakeLists.txt @@ -7,7 +7,7 @@ set(TOP "../../..") get_filename_component(TOP "${TOP}" REALPATH) # Check for -DFAMILY= -if(FAMILY STREQUAL "esp32s2") +if(FAMILY STREQUAL "esp32sx") cmake_minimum_required(VERSION 3.5) include(${TOP}/hw/bsp/${FAMILY}/family.cmake) diff --git a/examples/device/board_test/sdkconfig.defaults b/examples/device/board_test/sdkconfig.defaults index cede6603..83871619 100644 --- a/examples/device/board_test/sdkconfig.defaults +++ b/examples/device/board_test/sdkconfig.defaults @@ -1,4 +1,3 @@ CONFIG_IDF_CMAKE=y -CONFIG_IDF_TARGET="esp32s2" -CONFIG_IDF_TARGET_ESP32S2=y +CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK=y CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y diff --git a/examples/device/board_test/src/CMakeLists.txt b/examples/device/board_test/src/CMakeLists.txt index e5966106..e4486360 100644 --- a/examples/device/board_test/src/CMakeLists.txt +++ b/examples/device/board_test/src/CMakeLists.txt @@ -1,10 +1,18 @@ -# FAMILY = "esp32s2" +# FAMILY = esp32sx idf_component_register(SRCS "main.c" INCLUDE_DIRS "." REQUIRES freertos soc) +string(REGEX MATCH "^(esp32s[2-3])*" chip_target "$ENV{IDF_TARGET}") + +if(NOT chip_target) + message(FATAL_ERROR "Incorrect target: $ENV{IDF_TARGET}" ) +endif() + +string(TOUPPER ${chip_target} upper_case_target) + target_compile_options(${COMPONENT_TARGET} PUBLIC - "-DCFG_TUSB_MCU=OPT_MCU_ESP32S2" + "-DCFG_TUSB_MCU=OPT_MCU_${upper_case_target}" "-DCFG_TUSB_OS=OPT_OS_FREERTOS" ) diff --git a/examples/device/board_test/src/main.c b/examples/device/board_test/src/main.c index d94b2465..c77dd564 100644 --- a/examples/device/board_test/src/main.c +++ b/examples/device/board_test/src/main.c @@ -70,7 +70,7 @@ int main(void) return 0; } -#if CFG_TUSB_MCU == OPT_MCU_ESP32S2 +#if CFG_TUSB_MCU == OPT_MCU_ESP32S2 || CFG_TUSB_MCU == OPT_MCU_ESP32S3 void app_main(void) { main(); diff --git a/examples/device/cdc_msc/CMakeLists.txt b/examples/device/cdc_msc/CMakeLists.txt index d4ee8c05..5f515c82 100644 --- a/examples/device/cdc_msc/CMakeLists.txt +++ b/examples/device/cdc_msc/CMakeLists.txt @@ -7,7 +7,7 @@ set(TOP "../../..") get_filename_component(TOP "${TOP}" REALPATH) # Check for -DFAMILY= -if(FAMILY STREQUAL "esp32s2") +if(FAMILY STREQUAL "esp32sx") cmake_minimum_required(VERSION 3.5) include(${TOP}/hw/bsp/${FAMILY}/family.cmake) project(${PROJECT}) diff --git a/examples/device/cdc_msc_freertos/CMakeLists.txt b/examples/device/cdc_msc_freertos/CMakeLists.txt index dabb4bc8..643cebeb 100644 --- a/examples/device/cdc_msc_freertos/CMakeLists.txt +++ b/examples/device/cdc_msc_freertos/CMakeLists.txt @@ -9,7 +9,7 @@ set(TOP "../../..") get_filename_component(TOP "${TOP}" REALPATH) # Check for -DFAMILY= -if(FAMILY STREQUAL "esp32s2") +if(FAMILY STREQUAL "esp32sx") include(${TOP}/hw/bsp/${FAMILY}/family.cmake) project(${PROJECT}) diff --git a/examples/device/cdc_msc_freertos/sdkconfig.defaults b/examples/device/cdc_msc_freertos/sdkconfig.defaults index 3253f605..83871619 100644 --- a/examples/device/cdc_msc_freertos/sdkconfig.defaults +++ b/examples/device/cdc_msc_freertos/sdkconfig.defaults @@ -1,5 +1,3 @@ CONFIG_IDF_CMAKE=y -CONFIG_IDF_TARGET="esp32s2" -CONFIG_IDF_TARGET_ESP32S2=y CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK=y CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y diff --git a/examples/device/cdc_msc_freertos/src/CMakeLists.txt b/examples/device/cdc_msc_freertos/src/CMakeLists.txt index a7ece92c..17bc0b3e 100644 --- a/examples/device/cdc_msc_freertos/src/CMakeLists.txt +++ b/examples/device/cdc_msc_freertos/src/CMakeLists.txt @@ -2,8 +2,19 @@ idf_component_register(SRCS "main.c" "usb_descriptors.c" "msc_disk.c" INCLUDE_DIRS "." REQUIRES freertos soc) +string(REGEX MATCH "^(esp32s[2-3])*" chip_target "$ENV{IDF_TARGET}") + +if(NOT chip_target) + message(FATAL_ERROR "Incorrect target: $ENV{IDF_TARGET}" ) +else() + set(chip_family "esp32sx") +endif() + +string(TOUPPER ${chip_target} upper_case_target) + target_compile_options(${COMPONENT_TARGET} PUBLIC - "-DCFG_TUSB_MCU=OPT_MCU_ESP32S2" + "-DCFG_TUSB_MCU=OPT_MCU_${upper_case_target}" + "-DCFG_TUSB_OS=OPT_OS_FREERTOS" ) idf_component_get_property( FREERTOS_ORIG_INCLUDE_PATH freertos ORIG_INCLUDE_PATH) @@ -26,5 +37,5 @@ target_sources(${COMPONENT_TARGET} PUBLIC "${TOP}/src/class/net/net_device.c" "${TOP}/src/class/usbtmc/usbtmc_device.c" "${TOP}/src/class/vendor/vendor_device.c" - "${TOP}/src/portable/espressif/esp32s2/dcd_esp32s2.c" + "${TOP}/src/portable/espressif/${chip_family}/dcd_${chip_family}.c" ) diff --git a/examples/device/cdc_msc_freertos/src/main.c b/examples/device/cdc_msc_freertos/src/main.c index ccff2e0f..c27b7fed 100644 --- a/examples/device/cdc_msc_freertos/src/main.c +++ b/examples/device/cdc_msc_freertos/src/main.c @@ -94,15 +94,15 @@ int main(void) // Create CDC task (void) xTaskCreateStatic( cdc_task, "cdc", CDC_STACK_SZIE, NULL, configMAX_PRIORITIES-2, cdc_stack, &cdc_taskdef); - // skip starting scheduler (and return) for ESP32-S2 -#if CFG_TUSB_MCU != OPT_MCU_ESP32S2 + // skip starting scheduler (and return) for ESP32-S2 or ESP32-S3 +#if CFG_TUSB_MCU != OPT_MCU_ESP32S2 && CFG_TUSB_MCU != OPT_MCU_ESP32S3 vTaskStartScheduler(); #endif return 0; } -#if CFG_TUSB_MCU == OPT_MCU_ESP32S2 +#if CFG_TUSB_MCU == OPT_MCU_ESP32S2 || CFG_TUSB_MCU == OPT_MCU_ESP32S3 void app_main(void) { main(); diff --git a/examples/device/hid_composite_freertos/CMakeLists.txt b/examples/device/hid_composite_freertos/CMakeLists.txt index dabb4bc8..a3c7697a 100644 --- a/examples/device/hid_composite_freertos/CMakeLists.txt +++ b/examples/device/hid_composite_freertos/CMakeLists.txt @@ -9,10 +9,10 @@ set(TOP "../../..") get_filename_component(TOP "${TOP}" REALPATH) # Check for -DFAMILY= -if(FAMILY STREQUAL "esp32s2") +if(FAMILY STREQUAL "esp32sx") include(${TOP}/hw/bsp/${FAMILY}/family.cmake) project(${PROJECT}) else() - message(FATAL_ERROR "Invalid FAMILY specified") + message(FATAL_ERROR "Invalid FAMILY specified: ${FAMILY}") endif() diff --git a/examples/device/hid_composite_freertos/sdkconfig.defaults b/examples/device/hid_composite_freertos/sdkconfig.defaults index 3253f605..83871619 100644 --- a/examples/device/hid_composite_freertos/sdkconfig.defaults +++ b/examples/device/hid_composite_freertos/sdkconfig.defaults @@ -1,5 +1,3 @@ CONFIG_IDF_CMAKE=y -CONFIG_IDF_TARGET="esp32s2" -CONFIG_IDF_TARGET_ESP32S2=y CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK=y CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y diff --git a/examples/device/hid_composite_freertos/src/CMakeLists.txt b/examples/device/hid_composite_freertos/src/CMakeLists.txt index f79e8f84..ae213a3c 100644 --- a/examples/device/hid_composite_freertos/src/CMakeLists.txt +++ b/examples/device/hid_composite_freertos/src/CMakeLists.txt @@ -2,8 +2,19 @@ idf_component_register(SRCS "main.c" "usb_descriptors.c" INCLUDE_DIRS "." REQUIRES freertos soc) +string(REGEX MATCH "^(esp32s[2-3])*" chip_target "$ENV{IDF_TARGET}") + +if(NOT chip_target) + message(FATAL_ERROR "Incorrect target: $ENV{IDF_TARGET}" ) +else() + set(chip_family "esp32sx") +endif() + +string(TOUPPER ${chip_target} upper_case_target) + target_compile_options(${COMPONENT_TARGET} PUBLIC - "-DCFG_TUSB_MCU=OPT_MCU_ESP32S2" + "-DCFG_TUSB_MCU=OPT_MCU_${upper_case_target}" + "-DCFG_TUSB_OS=OPT_OS_FREERTOS" ) idf_component_get_property( FREERTOS_ORIG_INCLUDE_PATH freertos ORIG_INCLUDE_PATH) @@ -26,5 +37,5 @@ target_sources(${COMPONENT_TARGET} PUBLIC "${TOP}/src/class/net/net_device.c" "${TOP}/src/class/usbtmc/usbtmc_device.c" "${TOP}/src/class/vendor/vendor_device.c" - "${TOP}/src/portable/espressif/esp32s2/dcd_esp32s2.c" + "${TOP}/src/portable/espressif/${chip_family}/dcd_${chip_family}.c" ) diff --git a/examples/device/hid_composite_freertos/src/main.c b/examples/device/hid_composite_freertos/src/main.c index 37b4a0cf..47f97642 100644 --- a/examples/device/hid_composite_freertos/src/main.c +++ b/examples/device/hid_composite_freertos/src/main.c @@ -95,15 +95,15 @@ int main(void) // Create HID task (void) xTaskCreateStatic( hid_task, "hid", HID_STACK_SZIE, NULL, configMAX_PRIORITIES-2, hid_stack, &hid_taskdef); - // skip starting scheduler (and return) for ESP32-S2 -#if CFG_TUSB_MCU != OPT_MCU_ESP32S2 + // skip starting scheduler (and return) for ESP32-S2 or ESP32-S3 +#if CFG_TUSB_MCU != OPT_MCU_ESP32S2 && CFG_TUSB_MCU != OPT_MCU_ESP32S3 vTaskStartScheduler(); #endif return 0; } -#if CFG_TUSB_MCU == OPT_MCU_ESP32S2 +#if CFG_TUSB_MCU == OPT_MCU_ESP32S2 || CFG_TUSB_MCU == OPT_MCU_ESP32S3 void app_main(void) { main(); diff --git a/examples/host/cdc_msc_hid/CMakeLists.txt b/examples/host/cdc_msc_hid/CMakeLists.txt index 30b6c713..e9360a73 100644 --- a/examples/host/cdc_msc_hid/CMakeLists.txt +++ b/examples/host/cdc_msc_hid/CMakeLists.txt @@ -7,7 +7,7 @@ set(TOP "../../..") get_filename_component(TOP "${TOP}" REALPATH) # Check for -DFAMILY= -if(FAMILY STREQUAL "esp32s2") +if(FAMILY STREQUAL "esp32sx") cmake_minimum_required(VERSION 3.5) include(${TOP}/hw/bsp/${FAMILY}/family.cmake) project(${PROJECT}) diff --git a/examples/make.mk b/examples/make.mk index e04a2592..47879c66 100644 --- a/examples/make.mk +++ b/examples/make.mk @@ -27,6 +27,9 @@ endif # Board within family ifeq ($(BOARD_PATH),) BOARD_PATH := $(subst $(TOP)/,,$(wildcard $(TOP)/hw/bsp/*/boards/$(BOARD))) +ifneq ($(wildcard $(TOP)/hw/bsp/*/boards/$(BOARD)/board.mk),) + include $(TOP)/hw/bsp/*/boards/$(BOARD)/board.mk +endif FAMILY := $(word 3, $(subst /, ,$(BOARD_PATH))) FAMILY_PATH = hw/bsp/$(FAMILY) endif diff --git a/examples/rules.mk b/examples/rules.mk index a19cd678..461683fa 100644 --- a/examples/rules.mk +++ b/examples/rules.mk @@ -5,8 +5,8 @@ # Set all as default goal .DEFAULT_GOAL := all -# ESP32-S2 and RP2040 has its own CMake build system -ifneq ($(FAMILY),esp32s2) +# ESP32-SX and RP2040 has its own CMake build system +ifneq ($(FAMILY),esp32sx) ifneq ($(FAMILY),rp2040) # --------------------------------------- # GNU Make build system diff --git a/hw/bsp/board_mcu.h b/hw/bsp/board_mcu.h index b00958e5..1a659c41 100644 --- a/hw/bsp/board_mcu.h +++ b/hw/bsp/board_mcu.h @@ -115,6 +115,9 @@ #elif CFG_TUSB_MCU == OPT_MCU_ESP32S2 // no header needed +#elif CFG_TUSB_MCU == OPT_MCU_ESP32S3 + // no header needed + #elif CFG_TUSB_MCU == OPT_MCU_DA1469X #include "DA1469xAB.h" diff --git a/hw/bsp/esp32s2/family.cmake b/hw/bsp/esp32s2/family.cmake deleted file mode 100644 index c19221b1..00000000 --- a/hw/bsp/esp32s2/family.cmake +++ /dev/null @@ -1,6 +0,0 @@ -cmake_minimum_required(VERSION 3.5) - -# Add example src and bsp directories -set(EXTRA_COMPONENT_DIRS "src" "${TOP}/hw/bsp/esp32s2/boards" "${TOP}/hw/bsp/esp32s2/components") -include($ENV{IDF_PATH}/tools/cmake/project.cmake) -set(SUPPORTED_TARGETS esp32s2) diff --git a/hw/bsp/esp32s2/family.mk b/hw/bsp/esp32s2/family.mk deleted file mode 100644 index 8bd290eb..00000000 --- a/hw/bsp/esp32s2/family.mk +++ /dev/null @@ -1,36 +0,0 @@ -#DEPS_SUBMODULES += - -.PHONY: all clean flash - -all: - idf.py -B$(BUILD) -DFAMILY=$(FAMILY) -DBOARD=$(BOARD) $(CMAKE_DEFSYM) build - -build: all - -clean: - idf.py -B$(BUILD) -DFAMILY=$(FAMILY) -DBOARD=$(BOARD) $(CMAKE_DEFSYM) clean - -fullclean: - idf.py -B$(BUILD) -DFAMILY=$(FAMILY) -DBOARD=$(BOARD) $(CMAKE_DEFSYM) fullclean - -flash: - idf.py -B$(BUILD) -DFAMILY=$(FAMILY) -DBOARD=$(BOARD) $(CMAKE_DEFSYM) flash - -bootloader-flash: - idf.py -B$(BUILD) -DFAMILY=$(FAMILY) -DBOARD=$(BOARD) $(CMAKE_DEFSYM) bootloader-flash - -app-flash: - idf.py -B$(BUILD) -DFAMILY=$(FAMILY) -DBOARD=$(BOARD) $(CMAKE_DEFSYM) app-flash - -erase: - idf.py -B$(BUILD) -DFAMILY=$(FAMILY) -DBOARD=$(BOARD) $(CMAKE_DEFSYM) erase_flash - -monitor: - idf.py -B$(BUILD) -DFAMILY=$(FAMILY) -DBOARD=$(BOARD) $(CMAKE_DEFSYM) monitor - -uf2: $(BUILD)/$(PROJECT).uf2 - -UF2_FAMILY_ID = 0xbfdd4eee -$(BUILD)/$(PROJECT).uf2: $(BUILD)/$(PROJECT).bin - @echo CREATE $@ - $(PYTHON) $(TOP)/tools/uf2/utils/uf2conv.py -f $(UF2_FAMILY_ID) -b 0x0 -c -o $@ $^ diff --git a/hw/bsp/esp32s2/boards/CMakeLists.txt b/hw/bsp/esp32sx/boards/CMakeLists.txt similarity index 68% rename from hw/bsp/esp32s2/boards/CMakeLists.txt rename to hw/bsp/esp32sx/boards/CMakeLists.txt index 98c929ef..0d8de089 100644 --- a/hw/bsp/esp32s2/boards/CMakeLists.txt +++ b/hw/bsp/esp32sx/boards/CMakeLists.txt @@ -1,12 +1,10 @@ -idf_component_register(SRCS esp32s2.c +idf_component_register(SRCS esp32sx.c INCLUDE_DIRS "." "${BOARD}" PRIV_REQUIRES "driver" REQUIRES freertos src led_strip) -target_compile_options(${COMPONENT_TARGET} PUBLIC - "-DCFG_TUSB_MCU=OPT_MCU_ESP32S2" - "-DCFG_TUSB_OS=OPT_OS_FREERTOS" -) +# Apply board specific content +add_subdirectory(${BOARD}) idf_component_get_property( FREERTOS_ORIG_INCLUDE_PATH freertos ORIG_INCLUDE_PATH) target_include_directories(${COMPONENT_TARGET} PUBLIC diff --git a/hw/bsp/esp32sx/boards/adafruit_feather_esp32s2/CMakeLists.txt b/hw/bsp/esp32sx/boards/adafruit_feather_esp32s2/CMakeLists.txt new file mode 100644 index 00000000..fc7f5a43 --- /dev/null +++ b/hw/bsp/esp32sx/boards/adafruit_feather_esp32s2/CMakeLists.txt @@ -0,0 +1,15 @@ +# Apply board specific context here +target_include_directories(${COMPONENT_LIB} PRIVATE .) + +message(STATUS "Apply board specific content ${BOARD}: $ENV{IDF_TARGET} " ) +idf_build_get_property(idf_target IDF_TARGET) + +if(NOT ${idf_target} STREQUAL "esp32s2") + message(STATUS "Incorrect target for board ${BOARD}: $ENV{IDF_TARGET} " ) + set(IDF_TARGET "esp32s2" FORCE) +endif() + +target_compile_options(${COMPONENT_TARGET} PUBLIC + "-DCFG_TUSB_MCU=OPT_MCU_ESP32S2" + "-DCFG_TUSB_OS=OPT_OS_FREERTOS" +) \ No newline at end of file diff --git a/hw/bsp/esp32s2/boards/adafruit_feather_esp32s2/board.h b/hw/bsp/esp32sx/boards/adafruit_feather_esp32s2/board.h similarity index 100% rename from hw/bsp/esp32s2/boards/adafruit_feather_esp32s2/board.h rename to hw/bsp/esp32sx/boards/adafruit_feather_esp32s2/board.h diff --git a/hw/bsp/esp32sx/boards/adafruit_feather_esp32s2/board.mk b/hw/bsp/esp32sx/boards/adafruit_feather_esp32s2/board.mk new file mode 100644 index 00000000..7308a9f6 --- /dev/null +++ b/hw/bsp/esp32sx/boards/adafruit_feather_esp32s2/board.mk @@ -0,0 +1,3 @@ +IDF_TARGET = esp32s2 + +$(info Processing of board.mk for board: $(BOARD){$(BOARD_PATH)}, family: $(FAMILY), target: $(IDF_TARGET)) \ No newline at end of file diff --git a/hw/bsp/esp32sx/boards/adafruit_magtag_29gray/CMakeLists.txt b/hw/bsp/esp32sx/boards/adafruit_magtag_29gray/CMakeLists.txt new file mode 100644 index 00000000..fc7f5a43 --- /dev/null +++ b/hw/bsp/esp32sx/boards/adafruit_magtag_29gray/CMakeLists.txt @@ -0,0 +1,15 @@ +# Apply board specific context here +target_include_directories(${COMPONENT_LIB} PRIVATE .) + +message(STATUS "Apply board specific content ${BOARD}: $ENV{IDF_TARGET} " ) +idf_build_get_property(idf_target IDF_TARGET) + +if(NOT ${idf_target} STREQUAL "esp32s2") + message(STATUS "Incorrect target for board ${BOARD}: $ENV{IDF_TARGET} " ) + set(IDF_TARGET "esp32s2" FORCE) +endif() + +target_compile_options(${COMPONENT_TARGET} PUBLIC + "-DCFG_TUSB_MCU=OPT_MCU_ESP32S2" + "-DCFG_TUSB_OS=OPT_OS_FREERTOS" +) \ No newline at end of file diff --git a/hw/bsp/esp32s2/boards/adafruit_magtag_29gray/board.h b/hw/bsp/esp32sx/boards/adafruit_magtag_29gray/board.h similarity index 100% rename from hw/bsp/esp32s2/boards/adafruit_magtag_29gray/board.h rename to hw/bsp/esp32sx/boards/adafruit_magtag_29gray/board.h diff --git a/hw/bsp/esp32sx/boards/adafruit_magtag_29gray/board.mk b/hw/bsp/esp32sx/boards/adafruit_magtag_29gray/board.mk new file mode 100644 index 00000000..7308a9f6 --- /dev/null +++ b/hw/bsp/esp32sx/boards/adafruit_magtag_29gray/board.mk @@ -0,0 +1,3 @@ +IDF_TARGET = esp32s2 + +$(info Processing of board.mk for board: $(BOARD){$(BOARD_PATH)}, family: $(FAMILY), target: $(IDF_TARGET)) \ No newline at end of file diff --git a/hw/bsp/esp32sx/boards/adafruit_metro_esp32s2/CMakeLists.txt b/hw/bsp/esp32sx/boards/adafruit_metro_esp32s2/CMakeLists.txt new file mode 100644 index 00000000..fc7f5a43 --- /dev/null +++ b/hw/bsp/esp32sx/boards/adafruit_metro_esp32s2/CMakeLists.txt @@ -0,0 +1,15 @@ +# Apply board specific context here +target_include_directories(${COMPONENT_LIB} PRIVATE .) + +message(STATUS "Apply board specific content ${BOARD}: $ENV{IDF_TARGET} " ) +idf_build_get_property(idf_target IDF_TARGET) + +if(NOT ${idf_target} STREQUAL "esp32s2") + message(STATUS "Incorrect target for board ${BOARD}: $ENV{IDF_TARGET} " ) + set(IDF_TARGET "esp32s2" FORCE) +endif() + +target_compile_options(${COMPONENT_TARGET} PUBLIC + "-DCFG_TUSB_MCU=OPT_MCU_ESP32S2" + "-DCFG_TUSB_OS=OPT_OS_FREERTOS" +) \ No newline at end of file diff --git a/hw/bsp/esp32s2/boards/adafruit_metro_esp32s2/board.h b/hw/bsp/esp32sx/boards/adafruit_metro_esp32s2/board.h similarity index 100% rename from hw/bsp/esp32s2/boards/adafruit_metro_esp32s2/board.h rename to hw/bsp/esp32sx/boards/adafruit_metro_esp32s2/board.h diff --git a/hw/bsp/esp32sx/boards/adafruit_metro_esp32s2/board.mk b/hw/bsp/esp32sx/boards/adafruit_metro_esp32s2/board.mk new file mode 100644 index 00000000..7308a9f6 --- /dev/null +++ b/hw/bsp/esp32sx/boards/adafruit_metro_esp32s2/board.mk @@ -0,0 +1,3 @@ +IDF_TARGET = esp32s2 + +$(info Processing of board.mk for board: $(BOARD){$(BOARD_PATH)}, family: $(FAMILY), target: $(IDF_TARGET)) \ No newline at end of file diff --git a/hw/bsp/esp32s2/boards/esp32s2.c b/hw/bsp/esp32sx/boards/esp32sx.c similarity index 100% rename from hw/bsp/esp32s2/boards/esp32s2.c rename to hw/bsp/esp32sx/boards/esp32sx.c diff --git a/hw/bsp/esp32sx/boards/espressif_addax_1/CMakeLists.txt b/hw/bsp/esp32sx/boards/espressif_addax_1/CMakeLists.txt new file mode 100644 index 00000000..b64efa39 --- /dev/null +++ b/hw/bsp/esp32sx/boards/espressif_addax_1/CMakeLists.txt @@ -0,0 +1,15 @@ +# Apply board specific content here +target_include_directories(${COMPONENT_LIB} PRIVATE .) + +message(STATUS "Apply board specific content ${BOARD}: $ENV{IDF_TARGET} " ) +idf_build_get_property(idf_target IDF_TARGET) + +if(NOT ${idf_target} STREQUAL "esp32s3") + message(STATUS "Incorrect target for board ${BOARD}: $ENV{IDF_TARGET} " ) + set(IDF_TARGET "esp32s3" FORCE) +endif() + +target_compile_options(${COMPONENT_TARGET} PUBLIC + "-DCFG_TUSB_MCU=OPT_MCU_ESP32S3" + "-DCFG_TUSB_OS=OPT_OS_FREERTOS" +) \ No newline at end of file diff --git a/hw/bsp/esp32sx/boards/espressif_addax_1/board.h b/hw/bsp/esp32sx/boards/espressif_addax_1/board.h new file mode 100644 index 00000000..fff24ba4 --- /dev/null +++ b/hw/bsp/esp32sx/boards/espressif_addax_1/board.h @@ -0,0 +1,44 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2020, Ha Thach (tinyusb.org) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * This file is part of the TinyUSB stack. + */ + +#ifndef BOARD_H_ +#define BOARD_H_ + +#ifdef __cplusplus + extern "C" { +#endif + +// Note: On the production version (v1.1) WS2812 is connected to GPIO 47 +#define NEOPIXEL_PIN 47 + +#define BUTTON_PIN 0 +#define BUTTON_STATE_ACTIVE 0 + +#ifdef __cplusplus + } +#endif + +#endif /* BOARD_H_ */ diff --git a/hw/bsp/esp32sx/boards/espressif_addax_1/board.mk b/hw/bsp/esp32sx/boards/espressif_addax_1/board.mk new file mode 100644 index 00000000..6c5bda9b --- /dev/null +++ b/hw/bsp/esp32sx/boards/espressif_addax_1/board.mk @@ -0,0 +1,3 @@ +IDF_TARGET = esp32s3 + +$(info Processing of board.mk for board: $(BOARD){$(BOARD_PATH)}, family: $(FAMILY), target: $(IDF_TARGET)) \ No newline at end of file diff --git a/hw/bsp/esp32sx/boards/espressif_kaluga_1/CMakeLists.txt b/hw/bsp/esp32sx/boards/espressif_kaluga_1/CMakeLists.txt new file mode 100644 index 00000000..9b76625a --- /dev/null +++ b/hw/bsp/esp32sx/boards/espressif_kaluga_1/CMakeLists.txt @@ -0,0 +1,14 @@ +# Apply board specific context here +target_include_directories(${COMPONENT_LIB} PRIVATE .) + +idf_build_get_property(idf_target IDF_TARGET) + +if( NOT ${idf_target} STREQUAL "esp32s2") + message(STATUS "Incorrect target for board ${BOARD}: $ENV{IDF_TARGET} " ) + set(IDF_TARGET "esp32s2" FORCE) +endif() + +target_compile_options(${COMPONENT_TARGET} PUBLIC + "-DCFG_TUSB_MCU=OPT_MCU_ESP32S2" + "-DCFG_TUSB_OS=OPT_OS_FREERTOS" +) \ No newline at end of file diff --git a/hw/bsp/esp32s2/boards/espressif_kaluga_1/board.h b/hw/bsp/esp32sx/boards/espressif_kaluga_1/board.h similarity index 100% rename from hw/bsp/esp32s2/boards/espressif_kaluga_1/board.h rename to hw/bsp/esp32sx/boards/espressif_kaluga_1/board.h diff --git a/hw/bsp/esp32sx/boards/espressif_kaluga_1/board.mk b/hw/bsp/esp32sx/boards/espressif_kaluga_1/board.mk new file mode 100644 index 00000000..7308a9f6 --- /dev/null +++ b/hw/bsp/esp32sx/boards/espressif_kaluga_1/board.mk @@ -0,0 +1,3 @@ +IDF_TARGET = esp32s2 + +$(info Processing of board.mk for board: $(BOARD){$(BOARD_PATH)}, family: $(FAMILY), target: $(IDF_TARGET)) \ No newline at end of file diff --git a/hw/bsp/esp32sx/boards/espressif_saola_1/CMakeLists.txt b/hw/bsp/esp32sx/boards/espressif_saola_1/CMakeLists.txt new file mode 100644 index 00000000..c034a11a --- /dev/null +++ b/hw/bsp/esp32sx/boards/espressif_saola_1/CMakeLists.txt @@ -0,0 +1,14 @@ +# Apply board specific context here +target_include_directories(${COMPONENT_LIB} PUBLIC .) + +idf_build_get_property(idf_target IDF_TARGET) + +if(NOT ${idf_target} STREQUAL "esp32s2") + message(STATUS "Incorrect target for board ${BOARD}: $ENV{IDF_TARGET} " ) + set(IDF_TARGET "esp32s2" FORCE) +endif() + +target_compile_options(${COMPONENT_TARGET} PUBLIC + "-DCFG_TUSB_MCU=OPT_MCU_ESP32S2" + "-DCFG_TUSB_OS=OPT_OS_FREERTOS" +) \ No newline at end of file diff --git a/hw/bsp/esp32s2/boards/espressif_saola_1/board.h b/hw/bsp/esp32sx/boards/espressif_saola_1/board.h similarity index 100% rename from hw/bsp/esp32s2/boards/espressif_saola_1/board.h rename to hw/bsp/esp32sx/boards/espressif_saola_1/board.h diff --git a/hw/bsp/esp32sx/boards/espressif_saola_1/board.mk b/hw/bsp/esp32sx/boards/espressif_saola_1/board.mk new file mode 100644 index 00000000..7308a9f6 --- /dev/null +++ b/hw/bsp/esp32sx/boards/espressif_saola_1/board.mk @@ -0,0 +1,3 @@ +IDF_TARGET = esp32s2 + +$(info Processing of board.mk for board: $(BOARD){$(BOARD_PATH)}, family: $(FAMILY), target: $(IDF_TARGET)) \ No newline at end of file diff --git a/hw/bsp/esp32s2/components/led_strip/CMakeLists.txt b/hw/bsp/esp32sx/components/led_strip/CMakeLists.txt similarity index 100% rename from hw/bsp/esp32s2/components/led_strip/CMakeLists.txt rename to hw/bsp/esp32sx/components/led_strip/CMakeLists.txt diff --git a/hw/bsp/esp32s2/components/led_strip/include/led_strip.h b/hw/bsp/esp32sx/components/led_strip/include/led_strip.h similarity index 100% rename from hw/bsp/esp32s2/components/led_strip/include/led_strip.h rename to hw/bsp/esp32sx/components/led_strip/include/led_strip.h diff --git a/hw/bsp/esp32s2/components/led_strip/src/led_strip_rmt_ws2812.c b/hw/bsp/esp32sx/components/led_strip/src/led_strip_rmt_ws2812.c similarity index 100% rename from hw/bsp/esp32s2/components/led_strip/src/led_strip_rmt_ws2812.c rename to hw/bsp/esp32sx/components/led_strip/src/led_strip_rmt_ws2812.c diff --git a/hw/bsp/esp32sx/family.cmake b/hw/bsp/esp32sx/family.cmake new file mode 100644 index 00000000..54f36e5d --- /dev/null +++ b/hw/bsp/esp32sx/family.cmake @@ -0,0 +1,6 @@ +cmake_minimum_required(VERSION 3.5) + +# Add example src and bsp directories +set(EXTRA_COMPONENT_DIRS "src" "${TOP}/hw/bsp/esp32sx/boards" "${TOP}/hw/bsp/esp32sx/components") +include($ENV{IDF_PATH}/tools/cmake/project.cmake) +set(SUPPORTED_TARGETS esp32s2 esp32s3) diff --git a/hw/bsp/esp32sx/family.mk b/hw/bsp/esp32sx/family.mk new file mode 100644 index 00000000..46df596e --- /dev/null +++ b/hw/bsp/esp32sx/family.mk @@ -0,0 +1,26 @@ +#DEPS_SUBMODULES += + +.PHONY: all clean flash bootloader-flash app-flash erase monitor dfu-flash dfu + +all: + idf.py -B$(BUILD) -DFAMILY=$(FAMILY) -DBOARD=$(BOARD) $(CMAKE_DEFSYM) -DIDF_TARGET=$(IDF_TARGET) build + +build: all + +clean: + idf.py -B$(BUILD) -DFAMILY=$(FAMILY) -DBOARD=$(BOARD) $(CMAKE_DEFSYM) clean + +fullclean: + if test -f sdkconfig; then $(RM) -f sdkconfig ; fi + if test -d $(BUILD); then $(RM) -rf $(BUILD) ; fi + +flash bootloader-flash app-flash erase monitor dfu-flash dfu: + idf.py -B$(BUILD) -DFAMILY=$(FAMILY) -DBOARD=$(BOARD) $(CMAKE_DEFSYM) $@ + +uf2: $(BUILD)/$(PROJECT).uf2 + +UF2_FAMILY_ID = 0xbfdd4eee +$(BUILD)/$(PROJECT).uf2: $(BUILD)/$(PROJECT).bin + @echo CREATE $@ + $(PYTHON) $(TOP)/tools/uf2/utils/uf2conv.py -f $(UF2_FAMILY_ID) -b 0x0 -c -o $@ $^ + diff --git a/src/osal/osal_freertos.h b/src/osal/osal_freertos.h index 004bd1b6..66070c27 100644 --- a/src/osal/osal_freertos.h +++ b/src/osal/osal_freertos.h @@ -67,7 +67,7 @@ static inline bool osal_semaphore_post(osal_semaphore_t sem_hdl, bool in_isr) BaseType_t xHigherPriorityTaskWoken; BaseType_t res = xSemaphoreGiveFromISR(sem_hdl, &xHigherPriorityTaskWoken); -#if CFG_TUSB_MCU == OPT_MCU_ESP32S2 +#if CFG_TUSB_MCU == OPT_MCU_ESP32S2 || CFG_TUSB_MCU == OPT_MCU_ESP32S3 if ( xHigherPriorityTaskWoken ) portYIELD_FROM_ISR(); #else portYIELD_FROM_ISR(xHigherPriorityTaskWoken); @@ -150,7 +150,7 @@ static inline bool osal_queue_send(osal_queue_t qhdl, void const * data, bool in BaseType_t xHigherPriorityTaskWoken; BaseType_t res = xQueueSendToBackFromISR(qhdl, data, &xHigherPriorityTaskWoken); -#if CFG_TUSB_MCU == OPT_MCU_ESP32S2 +#if CFG_TUSB_MCU == OPT_MCU_ESP32S2 || CFG_TUSB_MCU == OPT_MCU_ESP32S3 if ( xHigherPriorityTaskWoken ) portYIELD_FROM_ISR(); #else portYIELD_FROM_ISR(xHigherPriorityTaskWoken); diff --git a/src/portable/espressif/esp32s2/dcd_esp32s2.c b/src/portable/espressif/esp32sx/dcd_esp32sx.c similarity index 99% rename from src/portable/espressif/esp32s2/dcd_esp32s2.c rename to src/portable/espressif/esp32sx/dcd_esp32sx.c index edbc872f..74842a29 100644 --- a/src/portable/espressif/esp32s2/dcd_esp32s2.c +++ b/src/portable/espressif/esp32sx/dcd_esp32sx.c @@ -29,14 +29,14 @@ #include "tusb_option.h" #include "common/tusb_fifo.h" -#if CFG_TUSB_MCU == OPT_MCU_ESP32S2 && TUSB_OPT_DEVICE_ENABLED +#if (((CFG_TUSB_MCU == OPT_MCU_ESP32S2) || (CFG_TUSB_MCU == OPT_MCU_ESP32S3)) && TUSB_OPT_DEVICE_ENABLED) // Espressif #include "driver/periph_ctrl.h" #include "freertos/xtensa_api.h" #include "esp_intr_alloc.h" #include "esp_log.h" -#include "esp32s2/rom/gpio.h" +#include "driver/gpio.h" #include "soc/dport_reg.h" #include "soc/gpio_sig_map.h" #include "soc/usb_periph.h" @@ -254,6 +254,7 @@ bool dcd_edpt_open(uint8_t rhport, tusb_desc_endpoint_t const *desc_edpt) uint8_t const epnum = tu_edpt_number(desc_edpt->bEndpointAddress); uint8_t const dir = tu_edpt_dir(desc_edpt->bEndpointAddress); + TU_ASSERT(desc_edpt->wMaxPacketSize.size <= 64); TU_ASSERT(epnum < EP_MAX); xfer_ctl_t *xfer = XFER_CTL_BASE(epnum, dir); @@ -863,5 +864,5 @@ void dcd_int_disable (uint8_t rhport) esp_intr_free(usb_ih); } -#endif // OPT_MCU_ESP32S2 +#endif // #if OPT_MCU_ESP32S2 || OPT_MCU_ESP32S3 diff --git a/src/tusb_option.h b/src/tusb_option.h index 7585a9ff..9fcc6c56 100644 --- a/src/tusb_option.h +++ b/src/tusb_option.h @@ -94,6 +94,7 @@ // Espressif #define OPT_MCU_ESP32S2 900 ///< Espressif ESP32-S2 +#define OPT_MCU_ESP32S3 901 ///< Espressif ESP32-S3 // Dialog #define OPT_MCU_DA1469X 1000 ///< Dialog Semiconductor DA1469x diff --git a/tools/build_esp32s2.py b/tools/build_esp32sx.py similarity index 98% rename from tools/build_esp32s2.py rename to tools/build_esp32sx.py index 0ef05023..82352c26 100644 --- a/tools/build_esp32s2.py +++ b/tools/build_esp32sx.py @@ -35,7 +35,7 @@ all_examples.sort() # Build all boards if not specified all_boards = [] -for entry in os.scandir("hw/bsp/esp32s2/boards"): +for entry in os.scandir("hw/bsp/esp32sx/boards"): if entry.is_dir(): all_boards.append(entry.name) filter_with_input(all_boards) diff --git a/tools/build_family.py b/tools/build_family.py index 65d0e8fc..35a61f97 100644 --- a/tools/build_family.py +++ b/tools/build_family.py @@ -38,7 +38,7 @@ all_examples.sort() # If family are not specified in arguments, build all all_families = [] for entry in os.scandir("hw/bsp"): - if entry.is_dir() and os.path.isdir(entry.path + "/boards") and entry.name != "esp32s2": + if entry.is_dir() and os.path.isdir(entry.path + "/boards") and entry.name != "esp32sx": all_families.append(entry.name) filter_with_input(all_families) From f5e02e72ed8e6dae5ce854263fdca86ac7453e3c Mon Sep 17 00:00:00 2001 From: Alex Lisitsyn <37483886+alisitsyn@users.noreply.github.com> Date: Fri, 16 Apr 2021 13:37:14 +0200 Subject: [PATCH 2/4] espressif: group boards using target name as a family `hw\bsp` separate one family folder to esp32s2, esp32s3 add board specific board.cmake file to override board specific options(features) fix examples and test scripts to use new family approach --- examples/device/board_test/CMakeLists.txt | 2 +- examples/device/board_test/src/CMakeLists.txt | 13 +- examples/device/cdc_msc/CMakeLists.txt | 2 +- .../device/cdc_msc_freertos/CMakeLists.txt | 4 +- .../cdc_msc_freertos/src/CMakeLists.txt | 17 +- .../hid_composite_freertos/CMakeLists.txt | 3 +- .../hid_composite_freertos/src/CMakeLists.txt | 17 +- examples/host/cdc_msc_hid/CMakeLists.txt | 7 +- examples/rules.mk | 4 +- .../boards/CMakeLists.txt | 4 +- .../adafruit_feather_esp32s2/board.cmake | 17 ++ .../boards/adafruit_feather_esp32s2/board.h | 0 .../boards/adafruit_magtag_29gray/board.cmake | 17 ++ .../boards/adafruit_magtag_29gray/board.h | 0 .../boards/adafruit_metro_esp32s2/board.cmake | 17 ++ .../boards/adafruit_metro_esp32s2/board.h | 0 .../esp32sx.c => esp32s2/boards/esp32s2.c} | 0 .../boards/espressif_kaluga_1/board.cmake | 17 ++ .../boards/espressif_kaluga_1/board.h | 0 .../boards/espressif_saola_1/board.cmake | 17 ++ .../boards/espressif_saola_1/board.h | 0 .../components/led_strip/CMakeLists.txt | 0 .../components/led_strip/include/led_strip.h | 0 .../led_strip/src/led_strip_rmt_ws2812.c | 0 hw/bsp/esp32s2/family.cmake | 6 + hw/bsp/{esp32sx => esp32s2}/family.mk | 2 +- hw/bsp/esp32s3/boards/CMakeLists.txt | 14 ++ hw/bsp/esp32s3/boards/esp32s3.c | 143 +++++++++++++++ .../boards/espressif_addax_1/board.cmake} | 8 +- .../boards/espressif_addax_1/board.h | 0 .../components/led_strip/CMakeLists.txt | 8 + .../components/led_strip/include/led_strip.h | 126 +++++++++++++ .../led_strip/src/led_strip_rmt_ws2812.c | 171 ++++++++++++++++++ hw/bsp/esp32s3/family.cmake | 6 + hw/bsp/esp32s3/family.mk | 26 +++ .../adafruit_feather_esp32s2/CMakeLists.txt | 15 -- .../boards/adafruit_feather_esp32s2/board.mk | 3 - .../adafruit_magtag_29gray/CMakeLists.txt | 15 -- .../boards/adafruit_magtag_29gray/board.mk | 3 - .../adafruit_metro_esp32s2/CMakeLists.txt | 15 -- .../boards/adafruit_metro_esp32s2/board.mk | 3 - .../esp32sx/boards/espressif_addax_1/board.mk | 3 - .../boards/espressif_kaluga_1/CMakeLists.txt | 14 -- .../boards/espressif_kaluga_1/board.mk | 3 - .../boards/espressif_saola_1/CMakeLists.txt | 14 -- .../esp32sx/boards/espressif_saola_1/board.mk | 3 - hw/bsp/esp32sx/family.cmake | 6 - tools/build_esp32sx.py | 5 +- tools/build_family.py | 2 +- 49 files changed, 618 insertions(+), 154 deletions(-) rename hw/bsp/{esp32sx => esp32s2}/boards/CMakeLists.txt (84%) create mode 100644 hw/bsp/esp32s2/boards/adafruit_feather_esp32s2/board.cmake rename hw/bsp/{esp32sx => esp32s2}/boards/adafruit_feather_esp32s2/board.h (100%) create mode 100644 hw/bsp/esp32s2/boards/adafruit_magtag_29gray/board.cmake rename hw/bsp/{esp32sx => esp32s2}/boards/adafruit_magtag_29gray/board.h (100%) create mode 100644 hw/bsp/esp32s2/boards/adafruit_metro_esp32s2/board.cmake rename hw/bsp/{esp32sx => esp32s2}/boards/adafruit_metro_esp32s2/board.h (100%) rename hw/bsp/{esp32sx/boards/esp32sx.c => esp32s2/boards/esp32s2.c} (100%) create mode 100644 hw/bsp/esp32s2/boards/espressif_kaluga_1/board.cmake rename hw/bsp/{esp32sx => esp32s2}/boards/espressif_kaluga_1/board.h (100%) create mode 100644 hw/bsp/esp32s2/boards/espressif_saola_1/board.cmake rename hw/bsp/{esp32sx => esp32s2}/boards/espressif_saola_1/board.h (100%) rename hw/bsp/{esp32sx => esp32s2}/components/led_strip/CMakeLists.txt (100%) rename hw/bsp/{esp32sx => esp32s2}/components/led_strip/include/led_strip.h (100%) rename hw/bsp/{esp32sx => esp32s2}/components/led_strip/src/led_strip_rmt_ws2812.c (100%) create mode 100644 hw/bsp/esp32s2/family.cmake rename hw/bsp/{esp32sx => esp32s2}/family.mk (94%) create mode 100644 hw/bsp/esp32s3/boards/CMakeLists.txt create mode 100644 hw/bsp/esp32s3/boards/esp32s3.c rename hw/bsp/{esp32sx/boards/espressif_addax_1/CMakeLists.txt => esp32s3/boards/espressif_addax_1/board.cmake} (55%) rename hw/bsp/{esp32sx => esp32s3}/boards/espressif_addax_1/board.h (100%) create mode 100644 hw/bsp/esp32s3/components/led_strip/CMakeLists.txt create mode 100644 hw/bsp/esp32s3/components/led_strip/include/led_strip.h create mode 100644 hw/bsp/esp32s3/components/led_strip/src/led_strip_rmt_ws2812.c create mode 100644 hw/bsp/esp32s3/family.cmake create mode 100644 hw/bsp/esp32s3/family.mk delete mode 100644 hw/bsp/esp32sx/boards/adafruit_feather_esp32s2/CMakeLists.txt delete mode 100644 hw/bsp/esp32sx/boards/adafruit_feather_esp32s2/board.mk delete mode 100644 hw/bsp/esp32sx/boards/adafruit_magtag_29gray/CMakeLists.txt delete mode 100644 hw/bsp/esp32sx/boards/adafruit_magtag_29gray/board.mk delete mode 100644 hw/bsp/esp32sx/boards/adafruit_metro_esp32s2/CMakeLists.txt delete mode 100644 hw/bsp/esp32sx/boards/adafruit_metro_esp32s2/board.mk delete mode 100644 hw/bsp/esp32sx/boards/espressif_addax_1/board.mk delete mode 100644 hw/bsp/esp32sx/boards/espressif_kaluga_1/CMakeLists.txt delete mode 100644 hw/bsp/esp32sx/boards/espressif_kaluga_1/board.mk delete mode 100644 hw/bsp/esp32sx/boards/espressif_saola_1/CMakeLists.txt delete mode 100644 hw/bsp/esp32sx/boards/espressif_saola_1/board.mk delete mode 100644 hw/bsp/esp32sx/family.cmake diff --git a/examples/device/board_test/CMakeLists.txt b/examples/device/board_test/CMakeLists.txt index 7658fae4..2b771263 100644 --- a/examples/device/board_test/CMakeLists.txt +++ b/examples/device/board_test/CMakeLists.txt @@ -7,7 +7,7 @@ set(TOP "../../..") get_filename_component(TOP "${TOP}" REALPATH) # Check for -DFAMILY= -if(FAMILY STREQUAL "esp32sx") +if(FAMILY MATCHES "^(esp32s[2-3])*") cmake_minimum_required(VERSION 3.5) include(${TOP}/hw/bsp/${FAMILY}/family.cmake) diff --git a/examples/device/board_test/src/CMakeLists.txt b/examples/device/board_test/src/CMakeLists.txt index e4486360..e4e1f4e9 100644 --- a/examples/device/board_test/src/CMakeLists.txt +++ b/examples/device/board_test/src/CMakeLists.txt @@ -3,19 +3,12 @@ idf_component_register(SRCS "main.c" INCLUDE_DIRS "." REQUIRES freertos soc) -string(REGEX MATCH "^(esp32s[2-3])*" chip_target "$ENV{IDF_TARGET}") +file(TO_NATIVE_PATH "${TOP}/hw/bsp/${FAMILY}/boards/${BOARD}/board.cmake" board_cmake) -if(NOT chip_target) - message(FATAL_ERROR "Incorrect target: $ENV{IDF_TARGET}" ) +if(EXISTS ${board_cmake}) + include(${board_cmake}) endif() -string(TOUPPER ${chip_target} upper_case_target) - -target_compile_options(${COMPONENT_TARGET} PUBLIC - "-DCFG_TUSB_MCU=OPT_MCU_${upper_case_target}" - "-DCFG_TUSB_OS=OPT_OS_FREERTOS" -) - idf_component_get_property( FREERTOS_ORIG_INCLUDE_PATH freertos ORIG_INCLUDE_PATH) target_include_directories(${COMPONENT_TARGET} PUBLIC "${FREERTOS_ORIG_INCLUDE_PATH}" diff --git a/examples/device/cdc_msc/CMakeLists.txt b/examples/device/cdc_msc/CMakeLists.txt index 5f515c82..ca8f07ad 100644 --- a/examples/device/cdc_msc/CMakeLists.txt +++ b/examples/device/cdc_msc/CMakeLists.txt @@ -7,7 +7,7 @@ set(TOP "../../..") get_filename_component(TOP "${TOP}" REALPATH) # Check for -DFAMILY= -if(FAMILY STREQUAL "esp32sx") +if(FAMILY MATCHES "^(esp32s[2-3])*") cmake_minimum_required(VERSION 3.5) include(${TOP}/hw/bsp/${FAMILY}/family.cmake) project(${PROJECT}) diff --git a/examples/device/cdc_msc_freertos/CMakeLists.txt b/examples/device/cdc_msc_freertos/CMakeLists.txt index 643cebeb..cf2dd822 100644 --- a/examples/device/cdc_msc_freertos/CMakeLists.txt +++ b/examples/device/cdc_msc_freertos/CMakeLists.txt @@ -9,10 +9,10 @@ set(TOP "../../..") get_filename_component(TOP "${TOP}" REALPATH) # Check for -DFAMILY= -if(FAMILY STREQUAL "esp32sx") +if(FAMILY MATCHES "^(esp32s[2-3])*") include(${TOP}/hw/bsp/${FAMILY}/family.cmake) project(${PROJECT}) else() - message(FATAL_ERROR "Invalid FAMILY specified") + message(FATAL_ERROR "Invalid FAMILY specified: ${FAMILY}") endif() diff --git a/examples/device/cdc_msc_freertos/src/CMakeLists.txt b/examples/device/cdc_msc_freertos/src/CMakeLists.txt index 17bc0b3e..6b188fd3 100644 --- a/examples/device/cdc_msc_freertos/src/CMakeLists.txt +++ b/examples/device/cdc_msc_freertos/src/CMakeLists.txt @@ -2,21 +2,12 @@ idf_component_register(SRCS "main.c" "usb_descriptors.c" "msc_disk.c" INCLUDE_DIRS "." REQUIRES freertos soc) -string(REGEX MATCH "^(esp32s[2-3])*" chip_target "$ENV{IDF_TARGET}") +file(TO_NATIVE_PATH "${TOP}/hw/bsp/${FAMILY}/boards/${BOARD}/board.cmake" board_cmake) -if(NOT chip_target) - message(FATAL_ERROR "Incorrect target: $ENV{IDF_TARGET}" ) -else() - set(chip_family "esp32sx") +if(EXISTS ${board_cmake}) + include(${board_cmake}) endif() -string(TOUPPER ${chip_target} upper_case_target) - -target_compile_options(${COMPONENT_TARGET} PUBLIC - "-DCFG_TUSB_MCU=OPT_MCU_${upper_case_target}" - "-DCFG_TUSB_OS=OPT_OS_FREERTOS" -) - idf_component_get_property( FREERTOS_ORIG_INCLUDE_PATH freertos ORIG_INCLUDE_PATH) target_include_directories(${COMPONENT_TARGET} PUBLIC "${FREERTOS_ORIG_INCLUDE_PATH}" @@ -37,5 +28,5 @@ target_sources(${COMPONENT_TARGET} PUBLIC "${TOP}/src/class/net/net_device.c" "${TOP}/src/class/usbtmc/usbtmc_device.c" "${TOP}/src/class/vendor/vendor_device.c" - "${TOP}/src/portable/espressif/${chip_family}/dcd_${chip_family}.c" + "${TOP}/src/portable/espressif/esp32sx/dcd_esp32sx.c" ) diff --git a/examples/device/hid_composite_freertos/CMakeLists.txt b/examples/device/hid_composite_freertos/CMakeLists.txt index a3c7697a..e2ba307a 100644 --- a/examples/device/hid_composite_freertos/CMakeLists.txt +++ b/examples/device/hid_composite_freertos/CMakeLists.txt @@ -9,10 +9,9 @@ set(TOP "../../..") get_filename_component(TOP "${TOP}" REALPATH) # Check for -DFAMILY= -if(FAMILY STREQUAL "esp32sx") +if(FAMILY MATCHES "^(esp32s[2-3])*") include(${TOP}/hw/bsp/${FAMILY}/family.cmake) project(${PROJECT}) - else() message(FATAL_ERROR "Invalid FAMILY specified: ${FAMILY}") endif() diff --git a/examples/device/hid_composite_freertos/src/CMakeLists.txt b/examples/device/hid_composite_freertos/src/CMakeLists.txt index ae213a3c..6d4a3c1e 100644 --- a/examples/device/hid_composite_freertos/src/CMakeLists.txt +++ b/examples/device/hid_composite_freertos/src/CMakeLists.txt @@ -2,21 +2,12 @@ idf_component_register(SRCS "main.c" "usb_descriptors.c" INCLUDE_DIRS "." REQUIRES freertos soc) -string(REGEX MATCH "^(esp32s[2-3])*" chip_target "$ENV{IDF_TARGET}") +file(TO_NATIVE_PATH "${TOP}/hw/bsp/${FAMILY}/boards/${BOARD}/board.cmake" board_cmake) -if(NOT chip_target) - message(FATAL_ERROR "Incorrect target: $ENV{IDF_TARGET}" ) -else() - set(chip_family "esp32sx") +if(EXISTS ${board_cmake}) + include(${board_cmake}) endif() -string(TOUPPER ${chip_target} upper_case_target) - -target_compile_options(${COMPONENT_TARGET} PUBLIC - "-DCFG_TUSB_MCU=OPT_MCU_${upper_case_target}" - "-DCFG_TUSB_OS=OPT_OS_FREERTOS" -) - idf_component_get_property( FREERTOS_ORIG_INCLUDE_PATH freertos ORIG_INCLUDE_PATH) target_include_directories(${COMPONENT_TARGET} PUBLIC "${FREERTOS_ORIG_INCLUDE_PATH}" @@ -37,5 +28,5 @@ target_sources(${COMPONENT_TARGET} PUBLIC "${TOP}/src/class/net/net_device.c" "${TOP}/src/class/usbtmc/usbtmc_device.c" "${TOP}/src/class/vendor/vendor_device.c" - "${TOP}/src/portable/espressif/${chip_family}/dcd_${chip_family}.c" + "${TOP}/src/portable/espressif/esp32sx/dcd_esp32sx.c" ) diff --git a/examples/host/cdc_msc_hid/CMakeLists.txt b/examples/host/cdc_msc_hid/CMakeLists.txt index e9360a73..1b2be456 100644 --- a/examples/host/cdc_msc_hid/CMakeLists.txt +++ b/examples/host/cdc_msc_hid/CMakeLists.txt @@ -7,12 +7,7 @@ set(TOP "../../..") get_filename_component(TOP "${TOP}" REALPATH) # Check for -DFAMILY= -if(FAMILY STREQUAL "esp32sx") - cmake_minimum_required(VERSION 3.5) - include(${TOP}/hw/bsp/${FAMILY}/family.cmake) - project(${PROJECT}) - -elseif(FAMILY STREQUAL "rp2040") +if(FAMILY STREQUAL "rp2040") cmake_minimum_required(VERSION 3.12) include(${TOP}/hw/bsp/${FAMILY}/pico_sdk_import.cmake) diff --git a/examples/rules.mk b/examples/rules.mk index 461683fa..00ad1429 100644 --- a/examples/rules.mk +++ b/examples/rules.mk @@ -6,7 +6,8 @@ .DEFAULT_GOAL := all # ESP32-SX and RP2040 has its own CMake build system -ifneq ($(FAMILY),esp32sx) +ifneq ($(FAMILY),esp32s2) +ifneq ($(FAMILY),esp32s3) ifneq ($(FAMILY),rp2040) # --------------------------------------- # GNU Make build system @@ -135,6 +136,7 @@ else $(RM) -rf $(BUILD) endif +endif endif endif # GNU Make diff --git a/hw/bsp/esp32sx/boards/CMakeLists.txt b/hw/bsp/esp32s2/boards/CMakeLists.txt similarity index 84% rename from hw/bsp/esp32sx/boards/CMakeLists.txt rename to hw/bsp/esp32s2/boards/CMakeLists.txt index 0d8de089..71753012 100644 --- a/hw/bsp/esp32sx/boards/CMakeLists.txt +++ b/hw/bsp/esp32s2/boards/CMakeLists.txt @@ -1,10 +1,10 @@ -idf_component_register(SRCS esp32sx.c +idf_component_register(SRCS esp32s2.c INCLUDE_DIRS "." "${BOARD}" PRIV_REQUIRES "driver" REQUIRES freertos src led_strip) # Apply board specific content -add_subdirectory(${BOARD}) +include("${BOARD}/board.cmake") idf_component_get_property( FREERTOS_ORIG_INCLUDE_PATH freertos ORIG_INCLUDE_PATH) target_include_directories(${COMPONENT_TARGET} PUBLIC diff --git a/hw/bsp/esp32s2/boards/adafruit_feather_esp32s2/board.cmake b/hw/bsp/esp32s2/boards/adafruit_feather_esp32s2/board.cmake new file mode 100644 index 00000000..d3396267 --- /dev/null +++ b/hw/bsp/esp32s2/boards/adafruit_feather_esp32s2/board.cmake @@ -0,0 +1,17 @@ +# Apply board specific content here +target_include_directories(${COMPONENT_LIB} PRIVATE .) + +idf_build_get_property(idf_target IDF_TARGET) + +message(STATUS "Apply ${BOARD}(${idf_target}) specific options for component: ${COMPONENT_TARGET}") + +if(NOT ${idf_target} STREQUAL "esp32s2") + message(FATAL_ERROR "Incorrect target for board ${BOARD}: $ENV{IDF_TARGET}(${idf_target}), try to clean the build first." ) +endif() + +set(IDF_TARGET "esp32s2" FORCE) + +target_compile_options(${COMPONENT_TARGET} PUBLIC + "-DCFG_TUSB_MCU=OPT_MCU_ESP32S2" + "-DCFG_TUSB_OS=OPT_OS_FREERTOS" +) \ No newline at end of file diff --git a/hw/bsp/esp32sx/boards/adafruit_feather_esp32s2/board.h b/hw/bsp/esp32s2/boards/adafruit_feather_esp32s2/board.h similarity index 100% rename from hw/bsp/esp32sx/boards/adafruit_feather_esp32s2/board.h rename to hw/bsp/esp32s2/boards/adafruit_feather_esp32s2/board.h diff --git a/hw/bsp/esp32s2/boards/adafruit_magtag_29gray/board.cmake b/hw/bsp/esp32s2/boards/adafruit_magtag_29gray/board.cmake new file mode 100644 index 00000000..d3396267 --- /dev/null +++ b/hw/bsp/esp32s2/boards/adafruit_magtag_29gray/board.cmake @@ -0,0 +1,17 @@ +# Apply board specific content here +target_include_directories(${COMPONENT_LIB} PRIVATE .) + +idf_build_get_property(idf_target IDF_TARGET) + +message(STATUS "Apply ${BOARD}(${idf_target}) specific options for component: ${COMPONENT_TARGET}") + +if(NOT ${idf_target} STREQUAL "esp32s2") + message(FATAL_ERROR "Incorrect target for board ${BOARD}: $ENV{IDF_TARGET}(${idf_target}), try to clean the build first." ) +endif() + +set(IDF_TARGET "esp32s2" FORCE) + +target_compile_options(${COMPONENT_TARGET} PUBLIC + "-DCFG_TUSB_MCU=OPT_MCU_ESP32S2" + "-DCFG_TUSB_OS=OPT_OS_FREERTOS" +) \ No newline at end of file diff --git a/hw/bsp/esp32sx/boards/adafruit_magtag_29gray/board.h b/hw/bsp/esp32s2/boards/adafruit_magtag_29gray/board.h similarity index 100% rename from hw/bsp/esp32sx/boards/adafruit_magtag_29gray/board.h rename to hw/bsp/esp32s2/boards/adafruit_magtag_29gray/board.h diff --git a/hw/bsp/esp32s2/boards/adafruit_metro_esp32s2/board.cmake b/hw/bsp/esp32s2/boards/adafruit_metro_esp32s2/board.cmake new file mode 100644 index 00000000..d5c17b9b --- /dev/null +++ b/hw/bsp/esp32s2/boards/adafruit_metro_esp32s2/board.cmake @@ -0,0 +1,17 @@ +# Apply board specific content here +target_include_directories(${COMPONENT_LIB} PRIVATE .) + +idf_build_get_property(idf_target IDF_TARGET) + +message(STATUS "Apply ${BOARD}(${idf_target}) specific options for component: ${COMPONENT_TARGET}") + +if(NOT ${idf_target} STREQUAL "esp32s2") + message(FATAL_ERROR "Incorrect target for board ${BOARD}: (${idf_target}), try to clean the build first." ) +endif() + +set(IDF_TARGET "esp32s2" FORCE) + +target_compile_options(${COMPONENT_TARGET} PUBLIC + "-DCFG_TUSB_MCU=OPT_MCU_ESP32S2" + "-DCFG_TUSB_OS=OPT_OS_FREERTOS" +) \ No newline at end of file diff --git a/hw/bsp/esp32sx/boards/adafruit_metro_esp32s2/board.h b/hw/bsp/esp32s2/boards/adafruit_metro_esp32s2/board.h similarity index 100% rename from hw/bsp/esp32sx/boards/adafruit_metro_esp32s2/board.h rename to hw/bsp/esp32s2/boards/adafruit_metro_esp32s2/board.h diff --git a/hw/bsp/esp32sx/boards/esp32sx.c b/hw/bsp/esp32s2/boards/esp32s2.c similarity index 100% rename from hw/bsp/esp32sx/boards/esp32sx.c rename to hw/bsp/esp32s2/boards/esp32s2.c diff --git a/hw/bsp/esp32s2/boards/espressif_kaluga_1/board.cmake b/hw/bsp/esp32s2/boards/espressif_kaluga_1/board.cmake new file mode 100644 index 00000000..d5c17b9b --- /dev/null +++ b/hw/bsp/esp32s2/boards/espressif_kaluga_1/board.cmake @@ -0,0 +1,17 @@ +# Apply board specific content here +target_include_directories(${COMPONENT_LIB} PRIVATE .) + +idf_build_get_property(idf_target IDF_TARGET) + +message(STATUS "Apply ${BOARD}(${idf_target}) specific options for component: ${COMPONENT_TARGET}") + +if(NOT ${idf_target} STREQUAL "esp32s2") + message(FATAL_ERROR "Incorrect target for board ${BOARD}: (${idf_target}), try to clean the build first." ) +endif() + +set(IDF_TARGET "esp32s2" FORCE) + +target_compile_options(${COMPONENT_TARGET} PUBLIC + "-DCFG_TUSB_MCU=OPT_MCU_ESP32S2" + "-DCFG_TUSB_OS=OPT_OS_FREERTOS" +) \ No newline at end of file diff --git a/hw/bsp/esp32sx/boards/espressif_kaluga_1/board.h b/hw/bsp/esp32s2/boards/espressif_kaluga_1/board.h similarity index 100% rename from hw/bsp/esp32sx/boards/espressif_kaluga_1/board.h rename to hw/bsp/esp32s2/boards/espressif_kaluga_1/board.h diff --git a/hw/bsp/esp32s2/boards/espressif_saola_1/board.cmake b/hw/bsp/esp32s2/boards/espressif_saola_1/board.cmake new file mode 100644 index 00000000..d5c17b9b --- /dev/null +++ b/hw/bsp/esp32s2/boards/espressif_saola_1/board.cmake @@ -0,0 +1,17 @@ +# Apply board specific content here +target_include_directories(${COMPONENT_LIB} PRIVATE .) + +idf_build_get_property(idf_target IDF_TARGET) + +message(STATUS "Apply ${BOARD}(${idf_target}) specific options for component: ${COMPONENT_TARGET}") + +if(NOT ${idf_target} STREQUAL "esp32s2") + message(FATAL_ERROR "Incorrect target for board ${BOARD}: (${idf_target}), try to clean the build first." ) +endif() + +set(IDF_TARGET "esp32s2" FORCE) + +target_compile_options(${COMPONENT_TARGET} PUBLIC + "-DCFG_TUSB_MCU=OPT_MCU_ESP32S2" + "-DCFG_TUSB_OS=OPT_OS_FREERTOS" +) \ No newline at end of file diff --git a/hw/bsp/esp32sx/boards/espressif_saola_1/board.h b/hw/bsp/esp32s2/boards/espressif_saola_1/board.h similarity index 100% rename from hw/bsp/esp32sx/boards/espressif_saola_1/board.h rename to hw/bsp/esp32s2/boards/espressif_saola_1/board.h diff --git a/hw/bsp/esp32sx/components/led_strip/CMakeLists.txt b/hw/bsp/esp32s2/components/led_strip/CMakeLists.txt similarity index 100% rename from hw/bsp/esp32sx/components/led_strip/CMakeLists.txt rename to hw/bsp/esp32s2/components/led_strip/CMakeLists.txt diff --git a/hw/bsp/esp32sx/components/led_strip/include/led_strip.h b/hw/bsp/esp32s2/components/led_strip/include/led_strip.h similarity index 100% rename from hw/bsp/esp32sx/components/led_strip/include/led_strip.h rename to hw/bsp/esp32s2/components/led_strip/include/led_strip.h diff --git a/hw/bsp/esp32sx/components/led_strip/src/led_strip_rmt_ws2812.c b/hw/bsp/esp32s2/components/led_strip/src/led_strip_rmt_ws2812.c similarity index 100% rename from hw/bsp/esp32sx/components/led_strip/src/led_strip_rmt_ws2812.c rename to hw/bsp/esp32s2/components/led_strip/src/led_strip_rmt_ws2812.c diff --git a/hw/bsp/esp32s2/family.cmake b/hw/bsp/esp32s2/family.cmake new file mode 100644 index 00000000..c19221b1 --- /dev/null +++ b/hw/bsp/esp32s2/family.cmake @@ -0,0 +1,6 @@ +cmake_minimum_required(VERSION 3.5) + +# Add example src and bsp directories +set(EXTRA_COMPONENT_DIRS "src" "${TOP}/hw/bsp/esp32s2/boards" "${TOP}/hw/bsp/esp32s2/components") +include($ENV{IDF_PATH}/tools/cmake/project.cmake) +set(SUPPORTED_TARGETS esp32s2) diff --git a/hw/bsp/esp32sx/family.mk b/hw/bsp/esp32s2/family.mk similarity index 94% rename from hw/bsp/esp32sx/family.mk rename to hw/bsp/esp32s2/family.mk index 46df596e..fb9b2164 100644 --- a/hw/bsp/esp32sx/family.mk +++ b/hw/bsp/esp32s2/family.mk @@ -3,7 +3,7 @@ .PHONY: all clean flash bootloader-flash app-flash erase monitor dfu-flash dfu all: - idf.py -B$(BUILD) -DFAMILY=$(FAMILY) -DBOARD=$(BOARD) $(CMAKE_DEFSYM) -DIDF_TARGET=$(IDF_TARGET) build + idf.py -B$(BUILD) -DFAMILY=$(FAMILY) -DBOARD=$(BOARD) $(CMAKE_DEFSYM) -DIDF_TARGET=esp32s2 build build: all diff --git a/hw/bsp/esp32s3/boards/CMakeLists.txt b/hw/bsp/esp32s3/boards/CMakeLists.txt new file mode 100644 index 00000000..e1b921ae --- /dev/null +++ b/hw/bsp/esp32s3/boards/CMakeLists.txt @@ -0,0 +1,14 @@ +idf_component_register(SRCS esp32s3.c + INCLUDE_DIRS "." "${BOARD}" + PRIV_REQUIRES "driver" + REQUIRES freertos src led_strip) + +# Apply board specific content +include("${BOARD}/board.cmake") + +idf_component_get_property( FREERTOS_ORIG_INCLUDE_PATH freertos ORIG_INCLUDE_PATH) +target_include_directories(${COMPONENT_TARGET} PUBLIC + "${FREERTOS_ORIG_INCLUDE_PATH}" + "${TOP}/hw" + "${TOP}/src" +) diff --git a/hw/bsp/esp32s3/boards/esp32s3.c b/hw/bsp/esp32s3/boards/esp32s3.c new file mode 100644 index 00000000..358c0c80 --- /dev/null +++ b/hw/bsp/esp32s3/boards/esp32s3.c @@ -0,0 +1,143 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2020, Ha Thach (tinyusb.org) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * This file is part of the TinyUSB stack. + */ + +#include "../../board.h" +#include "board.h" + +#include "esp_rom_gpio.h" +#include "hal/gpio_ll.h" +#include "hal/usb_hal.h" +#include "soc/usb_periph.h" + +#include "driver/periph_ctrl.h" +#include "driver/rmt.h" + +#ifdef NEOPIXEL_PIN +#include "led_strip.h" +static led_strip_t *strip; +#endif + +//--------------------------------------------------------------------+ +// MACRO TYPEDEF CONSTANT ENUM DECLARATION +//--------------------------------------------------------------------+ + +static void configure_pins(usb_hal_context_t *usb); + +// Initialize on-board peripherals : led, button, uart and USB +void board_init(void) +{ + +#ifdef NEOPIXEL_PIN + #ifdef NEOPIXEL_POWER_PIN + gpio_reset_pin(NEOPIXEL_POWER_PIN); + gpio_set_direction(NEOPIXEL_POWER_PIN, GPIO_MODE_OUTPUT); + gpio_set_level(NEOPIXEL_POWER_PIN, NEOPIXEL_POWER_STATE); + #endif + + // WS2812 Neopixel driver with RMT peripheral + rmt_config_t config = RMT_DEFAULT_CONFIG_TX(NEOPIXEL_PIN, RMT_CHANNEL_0); + config.clk_div = 2; // set counter clock to 40MHz + + rmt_config(&config); + rmt_driver_install(config.channel, 0, 0); + + led_strip_config_t strip_config = LED_STRIP_DEFAULT_CONFIG(1, (led_strip_dev_t) config.channel); + strip = led_strip_new_rmt_ws2812(&strip_config); + strip->clear(strip, 100); // off led +#endif + + // Button + gpio_pad_select_gpio(BUTTON_PIN); + gpio_set_direction(BUTTON_PIN, GPIO_MODE_INPUT); + gpio_set_pull_mode(BUTTON_PIN, BUTTON_STATE_ACTIVE ? GPIO_PULLDOWN_ONLY : GPIO_PULLUP_ONLY); + + // USB Controller Hal init + periph_module_reset(PERIPH_USB_MODULE); + periph_module_enable(PERIPH_USB_MODULE); + + usb_hal_context_t hal = { + .use_external_phy = false // use built-in PHY + }; + usb_hal_init(&hal); + configure_pins(&hal); +} + +static void configure_pins(usb_hal_context_t *usb) +{ + /* usb_periph_iopins currently configures USB_OTG as USB Device. + * Introduce additional parameters in usb_hal_context_t when adding support + * for USB Host. + */ + for (const usb_iopin_dsc_t *iopin = usb_periph_iopins; iopin->pin != -1; ++iopin) { + if ((usb->use_external_phy) || (iopin->ext_phy_only == 0)) { + esp_rom_gpio_pad_select_gpio(iopin->pin); + if (iopin->is_output) { + esp_rom_gpio_connect_out_signal(iopin->pin, iopin->func, false, false); + } else { + esp_rom_gpio_connect_in_signal(iopin->pin, iopin->func, false); + if ((iopin->pin != GPIO_FUNC_IN_LOW) && (iopin->pin != GPIO_FUNC_IN_HIGH)) { + gpio_ll_input_enable(&GPIO, iopin->pin); + } + } + esp_rom_gpio_pad_unhold(iopin->pin); + } + } + if (!usb->use_external_phy) { + gpio_set_drive_capability(USBPHY_DM_NUM, GPIO_DRIVE_CAP_3); + gpio_set_drive_capability(USBPHY_DP_NUM, GPIO_DRIVE_CAP_3); + } +} + +// Turn LED on or off +void board_led_write(bool state) +{ +#ifdef NEOPIXEL_PIN + strip->set_pixel(strip, 0, (state ? 0x88 : 0x00), 0x00, 0x00); + strip->refresh(strip, 100); +#endif +} + +// Get the current state of button +// a '1' means active (pressed), a '0' means inactive. +uint32_t board_button_read(void) +{ + return gpio_get_level(BUTTON_PIN) == BUTTON_STATE_ACTIVE; +} + +// Get characters from UART +int board_uart_read(uint8_t* buf, int len) +{ + (void) buf; (void) len; + return 0; +} + +// Send characters to UART +int board_uart_write(void const * buf, int len) +{ + (void) buf; (void) len; + return 0; +} + diff --git a/hw/bsp/esp32sx/boards/espressif_addax_1/CMakeLists.txt b/hw/bsp/esp32s3/boards/espressif_addax_1/board.cmake similarity index 55% rename from hw/bsp/esp32sx/boards/espressif_addax_1/CMakeLists.txt rename to hw/bsp/esp32s3/boards/espressif_addax_1/board.cmake index b64efa39..60f7d19c 100644 --- a/hw/bsp/esp32sx/boards/espressif_addax_1/CMakeLists.txt +++ b/hw/bsp/esp32s3/boards/espressif_addax_1/board.cmake @@ -1,14 +1,16 @@ # Apply board specific content here target_include_directories(${COMPONENT_LIB} PRIVATE .) -message(STATUS "Apply board specific content ${BOARD}: $ENV{IDF_TARGET} " ) idf_build_get_property(idf_target IDF_TARGET) +message(STATUS "Apply ${BOARD}(${idf_target}) specific options for component: ${COMPONENT_TARGET}") + if(NOT ${idf_target} STREQUAL "esp32s3") - message(STATUS "Incorrect target for board ${BOARD}: $ENV{IDF_TARGET} " ) - set(IDF_TARGET "esp32s3" FORCE) + message(FATAL_ERROR "Incorrect target for board ${BOARD}: (${idf_target}), try to clean the build first." ) endif() +set(IDF_TARGET "esp32s3" FORCE) + target_compile_options(${COMPONENT_TARGET} PUBLIC "-DCFG_TUSB_MCU=OPT_MCU_ESP32S3" "-DCFG_TUSB_OS=OPT_OS_FREERTOS" diff --git a/hw/bsp/esp32sx/boards/espressif_addax_1/board.h b/hw/bsp/esp32s3/boards/espressif_addax_1/board.h similarity index 100% rename from hw/bsp/esp32sx/boards/espressif_addax_1/board.h rename to hw/bsp/esp32s3/boards/espressif_addax_1/board.h diff --git a/hw/bsp/esp32s3/components/led_strip/CMakeLists.txt b/hw/bsp/esp32s3/components/led_strip/CMakeLists.txt new file mode 100644 index 00000000..6d0fcbc8 --- /dev/null +++ b/hw/bsp/esp32s3/components/led_strip/CMakeLists.txt @@ -0,0 +1,8 @@ +set(component_srcs "src/led_strip_rmt_ws2812.c") + +idf_component_register(SRCS "${component_srcs}" + INCLUDE_DIRS "include" + PRIV_INCLUDE_DIRS "" + PRIV_REQUIRES "driver" + REQUIRES "") + diff --git a/hw/bsp/esp32s3/components/led_strip/include/led_strip.h b/hw/bsp/esp32s3/components/led_strip/include/led_strip.h new file mode 100644 index 00000000..a9dffc32 --- /dev/null +++ b/hw/bsp/esp32s3/components/led_strip/include/led_strip.h @@ -0,0 +1,126 @@ +// Copyright 2019 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +#include "esp_err.h" + +/** +* @brief LED Strip Type +* +*/ +typedef struct led_strip_s led_strip_t; + +/** +* @brief LED Strip Device Type +* +*/ +typedef void *led_strip_dev_t; + +/** +* @brief Declare of LED Strip Type +* +*/ +struct led_strip_s { + /** + * @brief Set RGB for a specific pixel + * + * @param strip: LED strip + * @param index: index of pixel to set + * @param red: red part of color + * @param green: green part of color + * @param blue: blue part of color + * + * @return + * - ESP_OK: Set RGB for a specific pixel successfully + * - ESP_ERR_INVALID_ARG: Set RGB for a specific pixel failed because of invalid parameters + * - ESP_FAIL: Set RGB for a specific pixel failed because other error occurred + */ + esp_err_t (*set_pixel)(led_strip_t *strip, uint32_t index, uint32_t red, uint32_t green, uint32_t blue); + + /** + * @brief Refresh memory colors to LEDs + * + * @param strip: LED strip + * @param timeout_ms: timeout value for refreshing task + * + * @return + * - ESP_OK: Refresh successfully + * - ESP_ERR_TIMEOUT: Refresh failed because of timeout + * - ESP_FAIL: Refresh failed because some other error occurred + * + * @note: + * After updating the LED colors in the memory, a following invocation of this API is needed to flush colors to strip. + */ + esp_err_t (*refresh)(led_strip_t *strip, uint32_t timeout_ms); + + /** + * @brief Clear LED strip (turn off all LEDs) + * + * @param strip: LED strip + * @param timeout_ms: timeout value for clearing task + * + * @return + * - ESP_OK: Clear LEDs successfully + * - ESP_ERR_TIMEOUT: Clear LEDs failed because of timeout + * - ESP_FAIL: Clear LEDs failed because some other error occurred + */ + esp_err_t (*clear)(led_strip_t *strip, uint32_t timeout_ms); + + /** + * @brief Free LED strip resources + * + * @param strip: LED strip + * + * @return + * - ESP_OK: Free resources successfully + * - ESP_FAIL: Free resources failed because error occurred + */ + esp_err_t (*del)(led_strip_t *strip); +}; + +/** +* @brief LED Strip Configuration Type +* +*/ +typedef struct { + uint32_t max_leds; /*!< Maximum LEDs in a single strip */ + led_strip_dev_t dev; /*!< LED strip device (e.g. RMT channel, PWM channel, etc) */ +} led_strip_config_t; + +/** + * @brief Default configuration for LED strip + * + */ +#define LED_STRIP_DEFAULT_CONFIG(number, dev_hdl) \ + { \ + .max_leds = number, \ + .dev = dev_hdl, \ + } + +/** +* @brief Install a new ws2812 driver (based on RMT peripheral) +* +* @param config: LED strip configuration +* @return +* LED strip instance or NULL +*/ +led_strip_t *led_strip_new_rmt_ws2812(const led_strip_config_t *config); + +#ifdef __cplusplus +} +#endif diff --git a/hw/bsp/esp32s3/components/led_strip/src/led_strip_rmt_ws2812.c b/hw/bsp/esp32s3/components/led_strip/src/led_strip_rmt_ws2812.c new file mode 100644 index 00000000..025d3c59 --- /dev/null +++ b/hw/bsp/esp32s3/components/led_strip/src/led_strip_rmt_ws2812.c @@ -0,0 +1,171 @@ +// Copyright 2019 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +#include +#include +#include +#include "esp_log.h" +#include "esp_attr.h" +#include "led_strip.h" +#include "driver/rmt.h" + +static const char *TAG = "ws2812"; +#define STRIP_CHECK(a, str, goto_tag, ret_value, ...) \ + do \ + { \ + if (!(a)) \ + { \ + ESP_LOGE(TAG, "%s(%d): " str, __FUNCTION__, __LINE__, ##__VA_ARGS__); \ + ret = ret_value; \ + goto goto_tag; \ + } \ + } while (0) + +#define WS2812_T0H_NS (350) +#define WS2812_T0L_NS (1000) +#define WS2812_T1H_NS (1000) +#define WS2812_T1L_NS (350) +#define WS2812_RESET_US (280) + +static uint32_t ws2812_t0h_ticks = 0; +static uint32_t ws2812_t1h_ticks = 0; +static uint32_t ws2812_t0l_ticks = 0; +static uint32_t ws2812_t1l_ticks = 0; + +typedef struct { + led_strip_t parent; + rmt_channel_t rmt_channel; + uint32_t strip_len; + uint8_t buffer[0]; +} ws2812_t; + +/** + * @brief Conver RGB data to RMT format. + * + * @note For WS2812, R,G,B each contains 256 different choices (i.e. uint8_t) + * + * @param[in] src: source data, to converted to RMT format + * @param[in] dest: place where to store the convert result + * @param[in] src_size: size of source data + * @param[in] wanted_num: number of RMT items that want to get + * @param[out] translated_size: number of source data that got converted + * @param[out] item_num: number of RMT items which are converted from source data + */ +static void IRAM_ATTR ws2812_rmt_adapter(const void *src, rmt_item32_t *dest, size_t src_size, + size_t wanted_num, size_t *translated_size, size_t *item_num) +{ + if (src == NULL || dest == NULL) { + *translated_size = 0; + *item_num = 0; + return; + } + const rmt_item32_t bit0 = {{{ ws2812_t0h_ticks, 1, ws2812_t0l_ticks, 0 }}}; //Logical 0 + const rmt_item32_t bit1 = {{{ ws2812_t1h_ticks, 1, ws2812_t1l_ticks, 0 }}}; //Logical 1 + size_t size = 0; + size_t num = 0; + uint8_t *psrc = (uint8_t *)src; + rmt_item32_t *pdest = dest; + while (size < src_size && num < wanted_num) { + for (int i = 0; i < 8; i++) { + // MSB first + if (*psrc & (1 << (7 - i))) { + pdest->val = bit1.val; + } else { + pdest->val = bit0.val; + } + num++; + pdest++; + } + size++; + psrc++; + } + *translated_size = size; + *item_num = num; +} + +static esp_err_t ws2812_set_pixel(led_strip_t *strip, uint32_t index, uint32_t red, uint32_t green, uint32_t blue) +{ + esp_err_t ret = ESP_OK; + ws2812_t *ws2812 = __containerof(strip, ws2812_t, parent); + STRIP_CHECK(index < ws2812->strip_len, "index out of the maximum number of leds", err, ESP_ERR_INVALID_ARG); + uint32_t start = index * 3; + // In thr order of GRB + ws2812->buffer[start + 0] = green & 0xFF; + ws2812->buffer[start + 1] = red & 0xFF; + ws2812->buffer[start + 2] = blue & 0xFF; + return ESP_OK; +err: + return ret; +} + +static esp_err_t ws2812_refresh(led_strip_t *strip, uint32_t timeout_ms) +{ + esp_err_t ret = ESP_OK; + ws2812_t *ws2812 = __containerof(strip, ws2812_t, parent); + STRIP_CHECK(rmt_write_sample(ws2812->rmt_channel, ws2812->buffer, ws2812->strip_len * 3, true) == ESP_OK, + "transmit RMT samples failed", err, ESP_FAIL); + return rmt_wait_tx_done(ws2812->rmt_channel, pdMS_TO_TICKS(timeout_ms)); +err: + return ret; +} + +static esp_err_t ws2812_clear(led_strip_t *strip, uint32_t timeout_ms) +{ + ws2812_t *ws2812 = __containerof(strip, ws2812_t, parent); + // Write zero to turn off all leds + memset(ws2812->buffer, 0, ws2812->strip_len * 3); + return ws2812_refresh(strip, timeout_ms); +} + +static esp_err_t ws2812_del(led_strip_t *strip) +{ + ws2812_t *ws2812 = __containerof(strip, ws2812_t, parent); + free(ws2812); + return ESP_OK; +} + +led_strip_t *led_strip_new_rmt_ws2812(const led_strip_config_t *config) +{ + led_strip_t *ret = NULL; + STRIP_CHECK(config, "configuration can't be null", err, NULL); + + // 24 bits per led + uint32_t ws2812_size = sizeof(ws2812_t) + config->max_leds * 3; + ws2812_t *ws2812 = calloc(1, ws2812_size); + STRIP_CHECK(ws2812, "request memory for ws2812 failed", err, NULL); + + uint32_t counter_clk_hz = 0; + STRIP_CHECK(rmt_get_counter_clock((rmt_channel_t)config->dev, &counter_clk_hz) == ESP_OK, + "get rmt counter clock failed", err, NULL); + // ns -> ticks + float ratio = (float)counter_clk_hz / 1e9; + ws2812_t0h_ticks = (uint32_t)(ratio * WS2812_T0H_NS); + ws2812_t0l_ticks = (uint32_t)(ratio * WS2812_T0L_NS); + ws2812_t1h_ticks = (uint32_t)(ratio * WS2812_T1H_NS); + ws2812_t1l_ticks = (uint32_t)(ratio * WS2812_T1L_NS); + + // set ws2812 to rmt adapter + rmt_translator_init((rmt_channel_t)config->dev, ws2812_rmt_adapter); + + ws2812->rmt_channel = (rmt_channel_t)config->dev; + ws2812->strip_len = config->max_leds; + + ws2812->parent.set_pixel = ws2812_set_pixel; + ws2812->parent.refresh = ws2812_refresh; + ws2812->parent.clear = ws2812_clear; + ws2812->parent.del = ws2812_del; + + return &ws2812->parent; +err: + return ret; +} diff --git a/hw/bsp/esp32s3/family.cmake b/hw/bsp/esp32s3/family.cmake new file mode 100644 index 00000000..558ec575 --- /dev/null +++ b/hw/bsp/esp32s3/family.cmake @@ -0,0 +1,6 @@ +cmake_minimum_required(VERSION 3.5) + +# Add example src and bsp directories +set(EXTRA_COMPONENT_DIRS "src" "${TOP}/hw/bsp/esp32s3/boards" "${TOP}/hw/bsp/esp32s3/components") +include($ENV{IDF_PATH}/tools/cmake/project.cmake) +set(SUPPORTED_TARGETS esp32s3) diff --git a/hw/bsp/esp32s3/family.mk b/hw/bsp/esp32s3/family.mk new file mode 100644 index 00000000..cf153ffc --- /dev/null +++ b/hw/bsp/esp32s3/family.mk @@ -0,0 +1,26 @@ +#DEPS_SUBMODULES += + +.PHONY: all clean flash bootloader-flash app-flash erase monitor dfu-flash dfu + +all: + idf.py -B$(BUILD) -DFAMILY=$(FAMILY) -DBOARD=$(BOARD) $(CMAKE_DEFSYM) -DIDF_TARGET=esp32s3 build + +build: all + +clean: + idf.py -B$(BUILD) -DFAMILY=$(FAMILY) -DBOARD=$(BOARD) $(CMAKE_DEFSYM) clean + +fullclean: + if test -f sdkconfig; then $(RM) -f sdkconfig ; fi + if test -d $(BUILD); then $(RM) -rf $(BUILD) ; fi + +flash bootloader-flash app-flash erase monitor dfu-flash dfu: + idf.py -B$(BUILD) -DFAMILY=$(FAMILY) -DBOARD=$(BOARD) $(CMAKE_DEFSYM) $@ + +uf2: $(BUILD)/$(PROJECT).uf2 + +UF2_FAMILY_ID = 0xc47e5767 +$(BUILD)/$(PROJECT).uf2: $(BUILD)/$(PROJECT).bin + @echo CREATE $@ + $(PYTHON) $(TOP)/tools/uf2/utils/uf2conv.py -f $(UF2_FAMILY_ID) -b 0x0 -c -o $@ $^ + diff --git a/hw/bsp/esp32sx/boards/adafruit_feather_esp32s2/CMakeLists.txt b/hw/bsp/esp32sx/boards/adafruit_feather_esp32s2/CMakeLists.txt deleted file mode 100644 index fc7f5a43..00000000 --- a/hw/bsp/esp32sx/boards/adafruit_feather_esp32s2/CMakeLists.txt +++ /dev/null @@ -1,15 +0,0 @@ -# Apply board specific context here -target_include_directories(${COMPONENT_LIB} PRIVATE .) - -message(STATUS "Apply board specific content ${BOARD}: $ENV{IDF_TARGET} " ) -idf_build_get_property(idf_target IDF_TARGET) - -if(NOT ${idf_target} STREQUAL "esp32s2") - message(STATUS "Incorrect target for board ${BOARD}: $ENV{IDF_TARGET} " ) - set(IDF_TARGET "esp32s2" FORCE) -endif() - -target_compile_options(${COMPONENT_TARGET} PUBLIC - "-DCFG_TUSB_MCU=OPT_MCU_ESP32S2" - "-DCFG_TUSB_OS=OPT_OS_FREERTOS" -) \ No newline at end of file diff --git a/hw/bsp/esp32sx/boards/adafruit_feather_esp32s2/board.mk b/hw/bsp/esp32sx/boards/adafruit_feather_esp32s2/board.mk deleted file mode 100644 index 7308a9f6..00000000 --- a/hw/bsp/esp32sx/boards/adafruit_feather_esp32s2/board.mk +++ /dev/null @@ -1,3 +0,0 @@ -IDF_TARGET = esp32s2 - -$(info Processing of board.mk for board: $(BOARD){$(BOARD_PATH)}, family: $(FAMILY), target: $(IDF_TARGET)) \ No newline at end of file diff --git a/hw/bsp/esp32sx/boards/adafruit_magtag_29gray/CMakeLists.txt b/hw/bsp/esp32sx/boards/adafruit_magtag_29gray/CMakeLists.txt deleted file mode 100644 index fc7f5a43..00000000 --- a/hw/bsp/esp32sx/boards/adafruit_magtag_29gray/CMakeLists.txt +++ /dev/null @@ -1,15 +0,0 @@ -# Apply board specific context here -target_include_directories(${COMPONENT_LIB} PRIVATE .) - -message(STATUS "Apply board specific content ${BOARD}: $ENV{IDF_TARGET} " ) -idf_build_get_property(idf_target IDF_TARGET) - -if(NOT ${idf_target} STREQUAL "esp32s2") - message(STATUS "Incorrect target for board ${BOARD}: $ENV{IDF_TARGET} " ) - set(IDF_TARGET "esp32s2" FORCE) -endif() - -target_compile_options(${COMPONENT_TARGET} PUBLIC - "-DCFG_TUSB_MCU=OPT_MCU_ESP32S2" - "-DCFG_TUSB_OS=OPT_OS_FREERTOS" -) \ No newline at end of file diff --git a/hw/bsp/esp32sx/boards/adafruit_magtag_29gray/board.mk b/hw/bsp/esp32sx/boards/adafruit_magtag_29gray/board.mk deleted file mode 100644 index 7308a9f6..00000000 --- a/hw/bsp/esp32sx/boards/adafruit_magtag_29gray/board.mk +++ /dev/null @@ -1,3 +0,0 @@ -IDF_TARGET = esp32s2 - -$(info Processing of board.mk for board: $(BOARD){$(BOARD_PATH)}, family: $(FAMILY), target: $(IDF_TARGET)) \ No newline at end of file diff --git a/hw/bsp/esp32sx/boards/adafruit_metro_esp32s2/CMakeLists.txt b/hw/bsp/esp32sx/boards/adafruit_metro_esp32s2/CMakeLists.txt deleted file mode 100644 index fc7f5a43..00000000 --- a/hw/bsp/esp32sx/boards/adafruit_metro_esp32s2/CMakeLists.txt +++ /dev/null @@ -1,15 +0,0 @@ -# Apply board specific context here -target_include_directories(${COMPONENT_LIB} PRIVATE .) - -message(STATUS "Apply board specific content ${BOARD}: $ENV{IDF_TARGET} " ) -idf_build_get_property(idf_target IDF_TARGET) - -if(NOT ${idf_target} STREQUAL "esp32s2") - message(STATUS "Incorrect target for board ${BOARD}: $ENV{IDF_TARGET} " ) - set(IDF_TARGET "esp32s2" FORCE) -endif() - -target_compile_options(${COMPONENT_TARGET} PUBLIC - "-DCFG_TUSB_MCU=OPT_MCU_ESP32S2" - "-DCFG_TUSB_OS=OPT_OS_FREERTOS" -) \ No newline at end of file diff --git a/hw/bsp/esp32sx/boards/adafruit_metro_esp32s2/board.mk b/hw/bsp/esp32sx/boards/adafruit_metro_esp32s2/board.mk deleted file mode 100644 index 7308a9f6..00000000 --- a/hw/bsp/esp32sx/boards/adafruit_metro_esp32s2/board.mk +++ /dev/null @@ -1,3 +0,0 @@ -IDF_TARGET = esp32s2 - -$(info Processing of board.mk for board: $(BOARD){$(BOARD_PATH)}, family: $(FAMILY), target: $(IDF_TARGET)) \ No newline at end of file diff --git a/hw/bsp/esp32sx/boards/espressif_addax_1/board.mk b/hw/bsp/esp32sx/boards/espressif_addax_1/board.mk deleted file mode 100644 index 6c5bda9b..00000000 --- a/hw/bsp/esp32sx/boards/espressif_addax_1/board.mk +++ /dev/null @@ -1,3 +0,0 @@ -IDF_TARGET = esp32s3 - -$(info Processing of board.mk for board: $(BOARD){$(BOARD_PATH)}, family: $(FAMILY), target: $(IDF_TARGET)) \ No newline at end of file diff --git a/hw/bsp/esp32sx/boards/espressif_kaluga_1/CMakeLists.txt b/hw/bsp/esp32sx/boards/espressif_kaluga_1/CMakeLists.txt deleted file mode 100644 index 9b76625a..00000000 --- a/hw/bsp/esp32sx/boards/espressif_kaluga_1/CMakeLists.txt +++ /dev/null @@ -1,14 +0,0 @@ -# Apply board specific context here -target_include_directories(${COMPONENT_LIB} PRIVATE .) - -idf_build_get_property(idf_target IDF_TARGET) - -if( NOT ${idf_target} STREQUAL "esp32s2") - message(STATUS "Incorrect target for board ${BOARD}: $ENV{IDF_TARGET} " ) - set(IDF_TARGET "esp32s2" FORCE) -endif() - -target_compile_options(${COMPONENT_TARGET} PUBLIC - "-DCFG_TUSB_MCU=OPT_MCU_ESP32S2" - "-DCFG_TUSB_OS=OPT_OS_FREERTOS" -) \ No newline at end of file diff --git a/hw/bsp/esp32sx/boards/espressif_kaluga_1/board.mk b/hw/bsp/esp32sx/boards/espressif_kaluga_1/board.mk deleted file mode 100644 index 7308a9f6..00000000 --- a/hw/bsp/esp32sx/boards/espressif_kaluga_1/board.mk +++ /dev/null @@ -1,3 +0,0 @@ -IDF_TARGET = esp32s2 - -$(info Processing of board.mk for board: $(BOARD){$(BOARD_PATH)}, family: $(FAMILY), target: $(IDF_TARGET)) \ No newline at end of file diff --git a/hw/bsp/esp32sx/boards/espressif_saola_1/CMakeLists.txt b/hw/bsp/esp32sx/boards/espressif_saola_1/CMakeLists.txt deleted file mode 100644 index c034a11a..00000000 --- a/hw/bsp/esp32sx/boards/espressif_saola_1/CMakeLists.txt +++ /dev/null @@ -1,14 +0,0 @@ -# Apply board specific context here -target_include_directories(${COMPONENT_LIB} PUBLIC .) - -idf_build_get_property(idf_target IDF_TARGET) - -if(NOT ${idf_target} STREQUAL "esp32s2") - message(STATUS "Incorrect target for board ${BOARD}: $ENV{IDF_TARGET} " ) - set(IDF_TARGET "esp32s2" FORCE) -endif() - -target_compile_options(${COMPONENT_TARGET} PUBLIC - "-DCFG_TUSB_MCU=OPT_MCU_ESP32S2" - "-DCFG_TUSB_OS=OPT_OS_FREERTOS" -) \ No newline at end of file diff --git a/hw/bsp/esp32sx/boards/espressif_saola_1/board.mk b/hw/bsp/esp32sx/boards/espressif_saola_1/board.mk deleted file mode 100644 index 7308a9f6..00000000 --- a/hw/bsp/esp32sx/boards/espressif_saola_1/board.mk +++ /dev/null @@ -1,3 +0,0 @@ -IDF_TARGET = esp32s2 - -$(info Processing of board.mk for board: $(BOARD){$(BOARD_PATH)}, family: $(FAMILY), target: $(IDF_TARGET)) \ No newline at end of file diff --git a/hw/bsp/esp32sx/family.cmake b/hw/bsp/esp32sx/family.cmake deleted file mode 100644 index 54f36e5d..00000000 --- a/hw/bsp/esp32sx/family.cmake +++ /dev/null @@ -1,6 +0,0 @@ -cmake_minimum_required(VERSION 3.5) - -# Add example src and bsp directories -set(EXTRA_COMPONENT_DIRS "src" "${TOP}/hw/bsp/esp32sx/boards" "${TOP}/hw/bsp/esp32sx/components") -include($ENV{IDF_PATH}/tools/cmake/project.cmake) -set(SUPPORTED_TARGETS esp32s2 esp32s3) diff --git a/tools/build_esp32sx.py b/tools/build_esp32sx.py index 82352c26..91953f08 100644 --- a/tools/build_esp32sx.py +++ b/tools/build_esp32sx.py @@ -35,7 +35,10 @@ all_examples.sort() # Build all boards if not specified all_boards = [] -for entry in os.scandir("hw/bsp/esp32sx/boards"): +for entry in os.scandir("hw/bsp/esp32s2/boards"): + if entry.is_dir(): + all_boards.append(entry.name) +for entry in os.scandir("hw/bsp/esp32s3/boards"): if entry.is_dir(): all_boards.append(entry.name) filter_with_input(all_boards) diff --git a/tools/build_family.py b/tools/build_family.py index 35a61f97..c4678190 100644 --- a/tools/build_family.py +++ b/tools/build_family.py @@ -38,7 +38,7 @@ all_examples.sort() # If family are not specified in arguments, build all all_families = [] for entry in os.scandir("hw/bsp"): - if entry.is_dir() and os.path.isdir(entry.path + "/boards") and entry.name != "esp32sx": + if entry.is_dir() and os.path.isdir(entry.path + "/boards") and entry.name != "esp32s2" and entry.name != "esp32s3": all_families.append(entry.name) filter_with_input(all_families) From 91e574075d159a7f04280743d93279e6c6efd227 Mon Sep 17 00:00:00 2001 From: Alex Lisitsyn <37483886+alisitsyn@users.noreply.github.com> Date: Fri, 16 Apr 2021 15:49:21 +0200 Subject: [PATCH 3/4] espressif: temporarily remove the espressif_addax_1 board from test --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 41ce430a..c0adb351 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -192,7 +192,7 @@ jobs: - 'adafruit_feather_esp32s2' - 'adafruit_magtag_29gray' - 'adafruit_metro_esp32s2' - - 'espressif_addax_1' + # - 'espressif_addax_1' # temporarily remove the board from test while espressif MR is not merged - 'espressif_kaluga_1' - 'espressif_saola_1' From 803b755554a69221f6d05a4b245f24045dfcd644 Mon Sep 17 00:00:00 2001 From: hathach Date: Sun, 18 Apr 2021 01:50:16 +0700 Subject: [PATCH 4/4] update per review --- .github/workflows/build.yml | 4 +++- examples/device/board_test/CMakeLists.txt | 2 +- examples/device/cdc_msc_freertos/CMakeLists.txt | 2 +- examples/device/hid_composite_freertos/CMakeLists.txt | 2 +- examples/make.mk | 3 --- 5 files changed, 6 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c0adb351..f9861202 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -189,12 +189,14 @@ jobs: matrix: board: # Alphabetical order + # ESP32-S2 - 'adafruit_feather_esp32s2' - 'adafruit_magtag_29gray' - 'adafruit_metro_esp32s2' - # - 'espressif_addax_1' # temporarily remove the board from test while espressif MR is not merged - 'espressif_kaluga_1' - 'espressif_saola_1' + # ESP32-S3 + # - 'espressif_addax_1' # temporarily remove the board from test while espressif MR is not merged steps: - name: Setup Python diff --git a/examples/device/board_test/CMakeLists.txt b/examples/device/board_test/CMakeLists.txt index 2b771263..698b0c96 100644 --- a/examples/device/board_test/CMakeLists.txt +++ b/examples/device/board_test/CMakeLists.txt @@ -7,7 +7,7 @@ set(TOP "../../..") get_filename_component(TOP "${TOP}" REALPATH) # Check for -DFAMILY= -if(FAMILY MATCHES "^(esp32s[2-3])*") +if(FAMILY MATCHES "^esp32s[2-3]") cmake_minimum_required(VERSION 3.5) include(${TOP}/hw/bsp/${FAMILY}/family.cmake) diff --git a/examples/device/cdc_msc_freertos/CMakeLists.txt b/examples/device/cdc_msc_freertos/CMakeLists.txt index cf2dd822..aaac4d89 100644 --- a/examples/device/cdc_msc_freertos/CMakeLists.txt +++ b/examples/device/cdc_msc_freertos/CMakeLists.txt @@ -9,7 +9,7 @@ set(TOP "../../..") get_filename_component(TOP "${TOP}" REALPATH) # Check for -DFAMILY= -if(FAMILY MATCHES "^(esp32s[2-3])*") +if(FAMILY MATCHES "^esp32s[2-3]") include(${TOP}/hw/bsp/${FAMILY}/family.cmake) project(${PROJECT}) diff --git a/examples/device/hid_composite_freertos/CMakeLists.txt b/examples/device/hid_composite_freertos/CMakeLists.txt index e2ba307a..ed734b95 100644 --- a/examples/device/hid_composite_freertos/CMakeLists.txt +++ b/examples/device/hid_composite_freertos/CMakeLists.txt @@ -9,7 +9,7 @@ set(TOP "../../..") get_filename_component(TOP "${TOP}" REALPATH) # Check for -DFAMILY= -if(FAMILY MATCHES "^(esp32s[2-3])*") +if(FAMILY MATCHES "^esp32s[2-3]") include(${TOP}/hw/bsp/${FAMILY}/family.cmake) project(${PROJECT}) else() diff --git a/examples/make.mk b/examples/make.mk index 09ddb139..6366d6ce 100644 --- a/examples/make.mk +++ b/examples/make.mk @@ -27,9 +27,6 @@ endif # Board within family ifeq ($(BOARD_PATH),) BOARD_PATH := $(subst $(TOP)/,,$(wildcard $(TOP)/hw/bsp/*/boards/$(BOARD))) -ifneq ($(wildcard $(TOP)/hw/bsp/*/boards/$(BOARD)/board.mk),) - include $(TOP)/hw/bsp/*/boards/$(BOARD)/board.mk -endif FAMILY := $(word 3, $(subst /, ,$(BOARD_PATH))) FAMILY_PATH = hw/bsp/$(FAMILY) endif