You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2024/04/15 05:25:02 UTC

(nuttx) branch master updated: stm32h7/linum-stm32h753bi: Add support to littlefs and nxffs with flash mem. via quadspi

This is an automated email from the ASF dual-hosted git repository.

xiaoxiang 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 5e3cbd1165 stm32h7/linum-stm32h753bi: Add support to littlefs and nxffs with flash mem. via quadspi
5e3cbd1165 is described below

commit 5e3cbd116527870c97c34586db110ba74f7d4538
Author: Jorge Guzman <jo...@gmail.com>
AuthorDate: Wed Mar 6 20:36:58 2024 -0300

    stm32h7/linum-stm32h753bi: Add support to littlefs and nxffs with flash mem. via quadspi
    
    Signed-off-by: Jorge Guzman <jo...@gmail.com>
---
 .../arm/stm32h7/boards/linum-stm32h753bi/index.rst |  40 +++++-
 arch/arm/src/stm32h7/stm32_qspi.c                  |   8 +-
 .../linum-stm32h753bi/configs/littlefs/defconfig   |  69 +++++++++++
 .../linum-stm32h753bi/configs/nxffs/defconfig      |  66 ++++++++++
 .../arm/stm32h7/linum-stm32h753bi/include/board.h  |  16 ++-
 .../stm32h7/linum-stm32h753bi/src/CMakeLists.txt   |   4 +
 boards/arm/stm32h7/linum-stm32h753bi/src/Makefile  |  12 +-
 .../linum-stm32h753bi/src/linum-stm32h753bi.h      |  17 ++-
 .../stm32h7/linum-stm32h753bi/src/stm32_bringup.c  |   8 ++
 .../arm/stm32h7/linum-stm32h753bi/src/stm32_w25q.c | 138 +++++++++++++++++++++
 fs/nxffs/nxffs_dump.c                              |  10 +-
 11 files changed, 370 insertions(+), 18 deletions(-)

diff --git a/Documentation/platforms/arm/stm32h7/boards/linum-stm32h753bi/index.rst b/Documentation/platforms/arm/stm32h7/boards/linum-stm32h753bi/index.rst
index 09cbb3dbc8..abddc0712e 100644
--- a/Documentation/platforms/arm/stm32h7/boards/linum-stm32h753bi/index.rst
+++ b/Documentation/platforms/arm/stm32h7/boards/linum-stm32h753bi/index.rst
@@ -551,4 +551,42 @@ Transmiting a file to PC::
 If you don't have a SDCard on your board, you can mount the TMPFS at /tmp and transfer files to it, 
 but you cannot transfer big files because TMPFS could use the free RAM of your board::
 
-    nsh> mount -t tmpfs /tmp
\ No newline at end of file
+    nsh> mount -t tmpfs /tmp
+
+nxffs
+-----
+This example use the flash memory W25Q128JV via qspi with the nxffs file system::
+
+    NuttShell (NSH) NuttX-12.5.1-RC0
+    nsh> ls
+    /:
+    dev/
+    w25/
+    nsh> cd /w25
+    nsh> echo "hello world!" > message.txt
+    nsh> ls
+    /w25:
+    message.txt
+    nsh> cat message.txt
+    hello world!
+
+littlefs
+--------
+This example use the flash memory W25Q128JV via qspi with the littlefs file system::
+
+    NuttShell (NSH) NuttX-12.5.1-RC0
+    nsh> ls
+    /:
+    dev/
+    w25/
+    nsh> cd /w25
+    nsh> mkdir folder1
+    nsh> cd folder1
+    nsh> echo "hello world!!!!" > message.txt
+    nsh> cat message.txt
+    hello world!!!!
+    nsh> ls
+    /w25/folder1:
+    .
+    ..
+    message.txt
\ No newline at end of file
diff --git a/arch/arm/src/stm32h7/stm32_qspi.c b/arch/arm/src/stm32h7/stm32_qspi.c
index 288766536d..113e9cc242 100644
--- a/arch/arm/src/stm32h7/stm32_qspi.c
+++ b/arch/arm/src/stm32h7/stm32_qspi.c
@@ -1851,7 +1851,7 @@ static uint32_t qspi_setfrequency(struct qspi_dev_s *dev, uint32_t frequency)
       return 0;
     }
 
