FATFS
FATFS 是一个完全免费开源的 FAT/exFAT 文件系统模块,专门为小型的嵌入式系统而设计。
分区
当你需要对你的存储 设备进行 分区的时 需要在以下两个函数 中实现地址的偏移
DRESULT TM_FATFS_FLASH_SPI_disk_read(BYTE *buff, DWORD sector, UINT count)
DRESULT TM_FATFS_FLASH_SPI_disk_read(BYTE *buff, DWORD sector, UINT count)
DRESULT TM_FATFS_FLASH_SPI_disk_read(BYTE *buff, DWORD sector, UINT count)
{
FLASH_DEBUG_FUNC();
if ((TM_FATFS_FLASH_SPI_Stat & STA_NOINIT))
{
return RES_NOTRDY;
}
sector+=512;//扇区偏移,外部Flash文件系统空间放在外部Flash后面6M空间
SPI_FLASH_BufferRead(buff, sector <<12, count<<12);
return RES_OK;
}
DRESULT disk_read (
BYTE pdrv, /* Physical drive nmuber (0..) */
BYTE *buff, /* Data buffer to store read data */
DWORD sector, /* Sector address (LBA) */
UINT count /* Number of sectors to read (1..128) */
)
{
DRESULT status = RES_PARERR;
switch (pdrv) {
case ATA: /* SD CARD */
#if FATFS_USE_SDIO == 1
status = TM_FATFS_SD_SDIO_disk_read(buff, sector, count); /* SDIO communication */
#endif
break;
case SPI_FLASH:
#if FATFS_FLASH_SPI ==1
status = TM_FATFS_FLASH_SPI_disk_read(buff, sector, count); /* SDIO communication */
#endif
break;
default:
status = RES_PARERR;
}
return status;
}
f_mkfs()
在设备没有文件系统是需要 在设备上建议文件系统,如没有建立文件系统可能倒是挂载失败
参数中的扇区大小需要和设备匹配 不匹配可能会导致 数据丢失等问题
f_mount
没有文件系统就格式化创建创建文件系统
f_Write
写操作时候 可能需要擦除设备 需要自己在接口中实现
f_unlink
删除操作,此函数并不是真正的删除即擦除FLASH而是在文件系统中的将此链接地址删除实际的内容还是存在的
Cubemx生成代码
Cubemx生成的代码MX_FATFS_Init();中有链接驱动的函数retUSER = FATFS_LinkDriver(&USER_Driver, USERPath),此函式是将用户的驱动函数和FatfS的中的函数进行链接,
需要自己在USER_Driver 完成驱动的编写
参考
https://blog.csdn.net/qq_42900996/article/details/108106655
https://www.bilibili.com/video/BV13F4m1K78y/?spm_id_from=333.788&vd_source=67f62f634c89be94a320f5d320af02f8
https://blog.csdn.net/weixin_44502943/article/details/120690072
https://blog.csdn.net/qq_45217381/article/details/136385786?spm=1001.2014.3001.5502
https://blog.csdn.net/qq_45217381/article/details/136443239?spm=1001.2014.3001.5502
注意点
1.我们在使用文件操作前,需要用 f_mount 函数挂载磁盘