1

我正在尝试在 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_read()、USER_write() 和 USER_ioctl() 函数,但我不知道在 USER_initialize() 函数中要写什么。现在我把它留在原来的状态,它返回 RES_OK 而不做任何事情。我觉得这可能是问题的根源。

有什么建议么?

4

2 回答 2

1

我做了一些研究,归结为内部闪存(总共 64KB)中根本没有足够的空间将其用于 FAT。

于 2015-02-13T15:41:29.713 回答
0

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

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

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

于 2020-08-18T14:07:44.027 回答