硬汉嵌入式论坛

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

[SD/SDIO] 请教下各位大神,捣鼓 h7 sdmmc2接口 时, mdk ac6 优化等级需要设置为 -O3 才可以 ,这是怎么回事呀 ?

[复制链接]

692

主题

3576

回帖

5677

积分

论坛元老

积分
5677
发表于 2024-7-27 18:46:54 | 显示全部楼层 |阅读模式
本帖最后由 hpdell 于 2024-7-28 10:12 编辑


请教下各位大神,捣鼓 h7 sdmmc2接口 时, mdk ac6   优化等级必须是 >= -O3 才可以才可以 ,这是怎么回事呀 ?

优化等级设置为 -O1 时, 打开文件返回 FR_INT_ERR

uint8_t BSP_SD_Init(void)
{
        uint32_t result;
        uint32_t sdmmc_clk;
  uint8_t sd_state = MSD_OK;

  uSdHandle.Instance = SDMMC2;

  /* if CLKDIV = 0 then SDMMC Clock frequency = SDMMC Kernel Clock
     else SDMMC Clock frequency = SDMMC Kernel Clock / [2 * ClockDiv].
     200MHz / (2*2) = 50MHz
  */
        
        uSdHandle.Init.ClockDiv            = 2;     // sd 分频后得到 50MHz
        
  uSdHandle.Init.ClockPowerSave      = SDMMC_CLOCK_POWER_SAVE_DISABLE;
  uSdHandle.Init.ClockEdge           = SDMMC_CLOCK_EDGE_RISING;
  uSdHandle.Init.HardwareFlowControl = SDMMC_HARDWARE_FLOW_CONTROL_DISABLE;
  uSdHandle.Init.BusWide             = SDMMC_BUS_WIDE_4B;




                /* NVIC configuration for SDIO interrupts */
                HAL_NVIC_SetPriority(SDMMC2_IRQn, 5, 0);
                HAL_NVIC_EnableIRQ(SDMMC2_IRQn);        

}



回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117563
QQ
发表于 2024-7-28 09:18:12 | 显示全部楼层
MPU Cache问题处理没,这个一定要处理。

然后就是这个SDMMC_BUS_WIDE_4B可以设置未1B带宽试试。
回复

使用道具 举报

692

主题

3576

回帖

5677

积分

论坛元老

积分
5677
 楼主| 发表于 2024-7-28 10:01:16 | 显示全部楼层
本帖最后由 hpdell 于 2024-7-28 10:49 编辑
eric2013 发表于 2024-7-28 09:18
MPU Cache问题处理没,这个一定要处理。

然后就是这个SDMMC_BUS_WIDE_4B可以设置未1B带宽试试。

终于摆平了, 原来确实是 mpu 配置造成的

如下修改后使用 mdk ac6 任意 优化等级都没有问题了


            MPU_InitStruct.Enable           = MPU_REGION_ENABLE;
            MPU_InitStruct.BaseAddress      = 0x24000000;
            MPU_InitStruct.Size             = MPU_REGION_SIZE_512KB;
            MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
            MPU_InitStruct.IsBufferable     = MPU_ACCESS_NOT_BUFFERABLE;     // 貌似关键是需要把这个关闭即可
            MPU_InitStruct.IsCacheable      = MPU_ACCESS_CACHEABLE;
            MPU_InitStruct.IsShareable      = MPU_ACCESS_NOT_SHAREABLE;
            MPU_InitStruct.Number           = MPU_REGION_NUMBER1;
            MPU_InitStruct.TypeExtField     = MPU_TEX_LEVEL0;
            MPU_InitStruct.SubRegionDisable = 0x00;
            MPU_InitStruct.DisableExec      = MPU_INSTRUCTION_ACCESS_ENABLE;
            
            HAL_MPU_ConfigRegion(&MPU_InitStruct);














回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117563
QQ
发表于 2024-7-29 08:41:56 | 显示全部楼层
hpdell 发表于 2024-7-28 10:01
终于摆平了, 原来确实是 mpu 配置造成的

如下修改后使用 mdk ac6 任意 优化等级都没有问题了

解决了就好
回复

使用道具 举报

692

主题

3576

回帖

5677

积分

论坛元老

积分
5677
 楼主| 发表于 2024-7-30 15:14:44 | 显示全部楼层

感谢感谢大神啊
回复

使用道具 举报

0

主题

6

回帖

6

积分

新手上路

积分
6
发表于 2024-11-5 17:54:07 | 显示全部楼层
hpdell 发表于 2024-7-30 15:14
感谢感谢大神啊

请问,您的程序是从SDMMC1改过去的吗?我最近也在修改SDMMC2,也经常打扰硬汉哥了,可以参考一下您的程序吗?
回复

使用道具 举报

692

主题

3576

回帖

5677

积分

论坛元老

积分
5677
 楼主| 发表于 2024-11-5 18:52:10 | 显示全部楼层
Xiaoyang88 发表于 2024-11-5 17:54
请问,您的程序是从SDMMC1改过去的吗?我最近也在修改SDMMC2,也经常打扰硬汉哥了,可以参考一下您的程序 ...

你现在遇到了什么问题吗 ?
回复

使用道具 举报

0

主题

6

回帖

6

积分

新手上路

积分
6
发表于 2024-11-6 18:31:39 | 显示全部楼层
hpdell 发表于 2024-11-5 18:52
你现在遇到了什么问题吗 ?

感谢回复,目前硬件已经调通验证过没有问题了,只是程序目前无法与SD卡之间通信,连基本的CMD信号都无法响应,提示找不到文件系统。也尝试您的MPU配置方式,并没有什么改善
回复

使用道具 举报

692

主题

3576

回帖

5677

积分

论坛元老

积分
5677
 楼主| 发表于 2024-11-7 10:34:16 | 显示全部楼层
本帖最后由 hpdell 于 2024-11-7 10:40 编辑
Xiaoyang88 发表于 2024-11-6 18:31
感谢回复,目前硬件已经调通验证过没有问题了,只是程序目前无法与SD卡之间通信,连基本的CMD信号都无法 ...



你好,如下是我的配置,目前工作完全正常哟,希望能够给你参考参考一下哈:

sdmmc2-0.png


// ******************************************************************************************
sdmmc2-1.png

sdmmc2-2.png


// ******************************************************************************************
sdmmc2-3.png

sdmmc2-4.png


// ******************************************************************************************
sdmmc2-5.png

sdmmc2-6.png


// ******************************************************************************************
sdmmc2-7.png

sdmmc2-8.png


// ******************************************************************************************
sdmmc2-9.png


sdmmc2-10.png













回复

使用道具 举报

0

主题

6

回帖

6

积分

新手上路

积分
6
发表于 2024-11-7 11:59:19 | 显示全部楼层
hpdell 发表于 2024-11-7 10:34
你好,如下是我的配置,目前工作完全正常哟,希望能够给你参考参考一下哈:

感谢用心回复呦,请问您有没有链接文件系统呢,感谢您提供了一个新的思路,我一直使用的是硬汉哥采用的CMSIS_Driver方式配置SD和以及FlashFS文件系统,我可以使用HAL库进行配置并链接文件系统进行测试,不知道您是否方便分享一下相关的配置文件呢,便于加载进工程进行测试,感谢。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-14 16:16 , Processed in 0.046623 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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