硬汉嵌入式论坛

 找回密码
 立即注册
查看: 140|回复: 4
收起左侧

[SD/SDIO] stm32h7 配置emmc的fatfs文件系统f_open时出现FR_NO_FILESYSTEM

[复制链接]

4

主题

11

回帖

23

积分

新手上路

积分
23
发表于 2024-4-23 11:48:04 | 显示全部楼层 |阅读模式
用的芯片是stm32h743xih6 emmc的驱动是用的httool的bsp_emmc.c 正常使用BSP_MMC_WriteBlocks_DMA和BSP_MMC_ReadBlocks_DMA都可以写入和读出数据 。
fatfs的emmc_diskio_dma.c用的也是h7tool的源码里面的 现在的问题是FATFS_LinkDriver(&SD_Driver, DiskPath);
        result = f_mount(&fs, DiskPath, 0);        /* Mount a logical drive */
        result的值是FR_OK

result = f_open(&file, path, FA_CREATE_ALWAYS | FA_WRITE);
result的值是FR_NO_FILESYSTEM
有大佬能告诉小弟解决方法或者解决思路吗


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106760
QQ
发表于 2024-4-23 15:21:41 | 显示全部楼层
HAL库建议也用我们TOOL一样的版本测试下。
回复

使用道具 举报

4

主题

11

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2024-4-23 15:27:42 | 显示全部楼层
eric2013 发表于 2024-4-23 15:21
HAL库建议也用我们TOOL一样的版本测试下。

硬汉哥,我对这个emmc进行了格式化后现在不出现这个错误,并且使用f_getfree函数可以返回正确的大小,但是f_open返回FR_INT_ERR错误
回复

使用道具 举报

4

主题

11

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2024-4-23 16:56:11 | 显示全部楼层
eric2013 发表于 2024-4-23 15:21
HAL库建议也用我们TOOL一样的版本测试下。

现在能定位到是因为cache的开启原因导致的FR_INT_ERR错误,将AXI区域的cache关闭后就可以正常使用fatfs文件系统
DRESULT SD_write(BYTE lun, const BYTE *buff, DWORD sector, UINT count)
{
  DRESULT res = RES_ERROR;
  WriteStatus = 0;
  uint32_t timeout;

#if (ENABLE_SD_DMA_CACHE_MAINTENANCE == 1)
  uint32_t alignedAddr;
  /*
   the SCB_CleanDCache_by_Addr() requires a 32-Byte aligned address
   adjust the address and the D-Cache size to clean accordingly.
   */
  alignedAddr = (uint32_t)buff &  ~0x1f;
  SCB_CleanDCache_by_Addr((uint32_t*)alignedAddr, count*BLOCKSIZE + ((uint32_t)buff - alignedAddr));
#endif

  if(BSP_MMC_WriteBlocks_DMA((uint32_t*)buff,
                            (uint32_t)(sector),
                            count) == MMC_OK)
  {
    /* Wait that writing process is completed or a timeout occurs */

    timeout = HAL_GetTick();
    while((WriteStatus == 0) && ((HAL_GetTick() - timeout) < SD_TIMEOUT))
    {
    }
    /* incase of a timeout return error */
    if (WriteStatus == 0)
    {
      res = RES_ERROR;
    }
    else
    {
      WriteStatus = 0;
      timeout = HAL_GetTick();

      while((HAL_GetTick() - timeout) < SD_TIMEOUT)
      {
        if (BSP_MMC_GetCardState() == MMC_TRANSFER_OK)
        {
          res = RES_OK;
          break;
        }
      }
    }
  }

  return res;
}
这里我无论使用4字节还是32还是64的都无法在开启cache的情况下正常使用,硬汉哥能给看看吗
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106760
QQ
发表于 2024-4-24 07:17:45 | 显示全部楼层
程cc 发表于 2024-4-23 16:56
现在能定位到是因为cache的开启原因导致的FR_INT_ERR错误,将AXI区域的cache关闭后就可以正常使用fatfs文 ...

如果开启的话,对于你截图的这个写函数,你可以i将使用的RAM空间开MPU/Cache WT透写模式。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-5 04:54 , Processed in 0.177274 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表