瀏覽代碼

Merge pull request #52 from YJ98/STM32F407_add_littlefs

Stm32 f407 add littlefs
Meco Jianting Man 3 年之前
父節點
當前提交
1f13b6d58e

+ 11 - 0
bsp/stm32/stm32f407-atk-explorer/board/Kconfig

@@ -91,6 +91,17 @@ menu "Onboard Peripheral Drivers"
             range 0 24000000
             depends on BSP_USING_SDCARD
             default 1000000
+
+        config BSP_USING_SPI_FLASH_LITTLEFS
+            bool "Enable LITTLEFS"
+            select RT_USING_DFS
+            select RT_USING_DFS_ROMFS
+            select RT_USING_MTD_NOR
+            select BSP_USING_SPI_FLASH            
+            select BSP_USING_FS
+            select RT_USING_SYSTEM_WORKQUEUE
+            default n
+
     endmenu
 
 endmenu

+ 67 - 1
bsp/stm32/stm32f407-atk-explorer/board/ports/drv_filesystem.c

@@ -16,6 +16,7 @@
 #include <dfs_romfs.h>
 #include <dfs_fs.h>
 #include <dfs_posix.h>
+#include <fal.h>
 
 #if DFS_FILESYSTEMS_MAX < 4
 #error "Please define DFS_FILESYSTEMS_MAX more than 4"
@@ -75,12 +76,73 @@ static int onboard_sdcard_mount(void)
 }
 #endif
 
+#ifdef BSP_USING_SPI_FLASH_LITTLEFS
+
+#define FS_PARTITION_NAME              "filesystem"
+
+static void spiflash_mount(void *parameter)
+{
+    struct rt_device *mtd_dev = RT_NULL;
+    fal_init();
+    mtd_dev = fal_mtd_nor_device_create(FS_PARTITION_NAME);
+    if (!mtd_dev)
+    {
+        LOG_E("Can't create a mtd device on '%s' partition.", FS_PARTITION_NAME);
+    }
+    while (1)
+    {
+        rt_thread_mdelay(500);
+        if(rt_device_find(FS_PARTITION_NAME) != RT_NULL)
+        {
+            if (dfs_mount(FS_PARTITION_NAME, "/flash", "lfs", 0, 0) == RT_EOK)
+            {
+                LOG_I("spi flash mount to '/flash'");
+                break;
+            }
+            else
+            {
+                LOG_W("spi flash mount to '/flash' failed!");
+            }
+        }
+    }
+}
+
+static int onboard_spiflash_mount(void)
+{
+    rt_thread_t tid;
+
+    if (dfs_mount(FS_PARTITION_NAME, "/flash", "lfs", 0, 0) == RT_EOK)
+    {
+        LOG_I("spi flash mount to '/flash'");
+    }
+    else
+    {
+        tid = rt_thread_create("spiflash_mount", spiflash_mount, RT_NULL,
+                               1024, RT_THREAD_PRIORITY_MAX - 3, 20);
+        if (tid != RT_NULL)
+        {
+            rt_thread_startup(tid);
+        }
+        else
+        {
+            LOG_E("create spiflash_mount thread err!");
+        }
+    }
+
+    return RT_EOK;
+}
+#endif
+
+
 static const struct romfs_dirent _romfs_root[] =
 {
 #ifdef BSP_USING_SDCARD
     {ROMFS_DIRENT_DIR, "sdcard", RT_NULL, 0},
 #endif
-//  {ROMFS_DIRENT_DIR, "flash", RT_NULL, 0},
+
+#ifdef BSP_USING_SPI_FLASH_LITTLEFS
+    {ROMFS_DIRENT_DIR, "flash", RT_NULL, 0},
+#endif
 };
 
 const struct romfs_dirent romfs_root =
@@ -98,6 +160,10 @@ static int filesystem_mount(void)
     onboard_sdcard_mount();
 #endif
 
+#ifdef BSP_USING_SPI_FLASH_LITTLEFS
+    onboard_spiflash_mount();
+#endif
+
     return RT_EOK;
 }
 INIT_APP_EXPORT(filesystem_mount);

+ 20 - 2
bsp/stm32/stm32f407-atk-explorer/board/ports/fal_cfg.h

@@ -14,10 +14,12 @@
 #include <rtthread.h>
 #include <board.h>
 
+#ifdef BSP_USING_SPI_FLASH_LITTLEFS
+extern struct fal_flash_dev nor_flash0;
+#else
 #define FLASH_SIZE_GRANULARITY_16K   (4 * 16 * 1024)
 #define FLASH_SIZE_GRANULARITY_64K   (64 * 1024)
 #define FLASH_SIZE_GRANULARITY_128K  (7 * 128 * 1024)
-
 #define STM32_FLASH_START_ADRESS_16K  STM32_FLASH_START_ADRESS
 #define STM32_FLASH_START_ADRESS_64K  (STM32_FLASH_START_ADRESS_16K + FLASH_SIZE_GRANULARITY_16K)
 #define STM32_FLASH_START_ADRESS_128K (STM32_FLASH_START_ADRESS_64K + FLASH_SIZE_GRANULARITY_64K)
@@ -25,24 +27,40 @@
 extern const struct fal_flash_dev stm32_onchip_flash_16k;
 extern const struct fal_flash_dev stm32_onchip_flash_64k;
 extern const struct fal_flash_dev stm32_onchip_flash_128k;
+#endif
+
 
 /* flash device table */
+#ifdef BSP_USING_SPI_FLASH_LITTLEFS
+#define FAL_FLASH_DEV_TABLE                                          \
+{                                                                    \
+    &nor_flash0,                                                     \
+}
+#else
 #define FAL_FLASH_DEV_TABLE                                          \
 {                                                                    \
     &stm32_onchip_flash_16k,                                         \
     &stm32_onchip_flash_64k,                                         \
     &stm32_onchip_flash_128k,                                        \
 }
+#endif
+
 /* ====================== Partition Configuration ========================== */
 #ifdef FAL_PART_HAS_TABLE_CFG
 
 /* partition table */
+#ifdef BSP_USING_SPI_FLASH_LITTLEFS
+#define FAL_PART_TABLE                                                                                                     \
+{                                                                                                                          \
+    {FAL_PART_MAGIC_WROD, "filesystem",FAL_USING_NOR_FLASH_DEV_NAME, 0 , 16 * 1024 * 1024, 0}, \
+}
+#else
 #define FAL_PART_TABLE                                                                                                     \
 {                                                                                                                          \
     {FAL_PART_MAGIC_WROD, "bootloader", "onchip_flash_16k",  0 , FLASH_SIZE_GRANULARITY_16K , 0}, \
     {FAL_PART_MAGIC_WROD, "param",      "onchip_flash_64k",  0 , FLASH_SIZE_GRANULARITY_64K , 0}, \
     {FAL_PART_MAGIC_WROD, "app",        "onchip_flash_128k", 0 , FLASH_SIZE_GRANULARITY_128K, 0}, \
 }
-
+#endif
 #endif /* FAL_PART_HAS_TABLE_CFG */
 #endif /* _FAL_CFG_H_ */