diff --git a/boards/holybro/kakuteh7mini/default.px4board b/boards/holybro/kakuteh7mini/default.px4board index 5e2ea7fb71..ef755a1ab0 100644 --- a/boards/holybro/kakuteh7mini/default.px4board +++ b/boards/holybro/kakuteh7mini/default.px4board @@ -1,5 +1,6 @@ CONFIG_BOARD_TOOLCHAIN="arm-none-eabi" CONFIG_BOARD_ARCHITECTURE="cortex-m7" +CONFIG_BOARD_ROOT_PATH="/fs/flash" CONFIG_BOARD_SERIAL_GPS1="/dev/ttyS3" CONFIG_BOARD_SERIAL_TEL1="/dev/ttyS0" CONFIG_BOARD_SERIAL_TEL2="/dev/ttyS1" diff --git a/boards/holybro/kakuteh7mini/init/rc.board_defaults b/boards/holybro/kakuteh7mini/init/rc.board_defaults index f2534d1709..f9562dba85 100644 --- a/boards/holybro/kakuteh7mini/init/rc.board_defaults +++ b/boards/holybro/kakuteh7mini/init/rc.board_defaults @@ -32,11 +32,10 @@ param set-default CBRK_BUZZER 782090 param set-default IMU_GYRO_RATEMAX 2000 +# W25N NAND flash with littlefs (128 MB): small log file size so we can keep +# a few recent logs. Default SDLOG_ROTATE=90 keeps at least 10% free during +# writing (no bad block management yet, so avoid hammering the flash near full). +param set-default SDLOG_MAX_SIZE 30 + # Store missions in RAM param set-default SYS_DM_BACKEND 1 - -# Ignore that there is no SD card -param set-default COM_ARM_SDCARD 0 - -# Disable logging -param set-default SDLOG_BACKEND 0 diff --git a/boards/holybro/kakuteh7mini/nuttx-config/include/board_dma_map.h b/boards/holybro/kakuteh7mini/nuttx-config/include/board_dma_map.h index d23e0d4120..870a3cc179 100644 --- a/boards/holybro/kakuteh7mini/nuttx-config/include/board_dma_map.h +++ b/boards/holybro/kakuteh7mini/nuttx-config/include/board_dma_map.h @@ -33,6 +33,9 @@ #pragma once +#define DMAMAP_SPI1_RX DMAMAP_DMA12_SPI1RX_0 /* DMA1 */ +#define DMAMAP_SPI1_TX DMAMAP_DMA12_SPI1TX_0 /* DMA1 */ + #define DMAMAP_SPI4_RX DMAMAP_DMA12_SPI4RX_1 /* DMA2 */ #define DMAMAP_SPI4_TX DMAMAP_DMA12_SPI4TX_1 /* DMA2 */ diff --git a/boards/holybro/kakuteh7mini/nuttx-config/nsh/defconfig b/boards/holybro/kakuteh7mini/nuttx-config/nsh/defconfig index 4bdb66ac34..4c3a983148 100644 --- a/boards/holybro/kakuteh7mini/nuttx-config/nsh/defconfig +++ b/boards/holybro/kakuteh7mini/nuttx-config/nsh/defconfig @@ -98,6 +98,10 @@ CONFIG_FDCLONE_STDIO=y CONFIG_FS_BINFS=y CONFIG_FS_CROMFS=y CONFIG_FS_FAT=y +CONFIG_FS_LITTLEFS=y +CONFIG_FS_LITTLEFS_CACHE_SIZE_FACTOR=1 +CONFIG_FS_LITTLEFS_PROGRAM_SIZE_FACTOR=1 +CONFIG_FS_LITTLEFS_READ_SIZE_FACTOR=1 CONFIG_FS_FATTIME=y CONFIG_FS_PROCFS=y CONFIG_FS_PROCFS_INCLUDE_PROGMEM=y @@ -126,7 +130,8 @@ CONFIG_MTD=y CONFIG_MTD_BYTE_WRITE=y CONFIG_MTD_PARTITION=y CONFIG_MTD_PROGMEM=y -CONFIG_MTD_RAMTRON=y +# CONFIG_MTD_RAMTRON is not set +CONFIG_MTD_W25N=y CONFIG_NAME_MAX=40 CONFIG_NSH_ARCHINIT=y CONFIG_NSH_ARGCAT=y @@ -135,7 +140,7 @@ CONFIG_NSH_CMDPARMS=y CONFIG_NSH_CROMFSETC=y CONFIG_NSH_LINELEN=128 CONFIG_NSH_MAXARGUMENTS=15 -CONFIG_NSH_MMCSDSPIPORTNO=1 +# CONFIG_NSH_MMCSDSPIPORTNO is not set CONFIG_NSH_NESTDEPTH=8 CONFIG_NSH_QUOTE=y CONFIG_NSH_ROMFSETC=y @@ -148,9 +153,6 @@ CONFIG_PREALLOC_TIMERS=50 CONFIG_PRIORITY_INHERITANCE=y CONFIG_PTHREAD_MUTEX_ROBUST=y CONFIG_PTHREAD_STACK_MIN=512 -CONFIG_RAMTRON_EMULATE_PAGE_SHIFT=5 -CONFIG_RAMTRON_EMULATE_SECTOR_SHIFT=5 -CONFIG_RAMTRON_SETSPEED=y CONFIG_RAM_SIZE=245760 CONFIG_RAM_START=0x20010000 CONFIG_RAW_BINARY=y @@ -188,6 +190,7 @@ CONFIG_STM32H7_BKPSRAM=y CONFIG_STM32H7_DMA1=y CONFIG_STM32H7_DMA2=y CONFIG_STM32H7_DMACAPABLE=y +CONFIG_STM32H7_DMAMUX1=y CONFIG_STM32H7_FLOWCONTROL_BROKEN=y CONFIG_STM32H7_I2C1=y CONFIG_STM32H7_I2C_DYNTIMEO=y @@ -201,6 +204,8 @@ CONFIG_STM32H7_SDMMC1=y CONFIG_STM32H7_SERIALBRK_BSDCOMPAT=y CONFIG_STM32H7_SERIAL_DISABLE_REORDERING=y CONFIG_STM32H7_SPI1=y +CONFIG_STM32H7_SPI1_DMA=y +CONFIG_STM32H7_SPI1_DMA_BUFFER=4096 CONFIG_STM32H7_SPI2=y CONFIG_STM32H7_SPI4=y CONFIG_STM32H7_SPI4_DMA=y @@ -244,4 +249,5 @@ CONFIG_USBDEV=y CONFIG_USBDEV_BUSPOWERED=y CONFIG_USBDEV_MAXPOWER=500 CONFIG_USEC_PER_TICK=1000 +CONFIG_W25N_SPIFREQUENCY=104000000 CONFIG_WATCHDOG=y diff --git a/boards/holybro/kakuteh7mini/src/init.c b/boards/holybro/kakuteh7mini/src/init.c index 4691703e8f..1fc004fa46 100644 --- a/boards/holybro/kakuteh7mini/src/init.c +++ b/boards/holybro/kakuteh7mini/src/init.c @@ -59,6 +59,8 @@ #include #include #include +#include +#include #include #include #include @@ -231,15 +233,58 @@ __EXPORT int board_app_initialize(uintptr_t arg) led_on(LED_RED); } - // MARK: this will *not* work as the minis have a W25N NAND flash chip - /* Get the SPI port for the microSD slot */ - struct spi_dev_s *spi_dev = stm32_spibus_initialize(CONFIG_NSH_MMCSDSPIPORTNO); +#ifdef CONFIG_MTD_W25N + /* Initialize W25N01GV NAND Flash on SPI1 */ + struct spi_dev_s *spi1 = stm32_spibus_initialize(1); - if (!spi_dev) { - syslog(LOG_ERR, "[boot] FAILED to initialize SPI port %d\n", CONFIG_NSH_MMCSDSPIPORTNO); - led_on(LED_BLUE); + if (!spi1) { + syslog(LOG_ERR, "[boot] FAILED to initialize SPI1 for W25N\n"); + led_on(LED_RED); + + } else { + struct mtd_dev_s *mtd = w25n_initialize(spi1, 0); + + if (!mtd) { + syslog(LOG_ERR, "[boot] FAILED to initialize W25N MTD driver\n"); + led_on(LED_RED); + + } else { + int ret = register_mtddriver("/dev/mtd0", mtd, 0755, NULL); + + if (ret < 0) { + syslog(LOG_ERR, "[boot] FAILED to register MTD driver: %d\n", ret); + led_on(LED_RED); + + } else { + syslog(LOG_INFO, "[boot] W25N MTD registered at /dev/mtd0\n"); + + struct mtd_geometry_s geo; + + if (mtd->ioctl(mtd, MTDIOC_GEOMETRY, (unsigned long)((uintptr_t)&geo)) == 0) { + syslog(LOG_INFO, "[boot] W25N: %lu erase blocks, %lu bytes/block, %lu total bytes\n", + (unsigned long)geo.neraseblocks, + (unsigned long)geo.erasesize, + (unsigned long)geo.neraseblocks * (unsigned long)geo.erasesize); + } + +#ifdef CONFIG_FS_LITTLEFS + ret = nx_mount("/dev/mtd0", CONFIG_BOARD_ROOT_PATH, "littlefs", 0, "autoformat"); + + if (ret < 0) { + syslog(LOG_ERR, "[boot] FAILED to mount littlefs: %d\n", ret); + led_on(LED_RED); + + } else { + syslog(LOG_INFO, "[boot] LittleFS mounted at %s\n", CONFIG_BOARD_ROOT_PATH); + } + +#endif + } + } } +#endif + up_udelay(20); #if defined(FLASH_BASED_PARAMS) diff --git a/boards/holybro/kakuteh7mini/src/spi.cpp b/boards/holybro/kakuteh7mini/src/spi.cpp index 462965df7e..1febbabc34 100644 --- a/boards/holybro/kakuteh7mini/src/spi.cpp +++ b/boards/holybro/kakuteh7mini/src/spi.cpp @@ -37,7 +37,7 @@ constexpr px4_spi_bus_t px4_spi_buses[SPI_BUS_MAX_BUS_ITEMS] = { initSPIBus(SPI::Bus::SPI1, { - initSPIDevice(SPIDEV_MMCSD(0), SPI::CS{GPIO::PortA, GPIO::Pin4}) + initSPIDevice(SPIDEV_FLASH(0), SPI::CS{GPIO::PortA, GPIO::Pin4}) // W25N01GV NAND Flash }), initSPIBus(SPI::Bus::SPI2, { initSPIDevice(DRV_OSD_DEVTYPE_ATXXXX, SPI::CS{GPIO::PortB, GPIO::Pin12}),