我试图让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而没有做任何事情。我觉得这可能是问题的根源。
有什么建议吗?
答案 0 :(得分:1)
我做了一些研究,结果是内部闪存(总共64KB)中没有足够的空间来用于FAT。
答案 1 :(得分:0)
毕竟,这种方法不能很好地工作。我的建议是重新考虑概念的普遍性。
FatFS与块设备配合使用,可以在其中随时写入磁盘的任何512字节扇区。但这不是STM32闪存的工作方式。在STM32系列中,闪存组织为一组1-2-4-16-64-128 KB扇区! (显然不是FatFS假定的512字节扇区)。每个扇区都需要作为程序/擦除周期的一部分写入。
要写入这些STM32闪存扇区中的单个512字节子扇区,将需要昂贵且缓慢的操作,在该操作中,您必须擦除整个闪存扇区,然后在修改一个512扇区后对其进行重写!在128KB的扇区上,最多可能需要4秒钟才能擦除该扇区!这样会很快磨损闪存,导致NOR闪存逐渐失效。