首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >难以为闪存配置FatFs

难以为闪存配置FatFs
EN

Stack Overflow用户
提问于 2021-02-19 23:26:12
回答 1查看 424关注 0票数 0

我只是一个卑微的实习生,投身于固件开发的无情之火。我的任务是在STM32芯片上实现文件系统,通过SPI使用w25qxx。我已经成功地通过SPI读写了w25q,并创建了一个类来处理芯片的基本i/o。

我已经决定使用FatFS,因为它部分地内置到STM32CubeID中,而且它似乎是满足我们需求的最佳选择。我见过很多人在SD卡上实现FatFS,但是SD卡将是我们需要的更复杂的。在我看到的所有教程中,您都需要编辑user_diskio.c的方法,以便与您正在使用的存储保持一致。但是,当我这样做时,我发现我的代码从未真正使用过user_diskio.c,也没有使用diskio.c。我在这些代码中设置了一行代码,用来设置一个LED来判断程序是否真的到达了代码中的这些点,而它似乎没有达到这些点。

方法来自我的user_diskio.cpp

代码语言:javascript
复制
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中,我尝试创建一个文件,向它写入一个字符串,关闭它,然后再打开它来读取字符串。

代码语言:javascript
复制
  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。试图将文件读入缓冲区将导致缓冲区中的第一个字节作为空字符被读取。我还有什么需要补充的信息吗?

EN

回答 1

Stack Overflow用户

发布于 2022-02-03 16:16:24

在执行任何其他操作之前,FR_NOT_ENABLE很可能是由不首先对磁盘进行f_mount引起的。

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

https://stackoverflow.com/questions/66286312

复制
相关文章

相似问题

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