ST意法半导体
直播中

吴湛

9年用户 747经验值
擅长:可编程逻辑
私信 关注
[问答]

有谁知道如何在STM32H743的SDMMC接口上获得相当高的写入速度吗?

我正在尝试将 SDMMC 与 SD 卡和 DMA 一起使用。但是,当我使用 STM32CubeMX IDE 时,没有启用或使用 DMA 的选项。
使用:STM32CubeMX 版本 5.3.0
这是 STM32H743 上 SDMMC1 的配置

这是 STM32F7 上的 SDMMC1

请注意,H7 没有 DMA 配置选项,但 F7 有。
这是否意味着 ST 在 H7 上没有基于 DMA 的驱动程序?使用轮询驱动程序,我的性能非常慢——大约 0.2MB/秒。
知道如何在 H7 的 SDMMC 接口上获得相当高的写入速度吗?
顺便说一句,我使用的是没有收发器的定制板。


回帖(1)

汪芳

2022-12-15 11:30:51
您需要写入一些扇区/簇大小的倍数,通过 f_write 写入随机和短长度将是残酷的,我正在写入 32KB 块。卡上的擦除大小可能达到 128KB。您需要使用更好的缓冲。
库中可能还有其他代码进一步降低了时钟设置。
Y-Step STM32H743,50 MHz 线时钟
核心=400000000, 400 MHz
CPUID 411FC271 DEVID 450 REVID 1003
皮质 M7 r1p1
STM32H7xx
C0000018 2000BCC8 00000000
10110221 12000011 00000040
FPU-D 单精度和双精度
我没有使用 CubeMX,自定义板,移植了我的 NUCLEO-H7 SDMMC BSP
时钟源的解码轮,测试后运行


  •     {
  •      uint32_t ck = SDMMC1->CLKCR & 0x3FF;
  •      uint32_t sdmmcsel = RCC->D1CCIPR & (1 << 16);
  •      PLL1_ClocksTypeDef PLL1_Clocks;
  •      PLL2_ClocksTypeDef PLL2_Clocks;
  •      uint32_t sdmmc_ker_ck;
  •      HAL_RCCEx_GetPLL1ClockFreq(&PLL1_Clocks);
  •      HAL_RCCEx_GetPLL2ClockFreq(&PLL2_Clocks);
  •      printf("PLL1_Q_CK=%9d, %6.2lf MHzn", PLL1_Clocks.PLL1_Q_Frequency, (double)PLL1_Clocks.PLL1_Q_Frequency*1e-6);
  •      printf("PLL2_R_CK=%9d, %6.2lf MHzn", PLL2_Clocks.PLL2_R_Frequency, (double)PLL2_Clocks.PLL2_R_Frequency*1e-6);
  •      sdmmc_ker_ck = (sdmmcsel ? PLL2_Clocks.PLL2_R_Frequency : PLL1_Clocks.PLL1_Q_Frequency);
  •      printf("SDMMC1_CK %9d, %6.2lf MHzn", ck, ((double)sdmmc_ker_ck * 1e-6) / (double)(2.0 * ck));
  •     } //
举报

更多回帖

发帖
×
20
完善资料,
赚取积分