littleFS在RT1052移植笔记

环境:rt1052单片机+16G tf

为什么使用littleFS?

  1. NXP官方SDK支持!
  2. 先进的损耗平衡功能(wear leveling)可提供最长的快闪及内存寿命及最大的使用量因为FALSH的擦除/写次数有限制,通常是10万次
  3. RAMFLASH用的少,也就是内存和代码和精简。
    4. 掉电保护,设备突然断电,文件系统不会损坏。
    对比FATFS, fatfs使用固定的块做文件系统管理,多次读写后,整个系统就坏了,但是其他块其实没用多少次

    本人并不建议大家在flash上使用fatfs !

    移植使用

      1. lfs四个源文件和刚刚创建的两个文件添加到工程,直接编译。
        测试lfs源码是否能编译通过。
      2. 修改动态内存最大长度,  #define Heap_Size,   因为要是有标准函数malloc,见源码函数:static inline void *lfs_malloc(size_t size)

      3. 添加实际的驱动函数到结构体变量lfs_config

        struct lfs_config lfs_cfg= {

            // block device operations

            .read  = lfs_TFCard_read,

        .prog  = lfs_TFCard_prog,

            .erase = lfs_TFCard_erase,

            .sync  = lfs_TFCard_sync,

        // block device configuration

            .read_size = LFS_READ_SIZE,

            .prog_size = LFS_PREG_SIZE,

            .block_size = LFS_BLOCK_SIZE,  block_count = LFS_BLOCK_COUNT,.lookahead = LFS_LOOKAHEAD,};

      4. 初始化:

        sd_card_t *card = &g_sd;

        /* 初始化SD外设时钟 */

        BOARD_USDHCClockConfiguration();

        card->host.base = SD_HOST_BASEADDR;

      5. card->host.sourceClock_Hz = SD_HOST_CLK_FREQ;

         /* SD主机初始化函数 */

            if (SD_HostInit(card) != kStatus_Success)

            {

                PRINTF(" SD主机初始化失败 ");

                return -1;

            } 

      6. /* 初始化SD*/

        if (SD_CardInit(card))

        {

        PRINTF(" SD初始化失败 ");

        return -1;

        }

        5.挂载测试

         err = lfs_mount(lfs, &lfs_cfg);  //挂载

        6.文件操作

        err = lfs_file_open(lfs, &g_lfs_file, "update.bin", LFS_O_RDWR);

        //打开bin文件,LFS_O_RDWR,读写方式

      7. 其他功能后续补充,本次就到这里,做个记录。

原文地址:https://www.cnblogs.com/zhihui-3669/p/10933129.html