环境:rt1052单片机+16G tf卡
为什么使用littleFS?
- NXP官方SDK支持!
- 先进的损耗平衡功能(wear leveling)可提供最长的快闪及内存寿命及最大的使用量。因为FALSH的擦除/写次数有限制,通常是10万次。
- RAM和FLASH用的少,也就是内存和代码和精简。
4. 掉电保护,设备突然断电,文件系统不会损坏。
对比FATFS, fatfs使用固定的块做文件系统管理,多次读写后,整个系统就坏了,但是其他块其实没用多少次。本人并不建议大家在flash上使用fatfs !
移植使用
- 将lfs四个源文件和刚刚创建的两个文件添加到工程,直接编译。
测试lfs源码是否能编译通过。 -
修改动态内存最大长度, #define Heap_Size, 因为要是有标准函数malloc,见源码函数:static inline void *lfs_malloc(size_t size)
-
添加实际的驱动函数到结构体变量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,};
-
初始化:
sd_card_t *card = &g_sd;
/* 初始化SD外设时钟 */
BOARD_USDHCClockConfiguration();
card->host.base = SD_HOST_BASEADDR;
-
card->host.sourceClock_Hz = SD_HOST_CLK_FREQ;
/* SD主机初始化函数 */
if (SD_HostInit(card) != kStatus_Success)
{
PRINTF(" SD主机初始化失败 ");
return -1;
}
-
/* 初始化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,读写方式
-
其他功能后续补充,本次就到这里,做个记录。
- 将lfs四个源文件和刚刚创建的两个文件添加到工程,直接编译。