首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >STM32F7 + FatFs = FR_NOT_READY

STM32F7 + FatFs = FR_NOT_READY
EN

Stack Overflow用户
提问于 2018-07-23 19:15:15
回答 4查看 7.4K关注 0票数 2

我现在使用的是CubeMx 4.23.0,STM32F7 1.8.0单片机的FW软件包是Core746i板上的STM32F746。所有东西都是由CubeMx自动生成的。

C.主要:

代码语言:javascript
复制
    SCB_EnableICache();
    SCB_EnableDCache();
    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();
    MX_SDMMC1_SD_Init();
    MX_USB_DEVICE_Init();
    MX_FATFS_Init();

    HAL_Delay(3000);
    DebugString("start OK");

    uint8_t res = 0;
    FATFS SDFatFs;  
    FIL MyFile;     /* File object */
    char SD_Path[4]; 

    res = f_mount(&SDFatFs, (TCHAR const*)SD_Path, 0);
    sprintf(DebugStr, "f_mount = 0x%02X", res);
    DebugString(DebugStr);

    res = f_open(&MyFile, "test.txt", FA_READ);
    sprintf(DebugStr, "f_open = 0x%02X", res);
    DebugString(DebugStr);

sdmmc.c:

代码语言:javascript
复制
void MX_SDMMC1_SD_Init(void)
    {

      hsd1.Instance = SDMMC1;
      hsd1.Init.ClockEdge = SDMMC_CLOCK_EDGE_RISING;
      hsd1.Init.ClockBypass = SDMMC_CLOCK_BYPASS_DISABLE;
      hsd1.Init.ClockPowerSave = SDMMC_CLOCK_POWER_SAVE_DISABLE;
      hsd1.Init.BusWide = SDMMC_BUS_WIDE_1B;
      hsd1.Init.HardwareFlowControl = SDMMC_HARDWARE_FLOW_CONTROL_DISABLE;
      hsd1.Init.ClockDiv = 7;

   //HAL_SD_Init(&hsd1);
   // ^^^^^ I also tried this here
   //HAL_SD_ConfigWideBusOperation(&hsd1, SDMMC_BUS_WIDE_4B)
   //^^^^ and this
            }

对于f_mount(&SDFatFs,(TCHAR *)SD_Path,0) <-这里有1(强制挂载),输出是:

  1. f_mount = 0x03
  2. f_open = 0x01

对于0(现在不挂载)输出是:

  1. f_mount = 0x00
  2. f_open = 0x03

0x03值为FR_NOT_READY,但官方信息对此相当模糊。

我尝试过的事情:

  1. 将HAL_SD_Init(&hsd1 1)添加到MX_SDMMC1_SD_Init()中,因为我没有发现SD卡GPIO在哪里发生。
  2. 2 GB非标SD卡,1 GB超频卡。
  3. 不同的hsd1.Init.ClockDiv 3到255。
  4. 彻底重塑一切。
  5. 使用HAL_SD_ConfigWideBusOperation(&hsd1 1,SDMMC_BUS_WIDE_4B)切换到4位宽总线;
  6. 打开和关闭拉环。

但是卡还没有挂上。它以FAT格式格式化,在PC上工作,我试图打开的文件是存在的,但是是空的。

怎么把它装上去?提前感谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-09-12 16:16:22

cubemx的精确版本有问题。更新stm32cubemx很有帮助。

票数 0
EN

Stack Overflow用户

发布于 2018-10-05 09:25:06

你可以试试

`f_mount(0,“路”,0);

‘在f_open电话之后。也许能行。如果强制挂载的函数在FR_NOT_READY中失败,这意味着文件系统对象已经成功注册,但是

卷目前尚未准备好工作。

。将在后续的文件/目录函数上尝试卷装入过程。

如果磁盘I/O层的实现缺乏异步媒体更改检测,则应用程序需要在每次媒体更改强制清除文件系统对象后执行f_mount功能。

票数 0
EN

Stack Overflow用户

发布于 2019-11-14 07:59:42

更改除SDIO_CK以外的所有SDIO引脚,以便根据本题拔起对我有用。

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

https://stackoverflow.com/questions/51485745

复制
相关文章

相似问题

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