首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MCU内部的闪存作为FatFs驱动器

使用MCU内部的闪存作为FatFs驱动器
EN

Stack Overflow用户
提问于 2015-02-13 20:59:24
回答 2查看 2.7K关注 0票数 1

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

这是顶层的代码:

代码语言:javascript
复制
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()创建新文件时,f_open()调用find_volume(),后者调用check_fs()返回FR_NO_FILESYSTEM。我认为这是因为没有创建引导扇区,但我不知道如何做到这一点。

我已经编写了USER_read()、USER_write()和USER_ioctl()函数,但我不知道如何在USER_initialize()函数中编写内容。现在我把它放在原来的状态,不做任何事情就返回RES_OK。我觉得这可能是问题的根源。

有什么建议吗?

EN

回答 2

Stack Overflow用户

发布于 2015-02-13 23:41:30

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

票数 1
EN

Stack Overflow用户

发布于 2020-08-18 22:07:44

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28500189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档