Skip to content

Commit

Permalink
Add support for the ESP32-P4
Browse files Browse the repository at this point in the history
USB doesn't currently work. TinyUSB changes need to be upstreamed.
  • Loading branch information
bwhitman authored and tannewt committed Sep 10, 2024
1 parent f603143 commit 10f15e1
Show file tree
Hide file tree
Showing 22 changed files with 401 additions and 27 deletions.
34 changes: 30 additions & 4 deletions ports/espressif/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ CROSS_COMPILE = riscv32-esp-elf-
else ifeq ($(IDF_TARGET),esp32c3)
IDF_TARGET_ARCH = riscv
CROSS_COMPILE = riscv32-esp-elf-
else ifeq ($(IDF_TARGET),esp32p4)
IDF_TARGET_ARCH = riscv
CROSS_COMPILE = riscv32-esp-elf-
else ifeq ($(IDF_TARGET),esp32c6)
IDF_TARGET_ARCH = riscv
CROSS_COMPILE = riscv32-esp-elf-
Expand Down Expand Up @@ -215,7 +218,13 @@ ifeq ($(IDF_TARGET_ARCH),xtensa)

CFLAGS += -mlongcalls -isystem esp-idf/components/xtensa/deprecated_include/ -Wno-error=cpp
else ifeq ($(IDF_TARGET_ARCH),riscv)

ifeq ($(IDF_TARGET),esp32p4)
CFLAGS += -march=rv32imafc_zicsr_zifencei_xesppie -mabi=ilp32f
else
CFLAGS += -march=rv32imac_zicsr_zifencei
endif

LDFLAGS += \
-Lesp-idf/components/riscv/ld \
-Trom.api.ld
Expand Down Expand Up @@ -285,6 +294,16 @@ LDFLAGS += \
-Tesp32c6.rom.wdt.ld


CHIP_COMPONENTS = \
esp_driver_tsens

else ifeq ($(IDF_TARGET),esp32p4)
LDFLAGS += \
-Tesp32p4.rom.newlib.ld \
-Tesp32p4.rom.systimer.ld \
-Tesp32p4.rom.wdt.ld


CHIP_COMPONENTS = \
esp_driver_tsens

Expand Down Expand Up @@ -338,6 +357,8 @@ else ifeq ($(IDF_TARGET),esp32c3)
CFLAGS += -DCFG_TUSB_MCU=OPT_MCU_ESP32C3
else ifeq ($(IDF_TARGET),esp32c6)
CFLAGS += -DCFG_TUSB_MCU=OPT_MCU_ESP32C6
else ifeq ($(IDF_TARGET),esp32p4)
CFLAGS += -DCFG_TUSB_MCU=OPT_MCU_ESP32P4
else ifeq ($(IDF_TARGET),esp32h2)
CFLAGS += -DCFG_TUSB_MCU=OPT_MCU_ESP32H2
else ifeq ($(IDF_TARGET),esp32s2)
Expand Down Expand Up @@ -578,7 +599,10 @@ update-board-sdkconfig: $(BUILD)/esp-idf/config/sdkconfig.h
python tools/update_sdkconfig.py --board=$(BOARD) --debug=$(DEBUG)

BINARY_WIFI_BLOBS = libcore.a libespnow.a libnet80211.a libpp.a libsmartconfig.a
BINARY_BLOBS = esp-idf/components/esp_phy/lib/$(IDF_TARGET)/libphy.a

ifneq ($(IDF_TARGET),esp32p4)
BINARY_BLOBS = esp-idf/components/esp_phy/lib/$(IDF_TARGET)/libphy.a
endif
ifneq ($(CIRCUITPY_WIFI),0)
BINARY_BLOBS += esp-idf/components/esp_coex/lib/$(IDF_TARGET)/libcoexist.a $(addprefix esp-idf/components/esp_wifi/lib/$(IDF_TARGET)/, $(BINARY_WIFI_BLOBS))
ifneq ($(IDF_TARGET),esp32c2)
Expand All @@ -590,9 +614,9 @@ ifeq ($(IDF_TARGET),esp32)
BINARY_BLOBS += esp-idf/components/esp_phy/lib/$(IDF_TARGET)/librtc.a
endif

ESP_IDF_COMPONENTS_LINK = $(IDF_TARGET_ARCH) $(CHIP_COMPONENTS) app_update bootloader_support driver esp_driver_gpio esp_driver_gptimer esp_driver_ledc esp_driver_spi esp_driver_uart efuse esp_adc esp_app_format esp_common esp_event esp_hw_support esp_mm esp_partition esp_phy esp_pm esp_ringbuf esp_rom esp_system esp_timer freertos hal heap log newlib nvs_flash pthread soc spi_flash vfs esp_vfs_console
ESP_IDF_COMPONENTS_LINK = $(IDF_TARGET_ARCH) $(CHIP_COMPONENTS) app_update bootloader_support driver esp_driver_gpio esp_driver_gptimer esp_driver_ledc esp_driver_spi esp_driver_uart efuse esp_adc esp_app_format esp_common esp_event esp_hw_support esp_mm esp_partition esp_pm esp_ringbuf esp_rom esp_system esp_timer freertos hal heap log newlib nvs_flash pthread soc spi_flash vfs esp_vfs_console
ifneq ($(CIRCUITPY_WIFI),0)
ESP_IDF_COMPONENTS_LINK += esp_coex esp_netif esp-tls esp_wifi lwip mbedtls mdns wpa_supplicant
ESP_IDF_COMPONENTS_LINK += esp_coex esp_netif esp-tls esp_wifi lwip mbedtls mdns wpa_supplicant esp_phy
endif
ifneq ($(CIRCUITPY_BLEIO),0)
BLE_IMPL_esp32 := esp32
Expand All @@ -603,7 +627,7 @@ ifneq ($(CIRCUITPY_BLEIO),0)
BLE_IMPL_esp32h2 := libble
BLE_IMPL = $(BLE_IMPL_$(IDF_TARGET))

ESP_IDF_COMPONENTS_LINK += bt
ESP_IDF_COMPONENTS_LINK += bt esp_phy
ifeq ($(BLE_IMPL),esp32)
# BLE will hang the ESP32 and trigger an interrupt watchdog without this undefined symbol at
# link because a weak version of the interrupt that BLE uses will be linked incorrectly.
Expand Down Expand Up @@ -665,6 +689,8 @@ else ifeq ($(IDF_TARGET),esp32c3)
BOOTLOADER_OFFSET = 0x0
else ifeq ($(IDF_TARGET),esp32c6)
BOOTLOADER_OFFSET = 0x0
else ifeq ($(IDF_TARGET),esp32p4)
BOOTLOADER_OFFSET = 0x2000
else ifeq ($(IDF_TARGET),esp32s3)
BOOTLOADER_OFFSET = 0x0
else ifeq ($(IDF_TARGET),esp32s2)
Expand Down
1 change: 1 addition & 0 deletions ports/espressif/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ Support Status:
ESP32-C2, "alpha"
ESP32-C3, "beta"
ESP32-C6, "alpha"
ESP32-P4, "alpha"
ESP32-S2, "stable"
ESP32-S3, "stable"

Expand Down
9 changes: 9 additions & 0 deletions ports/espressif/boards/espressif_esp32p4_function_ev/board.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2020 Scott Shawcroft for Adafruit Industries
//
// SPDX-License-Identifier: MIT

#include "supervisor/board.h"

// Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here.
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2019 Scott Shawcroft for Adafruit Industries
//
// SPDX-License-Identifier: MIT

#pragma once

// Micropython setup

#define MICROPY_HW_BOARD_NAME "ESP32-P4-Function-EV"
#define MICROPY_HW_MCU_NAME "ESP32P4"

#define CIRCUITPY_BOOT_BUTTON (&pin_GPIO0)

#define DEFAULT_UART_BUS_RX (&pin_GPIO38)
#define DEFAULT_UART_BUS_TX (&pin_GPIO37)

