This is an automated email from the ASF dual-hosted git repository.
xiaoxiang781216 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git
The following commit(s) were added to refs/heads/master by this push:
new 61c30d881c8 boards/xtensa/esp32s3/esp32s3-xiao: add SD card support
over SPI2
61c30d881c8 is described below
commit 61c30d881c8a092f1b9a67f549d091fc0a1120f0
Author: Felipe Moura <[email protected]>
AuthorDate: Sun Aug 30 10:55:43 2026 -0300
boards/xtensa/esp32s3/esp32s3-xiao: add SD card support over SPI2
The XIAO ESP32-S3 Sense's onboard microSD slot (Seeed XIAOML Kit) is
wired to SPI2 through the GPIO matrix: SCK=GPIO7, MOSI=GPIO9,
MISO=GPIO8 (confirmed against espressif/arduino-esp32's
XIAO_ESP32S3/pins_arduino.h) and CS=GPIO21 (confirmed against this
project's own working xiaoml_bench_logger.ino, which tries CS
candidates {21, 3} in that order -- GPIO3 is a documented fallback,
not the real pin; a Seeed wiki page that names GPIO3 as CS turned out
to be wrong and was the initial, unsuccessful attempt here).
Wires up board_sdmmc_spi_initialize() (common esp32s3 board code,
CONFIG_MMCSD_SPI) into this board's bringup, and adds the
esp32s3_spi2_status() callback (SPI_STATUS_PRESENT for SPIDEV_MMCSD(0))
that esp32s3-devkit and other in-tree boards already provide -- the
esp32s3-xiao board had no SPI board file at all before this.
Validated on the bench: CMD0/CMD41/CMD58 handshake succeeds, SD ver2
card identified (SanDisk 32GB, 62333952 sectors), mounts as vfat,
survives umount+remount with a written file intact.
Needed board defconfig additions (not included in this NuttX-tree
commit; see the 61680_FW project repo for the board config that turns
this on):
CONFIG_ESP32S3_SPI2=y
CONFIG_ESP32S3_SPI2_CSPIN=21
CONFIG_ESP32S3_SPI2_CLKPIN=7
CONFIG_ESP32S3_SPI2_MOSIPIN=9
CONFIG_ESP32S3_SPI2_MISOPIN=8
CONFIG_MMCSD=y
CONFIG_NSH_MMCSDSPIPORTNO=2
CONFIG_FS_FAT=y
CONFIG_FAT_LFN=y
CONFIG_FAT_LCNAMES=y
Assisted-by: Claude <[email protected]>
Signed-off-by: Felipe Moura <[email protected]>
---
boards/xtensa/esp32s3/esp32s3-xiao/src/Make.defs | 4 ++
.../esp32s3/esp32s3-xiao/src/esp32s3_board_spi.c | 57 ++++++++++++++++++++++
.../esp32s3/esp32s3-xiao/src/esp32s3_bringup.c | 12 +++++
3 files changed, 73 insertions(+)
diff --git a/boards/xtensa/esp32s3/esp32s3-xiao/src/Make.defs
b/boards/xtensa/esp32s3/esp32s3-xiao/src/Make.defs
index 05bf52fb187..e141658834f 100644
--- a/boards/xtensa/esp32s3/esp32s3-xiao/src/Make.defs
+++ b/boards/xtensa/esp32s3/esp32s3-xiao/src/Make.defs
@@ -36,6 +36,10 @@ ifeq ($(CONFIG_DEV_GPIO),y)
CSRCS += esp32s3_gpio.c
endif
+ifeq ($(CONFIG_ESP32S3_SPI),y)
+CSRCS += esp32s3_board_spi.c
+endif
+
DEPPATH += --dep-path board
VPATH += :board
CFLAGS +=
${INCDIR_PREFIX}$(TOPDIR)$(DELIM)arch$(DELIM)$(CONFIG_ARCH)$(DELIM)src$(DELIM)board$(DELIM)board
diff --git a/boards/xtensa/esp32s3/esp32s3-xiao/src/esp32s3_board_spi.c
b/boards/xtensa/esp32s3/esp32s3-xiao/src/esp32s3_board_spi.c
new file mode 100644
index 00000000000..a9de6e81efc
--- /dev/null
+++ b/boards/xtensa/esp32s3/esp32s3-xiao/src/esp32s3_board_spi.c
@@ -0,0 +1,57 @@
+/****************************************************************************
+ * boards/xtensa/esp32s3/esp32s3-xiao/src/esp32s3_board_spi.c
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership. The
+ * ASF licenses this file to you 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.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <nuttx/debug.h>
+
+#include <nuttx/spi/spi.h>
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: esp32s3_spi2_status
+ ****************************************************************************/
+
+#ifdef CONFIG_ESP32S3_SPI2
+
+uint8_t esp32s3_spi2_status(struct spi_dev_s *dev, uint32_t devid)
+{
+ uint8_t status = 0;
+
+ if (devid == SPIDEV_MMCSD(0))
+ {
+ return SPI_STATUS_PRESENT;
+ }
+
+ return status;
+}
+
+#endif
diff --git a/boards/xtensa/esp32s3/esp32s3-xiao/src/esp32s3_bringup.c
b/boards/xtensa/esp32s3/esp32s3-xiao/src/esp32s3_bringup.c
index 5c81b3b0d12..5aac91128a8 100644
--- a/boards/xtensa/esp32s3/esp32s3-xiao/src/esp32s3_bringup.c
+++ b/boards/xtensa/esp32s3/esp32s3-xiao/src/esp32s3_bringup.c
@@ -51,6 +51,10 @@
# include "esp32s3_i2c.h"
#endif
+#if defined(CONFIG_ESP32S3_SDMMC) || defined(CONFIG_MMCSD_SPI)
+# include "esp32s3_board_sdmmc.h"
+#endif
+
#include "esp32s3-xiao.h"
#ifdef CONFIG_USERLED
@@ -123,6 +127,14 @@ int esp32s3_bringup(void)
}
#endif
+#ifdef CONFIG_MMCSD_SPI
+ ret = board_sdmmc_spi_initialize();
+ if (ret < 0)
+ {
+ syslog(LOG_ERR, "ERROR: Failed to initialize SDMMC: %d\n", ret);
+ }
+#endif
+
#ifdef CONFIG_I2C_DRIVER
/* Configure I2C peripheral interfaces */