-  spiinfo("frequency=%d\n", frequency);
+  spiinfo("frequency=%" PRId32 "\n", frequency);
   DEBUGASSERT(priv);
 
   /* Wait till BUSY flag reset */
@@ -1905,14 +1905,14 @@ static uint32_t qspi_setfrequency(struct qspi_dev_s *dev, uint32_t frequency)
   /* Calculate the new actual frequency */
 
   actual = QSPI_CLK_FREQUENCY / prescaler;
-  spiinfo("prescaler=%d actual=%d\n", prescaler, actual);
+  spiinfo("prescaler=%" PRId32 " actual=%" PRId32 "\n", prescaler, actual);
 
   /* Save the frequency setting */
 
   priv->frequency = frequency;
   priv->actual    = actual;
 
-  spiinfo("Frequency %d->%d\n", frequency, actual);
+  spiinfo("Frequency %" PRId32 "->%" PRId32 "\n", frequency, actual);
   return actual;
 }
 
@@ -1983,7 +1983,7 @@ static void qspi_setmode(struct qspi_dev_s *dev, enum qspi_mode_e mode)
         }
 
       qspi_putreg(priv, regval, STM32_QUADSPI_DCR_OFFSET);
-      spiinfo("DCR=%08x\n", regval);
+      spiinfo("DCR=%08" PRIx32 "\n", regval);
 
       /* Save the mode so that subsequent re-configurations will be faster */
 
