SDIO配置

4bit,其他参数均默认即可。

配置DMA

注意:memory 数据宽度最好配置为byte。如果配置为word,那么定义读写buff时需要相应的按四字节对齐,否则可能会出现数据偏移错误。

配置中断

SDIO global 中断必须开启。sdio使用dma时必须开启全局中断,否则无法判断dma发送完成。

SDIO global中断优先级高于dma中断优先级。

FATFS配置

勾选sd,注意配置sd检测引脚:

勾选使用DMA:

代码修改

修改sdio.c的MX_SDIO_SD_Init,将总线宽度改为1bit。

这是因为实测直接初始化为4bit测试不通,修改后其实还是使用4bit的,因为在bsp_driver_sd.c文件中BSP_SD_Init函数中,在HAL_SD_Init之后有切换为4bit:

  /* Configure SD Bus width (4 bits mode selected) */
  if (sd_state == MSD_OK)
  { 
    /* Enable wide operation */
    if (HAL_SD_ConfigWideBusOperation(&hsd, SDIO_BUS_WIDE_4B) != HAL_OK)
    {
      sd_state = MSD_ERROR;
    }
  }

之所以这么操作,疑似原因:SD手册规定初始只能是1 bit

参考原子写法: