Skip to content

Commit 7b6fe33

Browse files
authored
Merge pull request #11297 from mikeysklar/esp32c5-board
espressif: add ESP32-C5 support and the ESP32-C5-DevKitC-1-N8R8 board
2 parents 567ad30 + ccf27da commit 7b6fe33

19 files changed

Lines changed: 365 additions & 5 deletions

File tree

ports/espressif/Makefile

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -402,6 +402,29 @@ CHIP_COMPONENTS = \
402402
esp_hal_twai \
403403
esp_hal_usb
404404

405+
else ifeq ($(IDF_TARGET),esp32c5)
406+
LDFLAGS += \
407+
-Tesp32c5.rom.phy.ld \
408+
-Tesp32c5.rom.pp.ld \
409+
-Tesp32c5.rom.net80211.ld \
410+
-Tesp32c5.rom.libc.ld \
411+
-Tesp32c5.rom.version.ld \
412+
-Tesp32c5.rom.coexist.ld \
413+
-Tesp32c5.rom.heap.ld \
414+
-Tesp32c5.rom.systimer.ld \
415+
-Trom.wdt.ld
416+
417+
CHIP_COMPONENTS = \
418+
esp_driver_tsens \
419+
esp_driver_usb_serial_jtag \
420+
esp_hal_dma \
421+
esp_hal_i2s \
422+
esp_hal_pcnt \
423+
esp_hal_pmu \
424+
esp_hal_rmt \
425+
esp_hal_twai \
426+
esp_hal_usb
427+
405428
else ifeq ($(IDF_TARGET),esp32c6)
406429
LDFLAGS += \
407430
-Tesp32c6.rom.phy.ld \
@@ -565,6 +588,8 @@ else ifeq ($(IDF_TARGET),esp32c2)
565588
CFLAGS += -DCFG_TUSB_MCU=OPT_MCU_ESP32C2
566589
else ifeq ($(IDF_TARGET),esp32c3)
567590
CFLAGS += -DCFG_TUSB_MCU=OPT_MCU_ESP32C3
591+
else ifeq ($(IDF_TARGET),esp32c5)
592+
CFLAGS += -DCFG_TUSB_MCU=OPT_MCU_ESP32C5
568593
else ifeq ($(IDF_TARGET),esp32c6)
569594
CFLAGS += -DCFG_TUSB_MCU=OPT_MCU_ESP32C6
570595
else ifeq ($(IDF_TARGET),esp32c61)
@@ -912,6 +937,7 @@ ifneq ($(CIRCUITPY_BLEIO_NATIVE),0)
912937
BLE_IMPL_esp32s3 := esp32c3
913938
BLE_IMPL_esp32c2 := libble
914939
BLE_IMPL_esp32c3 := esp32c3
940+
BLE_IMPL_esp32c5 := libble
915941
BLE_IMPL_esp32c6 := libble
916942
BLE_IMPL_esp32c61 := libble
917943
BLE_IMPL_esp32h2 := libble
@@ -1006,6 +1032,8 @@ else ifeq ($(IDF_TARGET),esp32c2)
10061032
BOOTLOADER_OFFSET = 0x0
10071033
else ifeq ($(IDF_TARGET),esp32c3)
10081034
BOOTLOADER_OFFSET = 0x0
1035+
else ifeq ($(IDF_TARGET),esp32c5)
1036+
BOOTLOADER_OFFSET = 0x2000
10091037
else ifeq ($(IDF_TARGET),esp32c6)
10101038
BOOTLOADER_OFFSET = 0x0
10111039
else ifeq ($(IDF_TARGET),esp32c61)
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// This file is part of the CircuitPython project: https://circuitpython.org
2+
//
3+
// SPDX-FileCopyrightText: Copyright (c) 2020 Scott Shawcroft for Adafruit Industries
4+
//
5+
// SPDX-License-Identifier: MIT
6+
7+
#include "supervisor/board.h"
8+
9+
// Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here.
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// This file is part of the CircuitPython project: https://circuitpython.org
2+
//
3+
// SPDX-FileCopyrightText: Copyright (c) 2019 Scott Shawcroft for Adafruit Industries
4+
//
5+
// SPDX-License-Identifier: MIT
6+
7+
#pragma once
8+
9+
// Micropython setup
10+
11+
#define MICROPY_HW_BOARD_NAME "ESP32-C5-DevKitC-1-N8R8"
12+
#define MICROPY_HW_MCU_NAME "ESP32C5"
13+
14+
#define MICROPY_HW_NEOPIXEL (&pin_GPIO27)
15+
16+
#define DEFAULT_UART_BUS_RX (&pin_GPIO12)
17+
#define DEFAULT_UART_BUS_TX (&pin_GPIO11)
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
CIRCUITPY_CREATOR_ID = 0x000C303A
2+
CIRCUITPY_CREATION_ID = 0x00C50001
3+
4+
IDF_TARGET = esp32c5
5+
6+
CIRCUITPY_ESP_FLASH_MODE = dio
7+
CIRCUITPY_ESP_FLASH_FREQ = 80m
8+
CIRCUITPY_ESP_FLASH_SIZE = 8MB
9+
10+
CIRCUITPY_ESP_PSRAM_SIZE = 8MB
11+
CIRCUITPY_ESP_PSRAM_MODE = qio
12+
CIRCUITPY_ESP_PSRAM_FREQ = 40m
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// This file is part of the CircuitPython project: https://circuitpython.org
2+
//
3+
// SPDX-FileCopyrightText: Copyright (c) 2020 Scott Shawcroft for Adafruit Industries
4+
//
5+
// SPDX-License-Identifier: MIT
6+
7+
#include "shared-bindings/board/__init__.h"
8+
9+
static const mp_rom_map_elem_t board_module_globals_table[] = {
10+
CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS
11+
12+
{ MP_ROM_QSTR(MP_QSTR_IO0), MP_ROM_PTR(&pin_GPIO0) },
13+
{ MP_ROM_QSTR(MP_QSTR_IO1), MP_ROM_PTR(&pin_GPIO1) },
14+
{ MP_ROM_QSTR(MP_QSTR_IO2), MP_ROM_PTR(&pin_GPIO2) },
15+
{ MP_ROM_QSTR(MP_QSTR_IO3), MP_ROM_PTR(&pin_GPIO3) },
16+
{ MP_ROM_QSTR(MP_QSTR_IO4), MP_ROM_PTR(&pin_GPIO4) },
17+
{ MP_ROM_QSTR(MP_QSTR_IO5), MP_ROM_PTR(&pin_GPIO5) },
18+
{ MP_ROM_QSTR(MP_QSTR_IO6), MP_ROM_PTR(&pin_GPIO6) },
19+
{ MP_ROM_QSTR(MP_QSTR_IO7), MP_ROM_PTR(&pin_GPIO7) },
20+
{ MP_ROM_QSTR(MP_QSTR_IO8), MP_ROM_PTR(&pin_GPIO8) },
21+
{ MP_ROM_QSTR(MP_QSTR_IO9), MP_ROM_PTR(&pin_GPIO9) },
22+
{ MP_ROM_QSTR(MP_QSTR_IO10), MP_ROM_PTR(&pin_GPIO10) },
23+
{ MP_ROM_QSTR(MP_QSTR_IO13), MP_ROM_PTR(&pin_GPIO13) },
24+
{ MP_ROM_QSTR(MP_QSTR_IO14), MP_ROM_PTR(&pin_GPIO14) },
25+
26+
{ MP_ROM_QSTR(MP_QSTR_IO23), MP_ROM_PTR(&pin_GPIO23) },
27+
{ MP_ROM_QSTR(MP_QSTR_IO24), MP_ROM_PTR(&pin_GPIO24) },
28+
{ MP_ROM_QSTR(MP_QSTR_IO25), MP_ROM_PTR(&pin_GPIO25) },
29+
{ MP_ROM_QSTR(MP_QSTR_IO26), MP_ROM_PTR(&pin_GPIO26) },
30+
{ MP_ROM_QSTR(MP_QSTR_IO27), MP_ROM_PTR(&pin_GPIO27) },
31+
{ MP_ROM_QSTR(MP_QSTR_IO28), MP_ROM_PTR(&pin_GPIO28) },
32+
33+
{ MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_GPIO27) },
34+
35+
{ MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_GPIO11) },
36+
{ MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_GPIO12) },
37+
38+
{ MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) },
39+
};
40+
MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#
2+
# Espressif IoT Development Framework Configuration
3+
#
4+
#
5+
# Component config
6+
#
7+
#
8+
# LWIP
9+
#
10+
# end of LWIP
11+
12+
# end of Component config
13+
14+
# end of Espressif IoT Development Framework Configuration