diff --git a/boards/arm/stm32h7/linum-stm32h753bi/configs/littlefs/defconfig b/boards/arm/stm32h7/linum-stm32h753bi/configs/littlefs/defconfig
new file mode 100644
index 0000000000..8cf685d943
--- /dev/null
+++ b/boards/arm/stm32h7/linum-stm32h753bi/configs/littlefs/defconfig
@@ -0,0 +1,69 @@
+#
+# This file is autogenerated: PLEASE DO NOT EDIT IT.
+#
+# You can use "make menuconfig" to make any modifications to the installed .config file.
+# You can then do "make savedefconfig" to generate a new defconfig file that includes your
+# modifications.
+#
+# CONFIG_NSH_DISABLE_IFCONFIG is not set
+# CONFIG_NSH_DISABLE_PS is not set
+# CONFIG_NSH_QUOTE is not set
+# CONFIG_STANDARD_SERIAL is not set
+# CONFIG_STM32H7_USE_LEGACY_PINMAP is not set
+CONFIG_ARCH="arm"
+CONFIG_ARCH_BOARD="linum-stm32h753bi"
+CONFIG_ARCH_BOARD_LINUM_STM32H753BI=y
+CONFIG_ARCH_CHIP="stm32h7"
+CONFIG_ARCH_CHIP_STM32H753BI=y
+CONFIG_ARCH_CHIP_STM32H7=y
+CONFIG_ARCH_CHIP_STM32H7_CORTEXM7=y
+CONFIG_ARCH_STACKDUMP=y
+CONFIG_ARMV7M_DCACHE=y
+CONFIG_ARMV7M_DCACHE_WRITETHROUGH=y
+CONFIG_ARMV7M_DTCM=y
+CONFIG_ARMV7M_ICACHE=y
+CONFIG_BOARD_LOOPSPERMSEC=43103
+CONFIG_BUILTIN=y
+CONFIG_DEBUG_SYMBOLS=y
+CONFIG_DEFAULT_TASK_STACKSIZE=4096
+CONFIG_EXAMPLES_ALARM=y
+CONFIG_EXAMPLES_ALARM_STACKSIZE=2048
+CONFIG_FS_LITTLEFS=y
+CONFIG_INIT_ENTRYPOINT="nsh_main"
+CONFIG_INTELHEX_BINARY=y
+CONFIG_LIBM=y
+CONFIG_MM_DEFAULT_ALIGNMENT=4
+CONFIG_MM_REGIONS=4
+CONFIG_MTD=y
+CONFIG_MTD_W25QXXXJV=y
+CONFIG_NSH_ARCHINIT=y
+CONFIG_NSH_BUILTIN_APPS=y
+CONFIG_NSH_FILEIOSIZE=512
+CONFIG_NSH_LINELEN=64
+CONFIG_NSH_READLINE=y
+CONFIG_POSIX_SPAWN_DEFAULT_STACKSIZE=2048
+CONFIG_PREALLOC_TIMERS=4
+CONFIG_PTHREAD_STACK_DEFAULT=2048
+CONFIG_RAMMTD=y
+CONFIG_RAM_SIZE=245760
+CONFIG_RAM_START=0x20010000
+CONFIG_RAW_BINARY=y
+CONFIG_RR_INTERVAL=200
+CONFIG_RTC_ALARM=y
+CONFIG_RTC_DATETIME=y
+CONFIG_RTC_DRIVER=y
+CONFIG_SCHED_WAITPID=y
+CONFIG_SPI=y
+CONFIG_START_DAY=6
+CONFIG_START_MONTH=12
+CONFIG_START_YEAR=2011
+CONFIG_STM32H7_PWR=y
+CONFIG_STM32H7_QSPI_INTERRUPTS=y
+CONFIG_STM32H7_QUADSPI=y
+CONFIG_STM32H7_RTC=y
+CONFIG_STM32H7_USART1=y
+CONFIG_SYSTEM_NSH=y
+CONFIG_SYSTEM_NSH_STACKSIZE=2048
+CONFIG_TASK_NAME_SIZE=0
+CONFIG_USART1_SERIAL_CONSOLE=y
+CONFIG_W25QXXXJV_QSPI_FREQUENCY=50000000
diff --git a/boards/arm/stm32h7/linum-stm32h753bi/configs/nxffs/defconfig b/boards/arm/stm32h7/linum-stm32h753bi/configs/nxffs/defconfig
new file mode 100644
index 0000000000..83bd1eec47
--- /dev/null
+++ b/boards/arm/stm32h7/linum-stm32h753bi/configs/nxffs/defconfig
@@ -0,0 +1,66 @@
+#
+# This file is autogenerated: PLEASE DO NOT EDIT IT.
+#
+# You can use "make menuconfig" to make any modifications to the installed .config file.
+# You can then do "make savedefconfig" to generate a new defconfig file that includes your
+# modifications.
+#
+# CONFIG_NSH_DISABLE_IFCONFIG is not set
+# CONFIG_NSH_DISABLE_PS is not set
+# CONFIG_NSH_QUOTE is not set
+# CONFIG_STANDARD_SERIAL is not set
+# CONFIG_STM32H7_USE_LEGACY_PINMAP is not set
+CONFIG_ARCH="arm"
+CONFIG_ARCH_BOARD="linum-stm32h753bi"
+CONFIG_ARCH_BOARD_LINUM_STM32H753BI=y
+CONFIG_ARCH_CHIP="stm32h7"
+CONFIG_ARCH_CHIP_STM32H753BI=y
+CONFIG_ARCH_CHIP_STM32H7=y
+CONFIG_ARCH_CHIP_STM32H7_CORTEXM7=y
+CONFIG_ARCH_STACKDUMP=y
+CONFIG_ARMV7M_DCACHE=y
+CONFIG_ARMV7M_DCACHE_WRITETHROUGH=y
+CONFIG_ARMV7M_DTCM=y
+CONFIG_ARMV7M_ICACHE=y
+CONFIG_BOARD_LOOPSPERMSEC=43103
+CONFIG_BUILTIN=y
+CONFIG_DEBUG_SYMBOLS=y
+CONFIG_EXAMPLES_ALARM=y
+CONFIG_FS_NXFFS=y
+CONFIG_INIT_ENTRYPOINT="nsh_main"
+CONFIG_INTELHEX_BINARY=y
+CONFIG_LIBM=y
+CONFIG_MM_DEFAULT_ALIGNMENT=4
+CONFIG_MM_REGIONS=4
+CONFIG_MTD=y
+CONFIG_MTD_W25QXXXJV=y
+CONFIG_NSH_ARCHINIT=y
+CONFIG_NSH_BUILTIN_APPS=y
+CONFIG_NSH_FILEIOSIZE=512
+CONFIG_NSH_LINELEN=64
+CONFIG_NSH_READLINE=y
+CONFIG_PREALLOC_TIMERS=4
+CONFIG_RAMMTD=y
+CONFIG_RAM_SIZE=245760
+CONFIG_RAM_START=0x20010000
+CONFIG_RAW_BINARY=y
+CONFIG_RR_INTERVAL=200
+CONFIG_RTC_ALARM=y
+CONFIG_RTC_DATETIME=y
+CONFIG_RTC_DRIVER=y
+CONFIG_SCHED_WAITPID=y
+CONFIG_SPI=y
+CONFIG_START_DAY=6
+CONFIG_START_MONTH=12
+CONFIG_START_YEAR=2011
+CONFIG_STM32H7_PWR=y
+CONFIG_STM32H7_QSPI_INTERRUPTS=y
+CONFIG_STM32H7_QUADSPI=y
+CONFIG_STM32H7_RTC=y
+CONFIG_STM32H7_USART1=y
+CONFIG_SYSTEM_NSH=y
+CONFIG_TASK_NAME_SIZE=0
+CONFIG_TESTING_NXFFS=y
+CONFIG_TESTING_NXFFS_MOUNTPT="/mnt"
+CONFIG_USART1_SERIAL_CONSOLE=y
+CONFIG_W25QXXXJV_QSPI_FREQUENCY=50000000
diff --git a/boards/arm/stm32h7/linum-stm32h753bi/include/board.h b/boards/arm/stm32h7/linum-stm32h753bi/include/board.h
index f7d925dff4..0aced1f981 100644
--- a/boards/arm/stm32h7/linum-stm32h753bi/include/board.h
+++ b/boards/arm/stm32h7/linum-stm32h753bi/include/board.h
@@ -379,8 +379,8 @@
 
 /* OTGFS */
 
