STM32H7+EMMC速度慢的问题

博主在使用STM32H743芯片和EMMC进行写入速度测试时发现速度仅为3MB/s,通过检查HAL库代码发现初始化后线宽未按配置调整。仿照SD初始化代码修改后,成功将写入速度提升至35MB/s,读取速度达到40MB/s,解决了速度慢的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

        如题,我使用的板子搭载了了一块STM32H743的芯片,并以8线的方式连了一块EMMC,在进行写入速度测试时,发现速度奇慢,只有3MB/s左右,对于手上项目要求来说属实慢了一点,于是找问题提高速度。


配置 

        我的CUBE对于SDMMC的配置如下:

        注意:我使用的CUBE版本为6.3.0,固件版本为H7_1.18.0(至于为什么不用最新的固件包,我之前也提过,最新的固件包在初始化EMMC时会出错,但我还没去找问题)

        程序中我使用HAL_MMC_WriteBlocks一次性写入1000个block的数据,也就是0.5MB的数据,通过计算该条代码的运行时间来粗略计算写入速度,测试约为3MB/s。


问题查找 

         我尝试修改初始化配置,将EMMC的线宽修改为1、4,结果发现速度和8线一样。这就猜想HAL库函数是不是在初始化EMMC卡的时候,使用1线模式初始化成功后没有将线宽改回我的初始化配置(为了兼容各版本的卡,SD和EMMC在初始化时都会使用单线模式初始化卡),发现HAL的确是以单线的方式去初始化EMMC,但是HAL_MMC_Init函数中并没有发现有地方将线宽改回至我设置的线宽,也就是说你初始化时无论设置多少线宽,最后都是单线运行。于是我也同时查看了SD的初始化函数HAL_SD_Init,如下:

         SD的初始化倒是将线宽改回去了。


问题解决

        只要模仿SD初始化代码,添加如下代码,初始化后将线宽改回去即可:

 重新测试,写入速度在35MB/s左右,读出速度在40MB/s左右,问题解决。

### STM32 EMMC 使用教程及配置方法 #### 1. 环境准备 为了使STM32能够与eMMC通信,需先准备好必要的硬件和软件环境。确保所使用的开发板支持SPI或四线串行闪存接口(QSPI),因为大多数情况下eMMC会通过这些接口之一连接到微控制器上。 对于软件方面,则推荐采用STM32CubeMX来简化初始化过程以及生成相应的启动代码框架[^1]。 #### 2. 配置STM32CubeMX项目 打开STM32CubeMX并创建新工程,在Pinout & Configuration界面下找到RCC设置时钟源;接着进入Connectivity标签页开启FATFS模块用于文件管理操作,并选择合适的传输协议如SDIO或者QUAD SPI根据实际电路设计情况而定。最后确认启用USB OTG HS/FS功能以便后续可能涉及到的数据交换需求[^3]。 #### 3. 初始化EMMC设备 完成上述步骤之后,可以利用HAL库提供的API函数来进行具体的读写控制。例如: ```c /* eMMC Initialization function */ void MX_EMMC_Init(void){ hsd.Instance = SDMMC1; hsd.Init.ClockEdge = SDMMC_CLOCK_EDGE_RISING; hsd.Init.ClockBypass = SDMMC_CLOCK_BYPASS_DISABLE; hsd.Init.ClockPowerSave = SDMMC_CLOCK_POWER_SAVE_DISABLE; hsd.Init.BusWide = SDMMC_BUS_WIDE_4B; hsd.Init.HardwareFlowControl = SDMMC_HARDWARE_FLOW_CONTROL_ENABLE; hsd.Init.Transceiver = SDMMC_TRANSCEIVER_DISABLED; if (HAL_SD_Init(&hsd) != HAL_OK){ Error_Handler(); } } ``` 这段代码展示了如何定义一个名为`MX_EMMC_Init()` 的函数用来初始化eMMC设备参数,并调用`HAL_SD_Init()` 完成最终的初始化工作[^2]。 #### 4. 文件系统的集成 为了让应用程序更方便地访问存储于eMMC中的数据,通常还会引入第三方文件系统组件比如FatFs。这一步骤同样可以在STM32CubeMX内轻松实现——只需勾选对应选项即可自动加入所需依赖项及其默认配置。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值