#define CIRCUITPY_CONSOLE_UART_TX DEFAULT_UART_BUS_TX
#define CIRCUITPY_CONSOLE_UART_RX DEFAULT_UART_BUS_RX
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# USB_VID = 0x303A
# USB_PID = 0x7003
# USB_PRODUCT = "ESP32-P4-Function-EV"
# USB_MANUFACTURER = "Espressif"

IDF_TARGET = esp32p4

CIRCUITPY_ESP_FLASH_SIZE = 16MB
CIRCUITPY_ESP_FLASH_MODE = opi
CIRCUITPY_ESP_FLASH_FREQ = 80m

CIRCUITPY_ESP_PSRAM_SIZE = 32MB
CIRCUITPY_ESP_PSRAM_MODE = opi
CIRCUITPY_ESP_PSRAM_FREQ = 80m
55 changes: 55 additions & 0 deletions ports/espressif/boards/espressif_esp32p4_function_ev/pins.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2020 Scott Shawcroft for Adafruit Industries
//
// SPDX-License-Identifier: MIT

#include "shared-bindings/board/__init__.h"

static const mp_rom_map_elem_t board_module_globals_table[] = {
CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS

{ MP_ROM_QSTR(MP_QSTR_IO0), MP_ROM_PTR(&pin_GPIO0) },
{ MP_ROM_QSTR(MP_QSTR_IO1), MP_ROM_PTR(&pin_GPIO1) },
{ MP_ROM_QSTR(MP_QSTR_IO2), MP_ROM_PTR(&pin_GPIO2) },
{ MP_ROM_QSTR(MP_QSTR_IO3), MP_ROM_PTR(&pin_GPIO3) },
{ MP_ROM_QSTR(MP_QSTR_IO4), MP_ROM_PTR(&pin_GPIO4) },
{ MP_ROM_QSTR(MP_QSTR_IO5), MP_ROM_PTR(&pin_GPIO5) },
{ MP_ROM_QSTR(MP_QSTR_IO6), MP_ROM_PTR(&pin_GPIO6) },
{ MP_ROM_QSTR(MP_QSTR_IO7), MP_ROM_PTR(&pin_GPIO7) },
{ MP_ROM_QSTR(MP_QSTR_IO8), MP_ROM_PTR(&pin_GPIO8) },
{ MP_ROM_QSTR(MP_QSTR_IO9), MP_ROM_PTR(&pin_GPIO9) },
{ MP_ROM_QSTR(MP_QSTR_IO10), MP_ROM_PTR(&pin_GPIO10) },
{ MP_ROM_QSTR(MP_QSTR_IO11), MP_ROM_PTR(&pin_GPIO11) },
{ MP_ROM_QSTR(MP_QSTR_IO12), MP_ROM_PTR(&pin_GPIO12) },
{ MP_ROM_QSTR(MP_QSTR_IO13), MP_ROM_PTR(&pin_GPIO13) },
{ MP_ROM_QSTR(MP_QSTR_IO14), MP_ROM_PTR(&pin_GPIO14) },
{ MP_ROM_QSTR(MP_QSTR_IO15), MP_ROM_PTR(&pin_GPIO15) },
{ MP_ROM_QSTR(MP_QSTR_IO16), MP_ROM_PTR(&pin_GPIO16) },
{ MP_ROM_QSTR(MP_QSTR_IO17), MP_ROM_PTR(&pin_GPIO17) },
{ MP_ROM_QSTR(MP_QSTR_IO18), MP_ROM_PTR(&pin_GPIO18) },
{ MP_ROM_QSTR(MP_QSTR_IO19), MP_ROM_PTR(&pin_GPIO19) },
{ MP_ROM_QSTR(MP_QSTR_IO20), MP_ROM_PTR(&pin_GPIO20) },
{ MP_ROM_QSTR(MP_QSTR_IO21), MP_ROM_PTR(&pin_GPIO21) },
{ MP_ROM_QSTR(MP_QSTR_IO35), MP_ROM_PTR(&pin_GPIO35) },
{ MP_ROM_QSTR(MP_QSTR_IO36), MP_ROM_PTR(&pin_GPIO36) },
{ MP_ROM_QSTR(MP_QSTR_IO37), MP_ROM_PTR(&pin_GPIO37) },
{ MP_ROM_QSTR(MP_QSTR_IO38), MP_ROM_PTR(&pin_GPIO38) },
{ MP_ROM_QSTR(MP_QSTR_IO39), MP_ROM_PTR(&pin_GPIO39) },
{ MP_ROM_QSTR(MP_QSTR_IO40), MP_ROM_PTR(&pin_GPIO40) },
{ MP_ROM_QSTR(MP_QSTR_IO41), MP_ROM_PTR(&pin_GPIO41) },
{ MP_ROM_QSTR(MP_QSTR_IO42), MP_ROM_PTR(&pin_GPIO42) },
{ MP_ROM_QSTR(MP_QSTR_IO43), MP_ROM_PTR(&pin_GPIO43) },
{ MP_ROM_QSTR(MP_QSTR_IO44), MP_ROM_PTR(&pin_GPIO44) },
{ MP_ROM_QSTR(MP_QSTR_IO45), MP_ROM_PTR(&pin_GPIO45) },
{ MP_ROM_QSTR(MP_QSTR_IO46), MP_ROM_PTR(&pin_GPIO46) },
{ MP_ROM_QSTR(MP_QSTR_IO47), MP_ROM_PTR(&pin_GPIO47) },
{ MP_ROM_QSTR(MP_QSTR_IO48), MP_ROM_PTR(&pin_GPIO48) },
{ MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_GPIO48) },

{ MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_GPIO43) },
{ MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_GPIO44) },

{ MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) },
};
MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);
Empty file.
2 changes: 1 addition & 1 deletion ports/espressif/common-hal/analogbufio/BufferedIn.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
#elif defined(CONFIG_IDF_TARGET_ESP32S2)
#define ADC_RESULT_BYTE 2
#define ADC_CONV_LIMIT_EN 0
#elif defined(CONFIG_IDF_TARGET_ESP32C2) || defined(CONFIG_IDF_TARGET_ESP32C3) || defined(CONFIG_IDF_TARGET_ESP32C6) || defined(CONFIG_IDF_TARGET_ESP32H2)
#elif defined(CONFIG_IDF_TARGET_ESP32C2) || defined(CONFIG_IDF_TARGET_ESP32C3) || defined(CONFIG_IDF_TARGET_ESP32C6) || defined(CONFIG_IDF_TARGET_ESP32H2) || defined(CONFIG_IDF_TARGET_ESP32P4)
#define ADC_RESULT_BYTE 4
#define ADC_CONV_LIMIT_EN 0
#elif defined(CONFIG_IDF_TARGET_ESP32S3)
Expand Down
10 changes: 8 additions & 2 deletions ports/espressif/common-hal/analogio/AnalogIn.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@
#define DATA_WIDTH ADC_BITWIDTH_12
#elif defined(CONFIG_IDF_TARGET_ESP32C6)
#define DATA_WIDTH ADC_BITWIDTH_12
#elif defined(CONFIG_IDF_TARGET_ESP32P4)
#define DATA_WIDTH ADC_BITWIDTH_12
#elif defined(CONFIG_IDF_TARGET_ESP32S2)
#define DATA_WIDTH ADC_BITWIDTH_13
#elif defined(CONFIG_IDF_TARGET_ESP32S3)
Expand Down Expand Up @@ -84,9 +86,10 @@ uint16_t common_hal_analogio_analogin_get_value(analogio_analogin_obj_t *self) {

adc_cali_scheme_ver_t supported_schemes;
adc_cali_check_scheme(&supported_schemes);
#ifndef CONFIG_IDF_TARGET_ESP32P4
adc_cali_scheme_ver_t calibration_scheme = 0;
adc_cali_handle_t calibration;

#endif
#if defined(ADC_CALI_SCHEME_CURVE_FITTING_SUPPORTED) && ADC_CALI_SCHEME_CURVE_FITTING_SUPPORTED
adc_cali_curve_fitting_config_t config = {
.unit_id = self->pin->adc_index,
Expand Down Expand Up @@ -134,8 +137,11 @@ uint16_t common_hal_analogio_analogin_get_value(analogio_analogin_obj_t *self) {

// This corrects non-linear regions of the ADC range with a LUT, so it's a better reading than raw
int voltage;
#ifdef CONFIG_IDF_TARGET_ESP32P4
voltage = 0;
#else
adc_cali_raw_to_voltage(calibration, adc_reading, &voltage);

#endif

#if defined(ADC_CALI_SCHEME_CURVE_FITTING_SUPPORTED) && ADC_CALI_SCHEME_CURVE_FITTING_SUPPORTED
if (calibration_scheme == ADC_CALI_SCHEME_VER_CURVE_FITTING) {
Expand Down
4 changes: 4 additions & 0 deletions ports/espressif/common-hal/espidf/__init__.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,11 @@
static size_t psram_size_usable(void) {
#ifdef CONFIG_SPIRAM
/* PSRAM chip may be larger than the size we can map into address space */
#ifdef CONFIG_IDF_TARGET_ESP32P4
size_t s = esp_psram_get_size();
#else
size_t s = MIN(esp_psram_get_size(), SOC_EXTRAM_DATA_SIZE);
#endif
return s - esp_himem_reserved_area_size();
#else
return 0;
Expand Down
20 changes: 20 additions & 0 deletions ports/espressif/common-hal/microcontroller/Pin.c
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,26 @@ static const uint64_t pin_mask_reset_forbidden =
#endif
#endif // ESP32H2

#if defined(CONFIG_IDF_TARGET_ESP32P4)
// Never ever reset pins used to communicate with the SPI flash.
GPIO_SEL_28 |
GPIO_SEL_29 |
GPIO_SEL_30 |
GPIO_SEL_32 |
GPIO_SEL_33 |
GPIO_SEL_34 |
#if CIRCUITPY_ESP_USB_SERIAL_JTAG
// Never ever reset serial/JTAG communication pins.
GPIO_SEL_50 | // USB D-
GPIO_SEL_51 | // USB D+
#endif
#if defined(CONFIG_ESP_CONSOLE_UART_DEFAULT) && CONFIG_ESP_CONSOLE_UART_DEFAULT && CONFIG_ESP_CONSOLE_UART_NUM == 0
// Never reset debug UART/console pins.
GPIO_SEL_37 |
GPIO_SEL_38 |
#endif
#endif // ESP32P4

#if defined(CONFIG_IDF_TARGET_ESP32S2) || defined(CONFIG_IDF_TARGET_ESP32S3)
#if CIRCUITPY_USB_DEVICE
// Never ever reset USB pins.
Expand Down
7 changes: 7 additions & 0 deletions ports/espressif/common-hal/microcontroller/Processor.c
Original file line number Diff line number Diff line change
Expand Up @@ -107,11 +107,14 @@ void common_hal_mcu_processor_set_frequency(mcu_processor_obj_t *self, uint32_t
}
#endif

#ifndef CONFIG_IDF_TARGET_ESP32P4
static uint8_t swap_nibbles(uint8_t v) {
return ((v << 4) | (v >> 4)) & 0xff;
}
#endif

void common_hal_mcu_processor_get_uid(uint8_t raw_id[]) {
#ifndef CONFIG_IDF_TARGET_ESP32P4
memset(raw_id, 0, COMMON_HAL_MCU_PROCESSOR_UID_LENGTH);

uint8_t *ptr = &raw_id[COMMON_HAL_MCU_PROCESSOR_UID_LENGTH - 1];
Expand Down Expand Up @@ -149,6 +152,10 @@ void common_hal_mcu_processor_get_uid(uint8_t raw_id[]) {
*ptr-- = swap_nibbles(mac_address_part & 0xff);
mac_address_part >>= 8;
*ptr-- = swap_nibbles(mac_address_part & 0xff);
#else
// TODO: Get UID for ESP32-P4.
return;
#endif
}

mcu_reset_reason_t common_hal_mcu_processor_get_reset_reason(void) {
Expand Down
19 changes: 14 additions & 5 deletions ports/espressif/common-hal/microcontroller/__init__.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@
#elif defined(CONFIG_IDF_TARGET_ESP32C6)
#include "soc/lp_aon_reg.h"
#include "esp32c6/rom/rtc.h"
#elif defined(CONFIG_IDF_TARGET_ESP32P4)
#include "esp32p4/rom/rtc.h"
#elif defined(CONFIG_IDF_TARGET_ESP32S2)
#include "soc/rtc_cntl_reg.h"
#include "esp32s2/rom/rtc.h"
Expand Down Expand Up @@ -93,18 +95,22 @@ void common_hal_mcu_on_next_reset(mcu_runmode_t runmode) {
#if defined(CONFIG_IDF_TARGET_ESP32S2) || defined(CONFIG_IDF_TARGET_ESP32S3)
REG_WRITE(RTC_RESET_CAUSE_REG, 0); // reset uf2
#endif
#ifdef SOC_LP_AON_SUPPORTED
#if defined(CONFIG_IDF_TARGET_ESP32P4)
REG_WRITE(LP_SYSTEM_REG_LP_STORE15_REG, 0);
#elif defined(SOC_LP_AON_SUPPORTED)
REG_WRITE(LP_AON_STORE0_REG, 0); // reset safe mode
#else
REG_WRITE(RTC_CNTL_STORE0_REG, 0); // reset safe mode
#endif
#if !defined(CONFIG_IDF_TARGET_ESP32)
#ifdef SOC_LP_AON_SUPPORTED
#if defined(CONFIG_IDF_TARGET_ESP32)
// No UF2 bootloader.
#elif defined(CONFIG_IDF_TARGET_ESP32P4)
REG_WRITE(LP_SYSTEM_REG_SYS_CTRL_REG, 0);
#elif defined(SOC_LP_AON_SUPPORTED)
REG_WRITE(LP_AON_SYS_CFG_REG, 0); // reset bootloader
#else
REG_WRITE(RTC_CNTL_OPTION1_REG, 0); // reset bootloader
#endif
#endif
break;
case RUNMODE_SAFE_MODE:
// enter safe mode on next boot
Expand All @@ -118,7 +124,10 @@ void common_hal_mcu_on_next_reset(mcu_runmode_t runmode) {
#if defined(CONFIG_IDF_TARGET_ESP32S2) || defined(CONFIG_IDF_TARGET_ESP32S3)
chip_usb_set_persist_flags(USBDC_BOOT_DFU);
#endif
#ifdef SOC_LP_AON_SUPPORTED

#if defined(CONFIG_IDF_TARGET_ESP32P4)
REG_WRITE(LP_SYSTEM_REG_SYS_CTRL_REG, LP_SYSTEM_REG_FORCE_DOWNLOAD_BOOT);
#elif defined(SOC_LP_AON_SUPPORTED)
REG_WRITE(LP_AON_SYS_CFG_REG, LP_AON_FORCE_DOWNLOAD_BOOT);
#else
REG_WRITE(RTC_CNTL_OPTION1_REG, RTC_CNTL_FORCE_DOWNLOAD_BOOT);
Expand Down
Empty file.
4 changes: 4 additions & 0 deletions ports/espressif/esp-idf-config/sdkconfig-psram-32MB.defaults
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# CONFIG_SPIRAM_TYPE_AUTO is not set
# CONFIG_SPIRAM_TYPE_ESPPSRAM16 is not set
# CONFIG_SPIRAM_TYPE_ESPPSRAM32 is not set
CONFIG_SPIRAM_TYPE_AUTO=y
Loading

0 comments on commit 10f15e1

Please sign in to comment.