我正在尝试在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()创建新文件时,f_open()调用find_volume(),后者调用check_fs()返回FR_NO_FILESYSTEM。我认为这是因为没有创建引导扇区,但我不知道如何做到这一点。
我已经编写了USER_read()、USER_write()和USER_ioctl()函数,但我不知道如何在USER_initialize()函数中编写内容。现在我把它放在原来的状态,不做任何事情就返回RES_OK。我觉得这可能是问题的根源。
有什么建议吗?
发布于 2015-02-13 23:41:30
我做了一些研究,归根结底是,内部闪存(总共64KB)没有足够的空间用于FAT。
发布于 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闪存逐渐失效。
https://stackoverflow.com/questions/28500189
复制相似问题