ports/espressif/common-hal/analogbufio/BufferedIn.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
#elif defined(CONFIG_IDF_TARGET_ESP32S2)
3434
#define ADC_RESULT_BYTE 2
3535
#define ADC_CONV_LIMIT_EN 0
36-
#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) || defined(CONFIG_IDF_TARGET_ESP32C61)
36+
#elif defined(CONFIG_IDF_TARGET_ESP32C2) || defined(CONFIG_IDF_TARGET_ESP32C3) || defined(CONFIG_IDF_TARGET_ESP32C5) || defined(CONFIG_IDF_TARGET_ESP32C6) || defined(CONFIG_IDF_TARGET_ESP32H2) || defined(CONFIG_IDF_TARGET_ESP32P4) || defined(CONFIG_IDF_TARGET_ESP32C61)
3737
#define ADC_RESULT_BYTE 4
3838
#define ADC_CONV_LIMIT_EN 0
3939
#elif defined(CONFIG_IDF_TARGET_ESP32S3)

ports/espressif/common-hal/analogio/AnalogIn.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030
#define DATA_WIDTH ADC_BITWIDTH_12
3131
#elif defined(CONFIG_IDF_TARGET_ESP32C3)
3232
#define DATA_WIDTH ADC_BITWIDTH_12
33+
#elif defined(CONFIG_IDF_TARGET_ESP32C5)
34+
#define DATA_WIDTH ADC_BITWIDTH_12
3335
#elif defined(CONFIG_IDF_TARGET_ESP32C6)
3436
#define DATA_WIDTH ADC_BITWIDTH_12
3537
#elif defined(CONFIG_IDF_TARGET_ESP32C61)

