Stm32 使用MCU';s内部闪存作为FatFs驱动器

Stm32 使用MCU';s内部闪存作为FatFs驱动器,stm32,fat,flash-memory,Stm32,Fat,Flash Memory,我正在尝试在STM32F051xx上制作内部闪存,以便将其视为驱动器 这是顶层的代码: char USER_Path[4]; /* USER logical drive path */ FATFS USER_FatFs; /* File system object for User logical drive */ FIL USER_File; /* File object */ uint32_t bytesWritten; uint8_t text[] = "Text to w

我正在尝试在STM32F051xx上制作内部闪存,以便将其视为驱动器

这是顶层的代码:

char USER_Path[4]; /* USER logical drive path */
FATFS USER_FatFs;  /* File system object for User logical drive */
FIL USER_File;     /* File object */  

uint32_t bytesWritten;
uint8_t text[] = "Text to write to logical disk";
if (FATFS_LinkDriver(&USER_Driver, USER_Path) == 0) {
  if(f_mount(&USER_FatFs, (TCHAR const*)USER_Path, 0) == FR_OK) {
    if(f_open(&USER_File, "STM32.TXT", FA_CREATE_ALWAYS | FA_WRITE) == FR_OK) {
      if(f_write(&USER_File, text, sizeof(text), (void *)&bytesWritten) == FR_OK); {
        f_close(&USER_File);
      }
    }
  }
}
f_mount()返回FR_OK,但在通过f_open()创建新文件时,它调用find_volume(),它调用check_fs(),它返回FR_NO_FILESYSTEM。我想这是因为没有创建引导扇区,但我不知道如何做到这一点

我已经编写了USER\u read()、USER\u write()和USER\u ioctl()函数,但是我不知道在USER\u initialize()函数中要写什么。现在我把它保持在原始状态,在那里它不做任何事情就返回RES_OK。我觉得这可能是问题的根源


有什么建议吗?

我做了一些研究,结果是内部闪存(总共64KB)没有足够的空间用于FAT。

好吧,这毕竟不会很好地工作。我的建议是重新考虑这个想法的普遍性

FatFS与块设备一起工作,它可以在其中随时写入磁盘的任何512字节扇区。但STM32闪存不是这样工作的。在STM32系列中,闪存被组织为一组1-2-4-16-64-128 KB扇区!(显然不是FATF假定的512字节扇区)。每个扇区都需要作为程序/擦除周期的一部分写入

写入这些STM32闪存扇区的单个512字节子扇区将需要昂贵而缓慢的操作,您必须擦除整个闪存扇区,然后在修改一个512扇区后重新写入!在128KB的扇区上,擦除扇区可能需要4秒钟!这将很快磨损闪存,导致NOR闪存逐渐失效