diff --git a/bsp/nxp/mcx/mcxn/frdm-mcxn947/board/ports/drv_filesystem_spi_flash.c b/bsp/nxp/mcx/mcxn/frdm-mcxn947/board/ports/drv_filesystem_spi_flash.c index be61835796..cac5b830f3 100644 --- a/bsp/nxp/mcx/mcxn/frdm-mcxn947/board/ports/drv_filesystem_spi_flash.c +++ b/bsp/nxp/mcx/mcxn/frdm-mcxn947/board/ports/drv_filesystem_spi_flash.c @@ -18,62 +18,76 @@ #include "dfs.h" #include "dfs_file.h" -#define DBG_TAG "spi-flash" -#define DBG_LVL DBG_INFO -#include - -#if DFS_FILESYSTEMS_MAX < 4 -#error "Please define DFS_FILESYSTEMS_MAX more than 4" -#endif -#if DFS_FILESYSTEM_TYPES_MAX < 4 -#error "Please define DFS_FILESYSTEM_TYPES_MAX more than 4" -#endif - - #define DBG_TAG "app.filesystem_spi_flash" #define DBG_LVL DBG_INFO #include - #define W25Q64_SPI_DEVICE_NAME "spi70" #define W25Q64_SPI_BUS_NAME "spi7" #define W25Q64_SPI_FLASH_NAME "w25qxx" +#define W25Q64_SPI_FLASH_CS_PIN 96 -rt_err_t rt_hw_spi_device_attach(const char *bus_name, const char *device_name, rt_uint32_t pin); +#define W25Q64_FS_MOUNT_PATH "/" -static int filesystem_mount(void) +static int app_filesystem_init(void) { - struct rt_spi_device *spi70 = (struct rt_spi_device *)rt_malloc(sizeof(struct rt_spi_device)); + rt_err_t ret = RT_EOK; + struct rt_spi_device *spi_device = rt_malloc(sizeof(struct rt_spi_device)); - if(!spi70) + if (!spi_device) { - LOG_W("spi sample run failed! can't find %s device!\n","spi7"); + LOG_W("spi sample run failed! can't find %s device!\n", W25Q64_SPI_BUS_NAME); return -RT_ERROR; } - struct rt_spi_configuration cfg; - cfg.data_width = 8; - cfg.mode = RT_SPI_MASTER | RT_SPI_MODE_3 | RT_SPI_MSB; - cfg.max_hz = 50 * 1000 *1000; - rt_spi_configure(spi70, &cfg); + struct rt_spi_configuration cfg = + { + .data_width = 8, + .mode = RT_SPI_MASTER | RT_SPI_MODE_3 | RT_SPI_MSB, + .max_hz = 50 * 1000 * 1000, + }; + ret = rt_spi_configure(spi_device, &cfg); + if (ret != RT_EOK) + { + LOG_E("SPI bus configuration failed.\n"); + return -RT_ERROR; + } - /* legcy issue */ + ret = rt_spi_bus_attach_device_cspin(spi_device, W25Q64_SPI_DEVICE_NAME, W25Q64_SPI_BUS_NAME, W25Q64_SPI_FLASH_CS_PIN, RT_NULL); + if (ret != RT_EOK) + { + LOG_E("SPI flash device attach failed.\n"); + return -RT_ERROR; + } - rt_hw_spi_device_attach(W25Q64_SPI_BUS_NAME, W25Q64_SPI_DEVICE_NAME, 96); - - if(RT_NULL == rt_sfud_flash_probe(W25Q64_SPI_FLASH_NAME, W25Q64_SPI_DEVICE_NAME)) + if (RT_NULL == rt_sfud_flash_probe(W25Q64_SPI_FLASH_NAME, W25Q64_SPI_DEVICE_NAME)) { LOG_E("Flash sfud Failed!\n"); return -RT_ERROR; } - if(dfs_mount(W25Q64_SPI_FLASH_NAME, "/", "elm", 0, 0)) + + if (dfs_mount(W25Q64_SPI_FLASH_NAME, W25Q64_FS_MOUNT_PATH, "elm", 0, 0) != 0) { - LOG_E("dfs mount dev:%s failed!\n", W25Q64_SPI_FLASH_NAME); - return -RT_ERROR; + LOG_W("Initial ELM FAT mount failed, trying to format block device.\n"); + + if (dfs_mkfs("elm", W25Q64_SPI_FLASH_NAME) != 0) + { + LOG_E("Failed to create ELM FAT filesystem.\n"); + return -4; + } + + if (dfs_mount(W25Q64_SPI_FLASH_NAME, W25Q64_FS_MOUNT_PATH, "elm", 0, 0) != 0) + { + LOG_E("Failed to mount ELM FAT filesystem, check mount point.\n"); + return -5; + } } + LOG_I("ELM FAT filesystem mounted.\n"); + return RT_EOK; } -INIT_APP_EXPORT(filesystem_mount); -#endif /* BSP_USING_SPI7/RT_USING_SFUD/RT_USING_DFS/RT_USING_DFS_ELMFAT */ \ No newline at end of file +INIT_APP_EXPORT(app_filesystem_init); + +#endif /* BSP_USING_SPI7/RT_USING_SFUD/RT_USING_DFS/RT_USING_DFS_ELMFAT */