用stm32自带的文件stm32hxxx_hal_mmc.c调试驱动EMMC

2019-12-12 18:15发布

最近调试emmc,发现stm32自带的文件stm32h7xx_hal_mmc.c,stm32f7xx_hal_mmc.c,stm32h4xx_hal_mmc.c就可以驱动。
在HAL_StatusTypeDef  HAL_MMC_Init(MMC_HandleTypeDef *hmmc)函数中加入适当延时:

HAL_StatusTypeDef HAL_MMC_Init(MMC_HandleTypeDef *hmmc)
{
  /* Check the MMC handle allocation */
  if(hmmc == NULL)
  {
    return HAL_ERROR;
  }

  /* Check the parameters */
  assert_param(IS_SDMMC_ALL_INSTANCE(hmmc->Instance));
  assert_param(IS_SDMMC_CLOCK_EDGE(hmmc->Init.ClockEdge));
  assert_param(IS_SDMMC_CLOCK_POWER_SAVE(hmmc->Init.ClockPowerSave));
  assert_param(IS_SDMMC_BUS_WIDE(hmmc->Init.BusWide));
  assert_param(IS_SDMMC_HARDWARE_FLOW_CONTROL(hmmc->Init.HardwareFlowControl));
  assert_param(IS_SDMMC_CLKDIV(hmmc->Init.ClockDiv));

  if(hmmc->State == HAL_MMC_STATE_RESET)
  {
    /* Allocate lock resource and initialize it */
    hmmc->Lock = HAL_UNLOCKED;
    /* Init the low level hardware : GPIO, CLOCK, CORTEX...etc */
    HAL_MMC_MspInit(hmmc);
  }

  hmmc->State = HAL_MMC_STATE_BUSY;

  /* Initialize the Card parameters */
  if(HAL_MMC_InitCard(hmmc) == HAL_ERROR)
  {
    return HAL_ERROR;
  }

  HAL_Delay(20);///////加入适当延时

  /* Configure the bus wide */
  if(HAL_MMC_ConfigWideBusOperation(hmmc, hmmc->Init.BusWide) == HAL_ERROR)
  {
    return HAL_ERROR;
  }
  
  /* Initialize the error code */
  hmmc->ErrorCode = HAL_DMA_ERROR_NONE;
  
  /* Initialize the MMC operation */
  hmmc->Context = MMC_CONTEXT_NONE;

  /* Initialize the MMC state */
  hmmc->State = HAL_MMC_STATE_READY;

  return HAL_OK;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
coslight_dt
1楼-- · 2019-12-12 20:29
关注 ,一直想试试emmc
wye11083
2楼-- · 2019-12-12 23:49
coslight_dt 发表于 2019-3-22 14:44
关注 ,一直想试试emmc

你按sd接就能直接sd卡读写方式操作emmc。我已经飞线了3台设备。
leiyitan
3楼-- · 2019-12-13 05:07
EMMC 5.0 能用么?4.xx 都快全部淘汰了
coslight_dt
4楼-- · 2019-12-13 08:43
wye11083 发表于 2019-3-24 09:55
你按sd接就能直接sd卡读写方式操作emmc。我已经飞线了3台设备。

底层扇区 函数读写也不用修改吗?底层怎嘛区分他是SD还是EMMC 或者应用上能识别出来吗?谢谢
liwang
5楼-- · 2019-12-13 09:33
 精彩回答 2  元偷偷看……
wye11083
6楼-- · 2019-12-13 11:04
coslight_dt 发表于 2019-3-25 08:04
底层扇区 函数读写也不用修改吗?底层怎嘛区分他是SD还是EMMC 或者应用上能识别出来吗?谢谢 ...

EMMC自动降级标准SD协议。其初始化貌似也是SD,然后动态切换的吧,你可以查ONFI,我真没注意。

一周热门 更多>