ports/espressif/common-hal/espidf/__init__.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@
2727
static size_t psram_size_usable(void) {
2828
#ifdef CONFIG_SPIRAM
2929
/* PSRAM chip may be larger than the size we can map into address space */
30-
#ifdef CONFIG_IDF_TARGET_ESP32P4
30+
#if defined(CONFIG_IDF_TARGET_ESP32P4) || defined(CONFIG_IDF_TARGET_ESP32C5)
31+
// These targets don't define SOC_EXTRAM_DATA_SIZE.
3132
size_t s = esp_psram_get_size();
3233
#else
3334
size_t s = MIN(esp_psram_get_size(), SOC_EXTRAM_DATA_SIZE);

ports/espressif/common-hal/microcontroller/Pin.c

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,32 @@ static const uint64_t pin_mask_reset_forbidden =
136136
#endif
137137
#endif // ESP32C3
138138

139+
#if defined(CONFIG_IDF_TARGET_ESP32C5)
140+
// Never ever reset pins used to communicate with SPI flash.
141+
// ports/espressif/esp-idf/components/esp_hal_gpspi/esp32c5/include/soc/spi_pins.h
142+
GPIO_SEL_16 | // MSPI_IOMUX_PIN_NUM_CS0 (flash)
143+
GPIO_SEL_17 | // MSPI_IOMUX_PIN_NUM_MISO
144+
GPIO_SEL_18 | // MSPI_IOMUX_PIN_NUM_WP
145+
GPIO_SEL_19 | // VDD_SPI (powers the in-module flash)
146+
GPIO_SEL_20 | // MSPI_IOMUX_PIN_NUM_HD
147+
GPIO_SEL_21 | // MSPI_IOMUX_PIN_NUM_CLK
148+
GPIO_SEL_22 | // MSPI_IOMUX_PIN_NUM_MOSI
149+
#if CIRCUITPY_ESP_USB_SERIAL_JTAG
150+
// Never ever reset serial/JTAG communication pins. On C5, gpio_ll_func_sel()
151+
// on either clears USB_SERIAL_JTAG.conf0.usb_pad_enable, killing the USB pads.
152+
GPIO_SEL_13 | // USB D- (USB_INT_PHY0_DM_GPIO_NUM)
153+
GPIO_SEL_14 | // USB D+ (USB_INT_PHY0_DP_GPIO_NUM)
154+
#endif
155+
#if defined(CONFIG_SPIRAM)
156+
GPIO_SEL_15 | // MSPI_IOMUX_PIN_NUM_CS1 (PSRAM); keep if PSRAM in use
157+
#endif
158+
#if defined(CONFIG_ESP_CONSOLE_UART_DEFAULT) && CONFIG_ESP_CONSOLE_UART_DEFAULT && CONFIG_ESP_CONSOLE_UART_NUM == 0
159+
// Never reset debug UART/console pins.
160+
GPIO_SEL_11 |
161+
GPIO_SEL_12 |
162+
#endif
163+
#endif // ESP32C5
164+
139165
#if defined(CONFIG_IDF_TARGET_ESP32C6)
140166
// Never ever reset pins used to communicate with SPI flash.
141167
GPIO_SEL_24 | // SPICS0

0 commit comments

Comments
 (0)