硬汉嵌入式论坛

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

[SD/SDIO] STM32H743IIT6 EMMC fatfs异常,求助

[复制链接]

2

主题

24

回帖

30

积分

新手上路

积分
30
发表于 2024-7-8 17:40:31 | 显示全部楼层 |阅读模式
      求助,参考H7_TOOL的bsp_emmc,使用dma方式挂载成功,打开报错FR_INT_ERR,使用非DMA一切正常。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117530
QQ
发表于 2024-7-8 18:11:59 | 显示全部楼层
改用1线模式试试
回复

使用道具 举报

2

主题

24

回帖

30

积分

新手上路

积分
30
 楼主| 发表于 2024-7-10 09:15:51 | 显示全部楼层
eric2013 发表于 2024-7-8 18:11
改用1线模式试试

改成1线也不行,附件是我的相关代码,麻烦帮我看一下是哪里的问题呢

freertos.c

9.13 KB, 下载次数: 4

main.c

8.68 KB, 下载次数: 2

sdmmc.c

9.54 KB, 下载次数: 7

sdmmc.h

2.96 KB, 下载次数: 2

user_diskio.c

9.18 KB, 下载次数: 6

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117530
QQ
发表于 2024-7-11 08:26:36 | 显示全部楼层
guxiangguo 发表于 2024-7-10 09:15
改成1线也不行,附件是我的相关代码,麻烦帮我看一下是哪里的问题呢

看了,没发现什么问题。
回复

使用道具 举报

0

主题

53

回帖

53

积分

初级会员

积分
53
发表于 2024-7-12 17:00:19 | 显示全部楼层
今天正好遇到这个问题,就是DMA读取之前,判断了一下如果不是32字节对齐,则执行一次 SCB_CleanDCache_by_Addr操作。野火的代码有这个操作。调试了半天,终于好了.
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117530
QQ
发表于 2024-7-13 08:38:16 | 显示全部楼层
miaoguoqiang 发表于 2024-7-12 17:00
今天正好遇到这个问题,就是DMA读取之前,判断了一下如果不是32字节对齐,则执行一次 SCB_CleanDCache_by_A ...

好的,解决了就好。
回复

使用道具 举报

2

主题

24

回帖

30

积分

新手上路

积分
30
 楼主| 发表于 2024-7-22 10:07:45 | 显示全部楼层
miaoguoqiang 发表于 2024-7-12 17:00
今天正好遇到这个问题,就是DMA读取之前,判断了一下如果不是32字节对齐,则执行一次 SCB_CleanDCache_by_A ...

可以分享一下例程吗?按照你的方法还是不行,一样的报错
回复

使用道具 举报

2

主题

24

回帖

30

积分

新手上路

积分
30
 楼主| 发表于 2025-3-13 09:33:19 | 显示全部楼层
eric2013 发表于 2024-7-11 08:26
看了,没发现什么问题。

硬汉哥,最新发现开机读取EMMC里的配置参数有概率发生读取不完整的情况,不完整的地方还不是文件最后,是在文件的中间部分。
设备断电后重新上电又能恢复正常,这个可能时哪里出现的问题呢?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117530
QQ
发表于 2025-3-14 07:45:26 | 显示全部楼层
guxiangguo 发表于 2025-3-13 09:33
硬汉哥,最新发现开机读取EMMC里的配置参数有概率发生读取不完整的情况,不完整的地方还不是文件最后,是 ...

试试程序里面DeInit复位初始化下,看看是否可行。
回复

使用道具 举报

2

主题

24

回帖

30

积分

新手上路

积分
30
 楼主| 发表于 2025-3-14 10:44:20 | 显示全部楼层
eric2013 发表于 2025-3-14 07:45
试试程序里面DeInit复位初始化下,看看是否可行。

DeInit不是反初始化函数吗?释放了所有硬件资源了,在这里面初始化是什么原理呢?下面的是我得初始化部分代码.
[C] 纯文本查看 复制代码
/* SDMMC1 init function */

void MX_SDMMC1_MMC_Init(void)
{

  /* USER CODE BEGIN SDMMC1_Init 0 */

  /* USER CODE END SDMMC1_Init 0 */

  /* USER CODE BEGIN SDMMC1_Init 1 */

  /* USER CODE END SDMMC1_Init 1 */
  hmmc1.Instance = SDMMC1;
  hmmc1.Init.ClockEdge = SDMMC_CLOCK_EDGE_RISING;
  hmmc1.Init.ClockPowerSave = SDMMC_CLOCK_POWER_SAVE_DISABLE;
  hmmc1.Init.BusWide = SDMMC_BUS_WIDE_4B;//8B
  hmmc1.Init.HardwareFlowControl = SDMMC_HARDWARE_FLOW_CONTROL_ENABLE;
  hmmc1.Init.ClockDiv = 4; //2
  if (HAL_MMC_Init(&hmmc1) != HAL_OK)
  {
    Error_Handler();
  }
  HAL_MMC_ConfigWideBusOperation(&hmmc1, SDMMC_BUS_WIDE_8B);
  
  /* USER CODE BEGIN SDMMC1_Init 2 */
  eMMC_Status();
  /* USER CODE END SDMMC1_Init 2 */

}