-#define GPIO_OTGFS_DM  (GPIO_OTGFS_DM_0  | GPIO_SPEED_100MHz)
-#define GPIO_OTGFS_DP  (GPIO_OTGFS_DP_0  | GPIO_SPEED_100MHz)
+#define GPIO_OTGFS_DM  (GPIO_OTGFS_DM_0  | GPIO_SPEED_100MHz) /* PA11 */
+#define GPIO_OTGFS_DP  (GPIO_OTGFS_DP_0  | GPIO_SPEED_100MHz) /* PA12 */
 
 /* SDMMC1 - Used SD Card memory */
 
@@ -411,6 +411,18 @@
 #define GPIO_CAN2_RX      (GPIO_CAN2_RX_2|GPIO_SPEED_50MHz)      /* PB5 - D11 */
 #define GPIO_CAN2_TX      (GPIO_CAN2_TX_2|GPIO_SPEED_50MHz)      /* PB6 - D1 */
 
+/* QSPI Mapping  */
+
+#define GPIO_QSPI_CS  (GPIO_QUADSPI_BK1_NCS_2 | GPIO_FLOAT | GPIO_PUSHPULL | GPIO_SPEED_100MHz) /* PG6 */
+#define GPIO_QSPI_IO0 (GPIO_QUADSPI_BK1_IO0_1 | GPIO_FLOAT | GPIO_PUSHPULL | GPIO_SPEED_100MHz) /* PF8 */
+#define GPIO_QSPI_IO1 (GPIO_QUADSPI_BK1_IO1_1 | GPIO_FLOAT | GPIO_PUSHPULL | GPIO_SPEED_100MHz) /* PF9 */
+#define GPIO_QSPI_IO2 (GPIO_QUADSPI_BK1_IO2_2 | GPIO_FLOAT | GPIO_PUSHPULL | GPIO_SPEED_100MHz) /* PF7 */
+#define GPIO_QSPI_IO3 (GPIO_QUADSPI_BK1_IO3_3 | GPIO_FLOAT | GPIO_PUSHPULL | GPIO_SPEED_100MHz) /* PF6 */
+#define GPIO_QSPI_SCK (GPIO_QUADSPI_CLK_2     | GPIO_FLOAT | GPIO_PUSHPULL | GPIO_SPEED_100MHz) /* PF10 */
+
+/* Select PLL2R to source clock of QSPI */
+#define BOARD_QSPI_CLK  RCC_D1CCIPR_QSPISEL_PLL2
+
 /****************************************************************************
  * Public Data
  ****************************************************************************/
