程cc 发表于 2024-4-23 11:48:04

stm32h7 配置emmc的fatfs文件系统f_open时出现FR_NO_FILESYSTEM

用的芯片是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
有大佬能告诉小弟解决方法或者解决思路吗


eric2013 发表于 2024-4-23 15:21:41

HAL库建议也用我们TOOL一样的版本测试下。

程cc 发表于 2024-4-23 15:27:42

eric2013 发表于 2024-4-23 15:21
HAL库建议也用我们TOOL一样的版本测试下。

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

程cc 发表于 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的情况下正常使用,硬汉哥能给看看吗

eric2013 发表于 2024-4-24 07:17:45

程cc 发表于 2024-4-23 16:56
现在能定位到是因为cache的开启原因导致的FR_INT_ERR错误,将AXI区域的cache关闭后就可以正常使用fatfs文 ...

如果开启的话,对于你截图的这个写函数,你可以i将使用的RAM空间开MPU/Cache WT透写模式。
页: [1]
查看完整版本: stm32h7 配置emmc的fatfs文件系统f_open时出现FR_NO_FILESYSTEM