void HAL_MMC_MspInit(MMC_HandleTypeDef* mmcHandle)
{

  GPIO_InitTypeDef GPIO_InitStruct = {0};
  RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
  if(mmcHandle->Instance==SDMMC1)
  {
  /* USER CODE BEGIN SDMMC1_MspInit 0 */
  /* USER CODE END SDMMC1_MspInit 0 */

  /** Initializes the peripherals clock
  */
    PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SDMMC;
    PeriphClkInitStruct.SdmmcClockSelection = RCC_SDMMCCLKSOURCE_PLL;
    if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
    {
      Error_Handler();
    }

    /* SDMMC1 clock enable */
    __HAL_RCC_SDMMC1_CLK_ENABLE();

    __HAL_RCC_GPIOC_CLK_ENABLE();
    __HAL_RCC_GPIOD_CLK_ENABLE();
    __HAL_RCC_GPIOB_CLK_ENABLE();
    /**SDMMC1 GPIO Configuration
    PC6     ------> SDMMC1_D6
    PC7     ------> SDMMC1_D7
    PC8     ------> SDMMC1_D0
    PC9     ------> SDMMC1_D1
    PC10     ------> SDMMC1_D2
    PC11     ------> SDMMC1_D3
    PC12     ------> SDMMC1_CK
    PD2     ------> SDMMC1_CMD
    PB8     ------> SDMMC1_D4
    PB9     ------> SDMMC1_D5
    */
    GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9
                          |GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF12_SDIO1;
    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = GPIO_PIN_2;
    HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

    /* SDMMC1 interrupt Init */
    HAL_NVIC_SetPriority(SDMMC1_IRQn, 5, 0);
    HAL_NVIC_EnableIRQ(SDMMC1_IRQn);
  /* USER CODE BEGIN SDMMC1_MspInit 1 */
      HAL_Delay(50);
       HAL_GPIO_WritePin(GPIOH, GPIO_PIN_15, GPIO_PIN_RESET);
      HAL_Delay(50);
      HAL_GPIO_WritePin(GPIOH, GPIO_PIN_15, GPIO_PIN_SET);
      HAL_Delay(50);
  /* USER CODE END SDMMC1_MspInit 1 */
  }
}

void HAL_MMC_MspDeInit(MMC_HandleTypeDef* mmcHandle)
{

  if(mmcHandle->Instance==SDMMC1)
  {
  /* USER CODE BEGIN SDMMC1_MspDeInit 0 */

  /* USER CODE END SDMMC1_MspDeInit 0 */
    /* Peripheral clock disable */
    __HAL_RCC_SDMMC1_CLK_DISABLE();

    /**SDMMC1 GPIO Configuration
    PC6     ------> SDMMC1_D6
    PC7     ------> SDMMC1_D7
    PC8     ------> SDMMC1_D0
    PC9     ------> SDMMC1_D1
    PC10     ------> SDMMC1_D2
    PC11     ------> SDMMC1_D3
    PC12     ------> SDMMC1_CK
    PD2     ------> SDMMC1_CMD
    PB8     ------> SDMMC1_D4
    PB9     ------> SDMMC1_D5
    */
    HAL_GPIO_DeInit(GPIOC, GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9
                          |GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12);

    HAL_GPIO_DeInit(GPIOD, GPIO_PIN_2);

    HAL_GPIO_DeInit(GPIOB, GPIO_PIN_8|GPIO_PIN_9);

    /* SDMMC1 interrupt Deinit */
    HAL_NVIC_DisableIRQ(SDMMC1_IRQn);
  /* USER CODE BEGIN SDMMC1_MspDeInit 1 */

  /* USER CODE END SDMMC1_MspDeInit 1 */
  }
}
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117530
QQ
发表于 2025-3-15 09:06:52 | 显示全部楼层
guxiangguo 发表于 2025-3-14 10:44
DeInit不是反初始化函数吗?释放了所有硬件资源了,在这里面初始化是什么原理呢?下面的是我得初始化部分 ...

对,这就是复位初始化DeInit的含义,将其设置到类似重新上电的复位状态
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-12 18:47 , Processed in 0.047803 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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