diff --git a/boards/arm/stm32h7/linum-stm32h753bi/src/CMakeLists.txt b/boards/arm/stm32h7/linum-stm32h753bi/src/CMakeLists.txt
index 7f8d7d52a0..fbab4f2191 100644
--- a/boards/arm/stm32h7/linum-stm32h753bi/src/CMakeLists.txt
+++ b/boards/arm/stm32h7/linum-stm32h753bi/src/CMakeLists.txt
@@ -52,6 +52,10 @@ if(CONFIG_PWM)
   list(APPEND SRCS stm32_pwm.c)
 endif()
 
+if(CONFIG_MTD_W25QXXXJV)
+  list(APPEND SRCS stm32_w25q.c)
+endif()
+
 target_sources(board PRIVATE ${SRCS})
 
 set_property(GLOBAL PROPERTY LD_SCRIPT "${NUTTX_BOARD_DIR}/scripts/flash.ld")
diff --git a/boards/arm/stm32h7/linum-stm32h753bi/src/Makefile b/boards/arm/stm32h7/linum-stm32h753bi/src/Makefile
index 6477e3913b..b944d17c6a 100644
--- a/boards/arm/stm32h7/linum-stm32h753bi/src/Makefile
+++ b/boards/arm/stm32h7/linum-stm32h753bi/src/Makefile
@@ -24,10 +24,10 @@ CSRCS = stm32_boot.c stm32_bringup.c
 
 ifeq ($(CONFIG_ARCH_LEDS),y)
 CSRCS += stm32_autoleds.c
-endif
-
-ifeq ($(CONFIG_USERLED),y)
-CSRCS += stm32_userleds.c
+else
+  ifeq ($(CONFIG_USERLED),y)
+  CSRCS += stm32_userleds.c
+  endif
 endif
 
 ifeq ($(CONFIG_STM32H7_OTGFS),y)
@@ -50,6 +50,10 @@ ifeq ($(CONFIG_PWM),y)
 CSRCS += stm32_pwm.c
 endif
 
+ifeq ($(CONFIG_MTD_W25QXXXJV),y)
+CSRCS += stm32_w25q.c
+endif
+
 ifeq ($(CONFIG_BOARDCTL),y)
 CSRCS += stm32_appinitialize.c
 endif
diff --git a/boards/arm/stm32h7/linum-stm32h753bi/src/linum-stm32h753bi.h b/boards/arm/stm32h7/linum-stm32h753bi/src/linum-stm32h753bi.h
index a3e84e130f..6c90d5b47a 100644
--- a/boards/arm/stm32h7/linum-stm32h753bi/src/linum-stm32h753bi.h
+++ b/boards/arm/stm32h7/linum-stm32h753bi/src/linum-stm32h753bi.h
@@ -141,7 +141,7 @@ void weak_function stm32_usbinitialize(void);
  * Name: stm32_dma_alloc_init
  *
  * Description:
- *   Called to create a FAT DMA allocator
+ *   Called to create a FAT DMA allocator.
  *
  * Returned Value:
  *   0 on success or -ENOMEM
@@ -156,7 +156,7 @@ int stm32_dma_alloc_init(void);
  * Name: stm32_sdio_initialize
  *
  * Description:
