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

commit 3d1f1372a7004daec2cd70d7b2cab6c5c1bb5e2c
Author: raiden00pl <[email protected]>
AuthorDate: Wed Nov 11 10:14:47 2026 +0100

    boards/stm32n6570-dk: Add I2C1, I2C2 and I2C4.
    
    I2C1 (camera connector, Arduino), I2C2 (WM8904 codec, GT911 touch,
    TCPP03) and I2C4 (STMod+), clocked from the HSI and registered as
    /dev/i2c1, /dev/i2c2 and /dev/i2c4 by the common STM32 board code.
    
    Assisted-by: Claude:claude-fable-5-1
    Signed-off-by: raiden00pl <[email protected]>
---
 .../arm/stm32n6/boards/stm32n6570-dk/index.rst     | 14 +++++++++++++
 boards/Kconfig                                     |  1 +
 .../stm32n6/stm32n6570-dk/configs/nsh/defconfig    |  6 ++++++
 boards/arm/stm32n6/stm32n6570-dk/include/board.h   | 23 ++++++++++++++++++++++
 .../arm/stm32n6/stm32n6570-dk/src/stm32_bringup.c  | 18 ++++++++---------
 5 files changed, 52 insertions(+), 10 deletions(-)

diff --git a/Documentation/platforms/arm/stm32n6/boards/stm32n6570-dk/index.rst 
b/Documentation/platforms/arm/stm32n6/boards/stm32n6570-dk/index.rst
index 1b26f95cacf..cc9e3c0497f 100644
--- a/Documentation/platforms/arm/stm32n6/boards/stm32n6570-dk/index.rst
+++ b/Documentation/platforms/arm/stm32n6/boards/stm32n6570-dk/index.rst
@@ -123,6 +123,20 @@ alarms with the ``alarm`` example, e.g. ``alarm 5`` or 
``alarm -a 1 5``.
 The time survives a reset; without a backup battery it is lost on power
 off.
 
+I2C
+===
+
+===== ============ ============================================
+Bus   Pins         Devices
+===== ============ ============================================
+I2C1  PH9, PC1     Camera module connector, Arduino D15/D14
+I2C2  PD14, PD4    WM8904 codec (0x1a), GT911 touch (0x5d), TCPP03
+I2C4  PE13, PE14   STMod+ connector
+===== ============ ============================================
+
+The buses are registered as ``/dev/i2c1``, ``/dev/i2c2`` and ``/dev/i2c4``
+and can be explored with the ``i2c`` tool.
+
 Serial ports
 ============
 
diff --git a/boards/Kconfig b/boards/Kconfig
index e176bac5b8f..04e9f317ec7 100644
--- a/boards/Kconfig
+++ b/boards/Kconfig
@@ -3675,6 +3675,7 @@ config ARCH_BOARD_NUCLEO_N657X0_Q
 config ARCH_BOARD_STM32N6570_DK
        bool "STM32N6570-DK"
        depends on ARCH_CHIP_STM32N657X0
+       select ARCH_BOARD_COMMON
        select ARCH_HAVE_LEDS
        select ARCH_HAVE_BUTTONS
        select ARCH_HAVE_IRQBUTTONS
diff --git a/boards/arm/stm32n6/stm32n6570-dk/configs/nsh/defconfig 
b/boards/arm/stm32n6/stm32n6570-dk/configs/nsh/defconfig
index 78843d6f663..4b55b93a58f 100644
--- a/boards/arm/stm32n6/stm32n6570-dk/configs/nsh/defconfig
+++ b/boards/arm/stm32n6/stm32n6570-dk/configs/nsh/defconfig
@@ -8,6 +8,7 @@
 # CONFIG_ARCH_LEDS is not set
 CONFIG_ARCH="arm"
 CONFIG_ARCH_BOARD="stm32n6570-dk"
+CONFIG_ARCH_BOARD_COMMON=y
 CONFIG_ARCH_BOARD_STM32N6570_DK=y
 CONFIG_ARCH_BUTTONS=y
 CONFIG_ARCH_CHIP="stm32n6"
@@ -25,6 +26,7 @@ CONFIG_EXAMPLES_ALARM=y
 CONFIG_FS_PROCFS=y
 CONFIG_HAVE_CXX=y
 CONFIG_HAVE_CXXINITIALIZE=y
+CONFIG_I2C=y
 CONFIG_IDLETHREAD_STACKSIZE=4096
 CONFIG_INIT_ENTRYPOINT="nsh_main"
 CONFIG_INPUT=y
@@ -45,10 +47,14 @@ CONFIG_RTC_PERIODIC=y
 CONFIG_SCHED_WAITPID=y
 CONFIG_STM32N6_DEBUG=y
 CONFIG_STM32_DMA1=y
+CONFIG_STM32_I2C1=y
+CONFIG_STM32_I2C2=y
+CONFIG_STM32_I2C4=y
 CONFIG_STM32_RNG=y
 CONFIG_STM32_RTC=y
 CONFIG_STM32_USART1=y
 CONFIG_STM32_USART2=y
