难以为闪存配置fatf



我只是一个地位低下的实习生,被投入到固件开发的无情烈火中。我的任务是通过SPI使用w25qxx在STM32芯片上实现文件系统。我已经能够通过SPI成功地读写w25q,并创建了一个类来处理芯片的基本I/o。

我已经决定使用FatFS,因为它部分内置到STM32CubeID中,它似乎是我们需要的最好的。我见过不少人通过SD卡实现FatFS,但是SD卡比我们需要的更复杂。在我看到的所有教程中,您都需要编辑user_disk .c的方法,使其与您正在使用的存储一致。然而,当我这样做时,我发现我的代码从来没有真正使用user_disk .c,也没有使用disk .c。我在这些代码中设置了一行代码来设置一个LED来告诉程序是否真的达到了代码中的这些点,并且它似乎没有。

user_disk .cpp

DRESULT USER_read (
BYTE pdrv,      /* Physical drive nmuber to identify the drive */
BYTE *buff,     /* Data buffer to store read data */
DWORD sector,   /* Sector address in LBA */
UINT count      /* Number of sectors to read */
)
{
/* USER CODE BEGIN READ */
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_10, GPIO_PIN_SET); // 
w25->sectorRead(sector, (char*)buff, count);
return RES_OK;
/* USER CODE END READ */
}

在我的main.cpp中,我试图创建一个文件,向其写入字符串,关闭它,然后再次打开它以读取字符串。

f_getfree("", &fre_clust, &pfs);
total = (uint32_t)((pfs->n_fatent - 2) * pfs->csize * 0.5);
free_space = (uint32_t)(fre_clust * pfs->csize * 0.5);
fresult = f_open(&fil, "file67.txt", FA_OPEN_ALWAYS | FA_READ | FA_WRITE);
f_puts("This data is from the FILE1.txt. And it was written using ...f_puts... ", &fil);
fresult = f_close(&fil);
fresult = f_open(&fil, "file67.txt", FA_READ);
f_gets(buffer, f_size(&fil), &fil);
f_close(&fil);

fresult在打开文件时返回FR_NOT_ENABLED,在关闭文件时返回FR_INVALID_OBJECT。尝试将文件读入缓冲区会导致缓冲区中的第一个字节被作为空字符读取。还有什么需要我补充的吗?

FR_NOT_ENABLE可能是由于在执行其他操作之前没有先f_mount磁盘引起的。

最新更新