- *   Initialize SDIO-based MMC/SD card support
+ *   Initialize SDIO-based MMC/SD card support.
  *
  ****************************************************************************/
 
@@ -168,7 +168,7 @@ int stm32_sdio_initialize(void);
  * Name: stm32_at24_init
  *
  * Description:
- *   Initialize and register the EEPROM for 24XX  driver.
+ *   Initialize and register the EEPROM for 24XX driver.
  *
  ****************************************************************************/
 
@@ -187,5 +187,16 @@ int stm32_at24_init(char *path);
 #ifdef CONFIG_PWM
 int stm32_pwm_setup(void);
 #endif
+/****************************************************************************
+ * Name: stm32_n25qxxx_setup
+ *
+ * Description:
+ *   Initialize and register the FLash for N25QXXX driver.
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_MTD_W25QXXXJV
+int stm32_w25qxxx_setup(void);
+#endif
 
 #endif /* __BOARDS_ARM_STM32H7_LINUM_STM32H753BI_SRC_LINUM_STM32H753BI_H */
diff --git a/boards/arm/stm32h7/linum-stm32h753bi/src/stm32_bringup.c b/boards/arm/stm32h7/linum-stm32h753bi/src/stm32_bringup.c
index 74c103a367..08fc6c0268 100644
--- a/boards/arm/stm32h7/linum-stm32h753bi/src/stm32_bringup.c
+++ b/boards/arm/stm32h7/linum-stm32h753bi/src/stm32_bringup.c
@@ -232,6 +232,14 @@ int stm32_bringup(void)
   stm32_fdcansockinitialize(1);
 #  endif
 
+#endif
+
+#ifdef CONFIG_MTD_W25QXXXJV
+  ret = stm32_w25qxxx_setup();
+  if (ret < 0)
+    {
+      syslog(LOG_ERR, "ERROR: stm32_n25qxxx_setup failed: %d\n", ret);
+    }
 #endif
 
   return OK;
