我只是一个卑微的实习生,投身于固件开发的无情之火。我的任务是在STM32芯片上实现文件系统,通过SPI使用w25qxx。我已经成功地通过SPI读写了w25q,并创建了一个类来处理芯片的基本i/o。
我已经决定使用FatFS,因为它部分地内置到STM32CubeID中,而且它似乎是满足我们需求的最佳选择。我见过很多人在SD卡上实现FatFS,但是SD卡将是我们需要的更复杂的。在我看到的所有教程中,您都需要编辑user_diskio.c的方法,以便与您正在使用的存储保持一致。但是,当我这样做时,我发现我的代码从未真正使用过user_diskio.c,也没有使用diskio.c。我在这些代码中设置了一行代码,用来设置一个LED来判断程序是否真的到达了代码中的这些点,而它似乎没有达到这些点。
方法来自我的user_diskio.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。试图将文件读入缓冲区将导致缓冲区中的第一个字节作为空字符被读取。我还有什么需要补充的信息吗?
发布于 2022-02-03 16:16:24
在执行任何其他操作之前,FR_NOT_ENABLE很可能是由不首先对磁盘进行f_mount引起的。
https://stackoverflow.com/questions/66286312
复制相似问题