• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

CubeMX配置SDIO的问题

Spirit 2018-12-11 浏览量:2412

使用CubeMX配置SDIO,初始化代码如下:

void MX_SDIO_SD_Init(void)
{

  hsd.Instance = SDIO;
  hsd.Init.ClockEdge = SDIO_CLOCK_EDGE_RISING;
  hsd.Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE;
  hsd.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE;
  hsd.Init.BusWide = SDIO_BUS_WIDE_1B;
  hsd.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_ENABLE;
  hsd.Init.ClockDiv = 0;
  if (HAL_SD_Init(&hsd) != HAL_OK)
  {
    _Error_Handler(__FILE__ __LINE__);
  }

  if (HAL_SD_ConfigWideBusOperation(&hsd SDIO_BUS_WIDE_4B) != HAL_OK)
  {
    _Error_Handler(__FILE__ __LINE__);
  }

}
然后HAL_SD_ConfigWideBusOperation返回错误。
卡是Kingston 4GB的卡,原子的开发板F103ZET 战舰版。用原子的例程读写卡正常。

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
所有亮答 数量:9
  • 自己答一波

    原因是,hsd.Init.ClockDiv 不能等于0

    按取值为0算,SD卡的频率就是36MHz

    SD卡的协议上说上限是48MHz,但许多SD卡上不了这么高的频率。

  • 应该是频率太快的原因了吧,你的卡是class几的呢

  • sdio其实可以直接查阅官方的例程,原子的例程有些限制条件的,不一定比官方的好用。

  • 按理说,时钟频率决定的是上限,对低速的卡应该还是兼容读写的

  • 实际就是你的读写频率太快,你的总线不能实现这么大的速度

  • STM32没法实现对不同频率的卡兼容,降低频率

相关问题

问题达人换一批

CubeMX配置SDIO的问题