diff --git a/boards/arm/stm32h7/linum-stm32h753bi/src/stm32_w25q.c b/boards/arm/stm32h7/linum-stm32h753bi/src/stm32_w25q.c
new file mode 100644
index 0000000000..d49ea6bfdd
--- /dev/null
+++ b/boards/arm/stm32h7/linum-stm32h753bi/src/stm32_w25q.c
@@ -0,0 +1,138 @@
+/****************************************************************************
+ * boards/arm/stm32h7/linum-stm32h753bi/src/stm32_w25q.c
+ *
+ * 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 <sys/types.h>
+#include <stdio.h>
+#include <syslog.h>
+#include <errno.h>
+#include <debug.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include <nuttx/arch.h>
+#include <nuttx/board.h>
+#include <nuttx/fs/fs.h>
+
+#include <arch/board/board.h>
+
+#include <nuttx/mtd/mtd.h>
+#include <nuttx/drivers/drivers.h>
+#include <nuttx/drivers/ramdisk.h>
+
+#ifdef CONFIG_FS_NXFFS
+#include <nuttx/fs/nxffs.h>
+#endif
+
+#ifdef CONFIG_FS_SMARTFS
+#include <nuttx/fs/smart.h>
+#endif
+
+#include "linum-stm32h753bi.h"
+
+#include "stm32_qspi.h"
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: stm32_w25qxxx_setup
+ *
+ * Description:
+ *   This function is called by board-bringup logic to configure the
+ *   flash device.
+ *
+ * Returned Value:
+ *   Zero is returned on success.  Otherwise, a negated errno value is
+ *   returned to indicate the nature of the failure.
+ *
+ ****************************************************************************/
+
+int stm32_w25qxxx_setup(void)
+{
+  struct qspi_dev_s *qspi_dev;
+  struct mtd_dev_s *mtd_dev;
+  int ret = -1;
+
+  qspi_dev = stm32h7_qspi_initialize(0);
+  if (!qspi_dev)
+    {
+      _err("ERROR: Failed to initialize W25 minor %d: %d\n",
+           0, ret);
+      return -1;
+    }
+
+  mtd_dev = w25qxxxjv_initialize(qspi_dev, true);
+  if (!mtd_dev)
+    {
+      _err("ERROR: w25qxxxjv_initialize() failed!\n");
+      return -1;
+    }
+
+#if defined(CONFIG_FS_NXFFS) && !defined(CONFIG_FS_LITTLEFS)
+  /* Initialize to provide NXFFS on the W25QXXX MTD interface */
+
+  ret = nxffs_initialize(mtd_dev);
+  if (ret < 0)
+    {
+      _err("ERROR: NXFFS initialization failed: %d\n", ret);
+      return ret;
+    }
+
+  ret = nx_mount(NULL, "/w25", "nxffs", 0, "autoformat");
+  if (ret < 0)
+    {
+      _err("ERROR: Failed to mount the NXFFS volume: %d\n", ret);
+      return ret;
+    }
+
+#endif
+
+#if !defined(CONFIG_FS_NXFFS) && defined(CONFIG_FS_LITTLEFS)
+  /* Register the MTD driver so that it can be accessed from the
+   * VFS.
+   */
+
+  ret = register_mtddriver("/dev/w25", mtd_dev, 0755, NULL);
+  if (ret < 0)
+    {
+      syslog(LOG_ERR, "ERROR: Failed to register MTD driver: %d\n",
+              ret);
+    }
+
+  /* Mount the LittleFS file system */
+
+  ret = nx_mount("/dev/w25", "/w25", "littlefs", 0, "autoformat");
+  if (ret < 0)
+    {
+      syslog(LOG_ERR,
+              "ERROR: Failed to mount LittleFS at /w25: %d\n",
+              ret);
+    }
+#endif
+
+  return 0;
+}
diff --git a/fs/nxffs/nxffs_dump.c b/fs/nxffs/nxffs_dump.c
index 783751029c..f4bcc88763 100644
--- a/fs/nxffs/nxffs_dump.c
+++ b/fs/nxffs/nxffs_dump.c
@@ -61,7 +61,7 @@ struct nxffs_blkinfo_s
 
 #if defined(CONFIG_DEBUG_FEATURES) && defined(CONFIG_DEBUG_FS)
 static const char g_hdrformat[] = "  BLOCK:OFFS  TYPE  STATE   LENGTH\n";
-static const char g_format[]    = "  %5d:%-5d %s %s %5d\n";
+static const char g_format[]    = "  %5"PRIi32":%-5d %s %s %5"PRIu32"\n";
 #endif
 
 /****************************************************************************
@@ -263,7 +263,8 @@ static inline ssize_t nxffs_analyzedata(FAR struct nxffs_blkinfo_s *blkinfo,
   if (crc != ecrc)
     {
       syslog(LOG_NOTICE, g_format,
-             blkinfo->block, offset, "DATA ", "CRC BAD", datlen);
+             blkinfo->block, offset, "DATA ", "CRC BAD",
+             (long unsigned int)datlen);
       return ERROR;
     }
 
@@ -272,7 +273,8 @@ static inline ssize_t nxffs_analyzedata(FAR struct nxffs_blkinfo_s *blkinfo,
   if (blkinfo->verbose)
     {
       syslog(LOG_NOTICE, g_format,
-             blkinfo->block, offset, "DATA ", "OK     ", datlen);
+             blkinfo->block, offset, "DATA ", "OK     ",
+             (long unsigned int)datlen);
     }
 
   return SIZEOF_NXFFS_DATA_HDR + datlen;
@@ -489,7 +491,7 @@ int nxffs_dump(FAR struct mtd_dev_s *mtd, bool verbose)
         }
     }
 
-  syslog(LOG_NOTICE, "%d blocks analyzed\n", blkinfo.nblocks);
+  syslog(LOG_NOTICE, "%" PRIi32 " blocks analyzed\n", blkinfo.nblocks);
 
   kmm_free(blkinfo.buffer);
   return OK;