+CONFIG_SYSTEM_I2CTOOL=y
 CONFIG_SYSTEM_NSH=y
 CONFIG_USART1_SERIAL_CONSOLE=y
 CONFIG_USERLED=y
diff --git a/boards/arm/stm32n6/stm32n6570-dk/include/board.h 
b/boards/arm/stm32n6/stm32n6570-dk/include/board.h
index 839b0c88bd7..7acfbe1f92b 100644
--- a/boards/arm/stm32n6/stm32n6570-dk/include/board.h
+++ b/boards/arm/stm32n6/stm32n6570-dk/include/board.h
@@ -244,6 +244,29 @@
 
 /* Alternate function pin selections ****************************************/
 
+/* I2C GPIOs ****************************************************************/
+
+/* I2C1: camera connector, Arduino D15/D14 (PH9 SCL, PC1 SDA)
+ * I2C2: WM8904 codec, GT911 touch, TCPP03 (PD14 SCL, PD4 SDA)
+ * I2C4: STMod+ connector (PE13 SCL, PE14 SDA)
+ *
+ * All I2C kernel clocks run from the 64 MHz HSI.
+ */
+
+#define GPIO_I2C1_SCL     (GPIO_I2C1_SCL_2 | GPIO_SPEED_50MHZ)
+#define GPIO_I2C1_SDA     (GPIO_I2C1_SDA_1 | GPIO_SPEED_50MHZ)
+#define GPIO_I2C2_SCL     (GPIO_I2C2_SCL_2 | GPIO_SPEED_50MHZ)
+#define GPIO_I2C2_SDA     (GPIO_I2C2_SDA_2 | GPIO_SPEED_50MHZ)
+#define GPIO_I2C4_SCL     (GPIO_I2C4_SCL_2 | GPIO_SPEED_50MHZ)
+#define GPIO_I2C4_SDA     (GPIO_I2C4_SDA_3 | GPIO_SPEED_50MHZ)
+
+#define STM32_RCC_CCIPR4_I2C1SEL RCC_CCIPR4_I2C1SEL_HSI
+#define STM32_RCC_CCIPR4_I2C2SEL RCC_CCIPR4_I2C2SEL_HSI
+#define STM32_RCC_CCIPR4_I2C4SEL RCC_CCIPR4_I2C4SEL_HSI
+#define STM32_I2C1_FREQUENCY     STM32_HSI_FREQUENCY
+#define STM32_I2C2_FREQUENCY     STM32_HSI_FREQUENCY
+#define STM32_I2C4_FREQUENCY     STM32_HSI_FREQUENCY
+
 /* USART1 GPIOs *************************************************************/
 
 /* USART1 (ST-LINK Virtual COM Port): PE5=TX (AF7), PE6=RX (AF7)
diff --git a/boards/arm/stm32n6/stm32n6570-dk/src/stm32_bringup.c 
b/boards/arm/stm32n6/stm32n6570-dk/src/stm32_bringup.c
index d589047cb2c..4382eac0c54 100644
--- a/boards/arm/stm32n6/stm32n6570-dk/src/stm32_bringup.c
+++ b/boards/arm/stm32n6/stm32n6570-dk/src/stm32_bringup.c
@@ -26,7 +26,6 @@
 
 #include <nuttx/config.h>
 
-#include <sys/mount.h>
 #include <sys/types.h>
 #include <syslog.h>
 #include <debug.h>
@@ -38,6 +37,7 @@
 
 #include "stm32_rtc.h"
 #include "stm32n6570-dk.h"
+#include "board_common.h"
 
 #include <arch/board/board.h>
 
@@ -61,21 +61,18 @@
 
 int stm32_bringup(void)
 {
-#if defined(CONFIG_FS_PROCFS) || defined(CONFIG_INPUT_BUTTONS_LOWER) || \
-    (defined(CONFIG_RTC_DRIVER) && defined(CONFIG_STM32_RTC)) || \
-    (!defined(CONFIG_ARCH_LEDS) && defined(CONFIG_USERLED_LOWER))
   int ret;
-#endif
 
-#ifdef CONFIG_FS_PROCFS
-  /* Mount the procfs file system. */
+  /* Initialize the board features common to all STM32 boards: procfs and
+   * the enabled I2C buses.
+   */
 
-  ret = nx_mount(NULL, "/proc", "procfs", 0, NULL);
+  ret = stm32_common_initialize();
   if (ret < 0)
     {
-      syslog(LOG_ERR, "ERROR: Failed to mount procfs at /proc: %d\n", ret);
+      syslog(LOG_ERR, "ERROR: stm32_common_initialize() failed: %d\n",
+             ret);
     }
-#endif
 
 #if !defined(CONFIG_ARCH_LEDS) && defined(CONFIG_USERLED_LOWER)
   /* Register the LED driver */
@@ -107,5 +104,6 @@ int stm32_bringup(void)
     }
 #endif
 
+  UNUSED(ret);
   return OK;
 }

Reply via email to