STM32/STM8技术论坛
直播中

张静

7年用户 1446经验值
私信 关注
[问答]

STM32U5 SDMMC BusWide设置为4B的时候读写失败是什么原因造成的?如何解决?

STM32U5 SDMMC为什么BusWide只能设置为1B,设置为4B的时候没办法读写。硬件连接是没问题的, 4跟数据线都连接上了, 连接顺序也肯定没错, 上拉电阻也是有的。
SDMMC初始化代码:
  hsd1.Instance = SDMMC1;  hsd1.Init.ClockEdge = SDMMC_CLOCK_EDGE_RISING;  hsd1.Init.ClockPowerSave = SDMMC_CLOCK_POWER_SAVE_DISABLE;  hsd1.Init.BusWide = SDMMC_BUS_WIDE_4B; // 只有设置为SDMMC_BUS_WIDE_1B的时候才能够正常读写  hsd1.Init.HardwareFlowControl = SDMMC_HARDWARE_FLOW_CONTROL_DISABLE;  hsd1.Init.ClockDiv = 4;  if (HAL_SD_Init( hsd1) != HAL_OK)  {    Error_Handler();  }初始化之后可以HAL_SD_GetCardInfo, 但HAL_SD_WriteBlocks 或 HAL_SD_ReadBlocks 就会失败, 具体代码如下:
  HAL_StatusTypeDef rtn;  rtn = HAL_SD_GetCardInfo( hsd1, info);  // 返回为HAL_OK  HAL_Delay(1000);  rtn = HAL_SD_WriteBlocks( hsd1,tx_buf,0,1,1000);  // 返回错误  HAL_Delay(1000);  rtn = HAL_SD_ReadBlocks( hsd1,rx_buf,0,1,1000);   // 返回错误如果在初始化完SDMMC之后, 再调用一次 HAL_SD_InitCard 之后, HAL_SD_ReadBlocks 和 HAL_SD_WriteBlocks就能成功, 代码如下:
  HAL_StatusTypeDef rtn;  rtn = HAL_SD_GetCardInfo( hsd1, info);  // 返回为HAL_OK  HAL_SD_InitCard( hsd1);  // 重新初始化SD卡  HAL_Delay(1000);  rtn = HAL_SD_WriteBlocks( hsd1,tx_buf,0,1,1000);  // 返回为HAL_OK  HAL_Delay(1000);  rtn = HAL_SD_ReadBlocks( hsd1,rx_buf,0,1,1000);   // 返回为HAL_OK因为调用HAL_SD_InitCard之后, 其中就把BusWide设置为了1B, 其中部分代码为:
HAL_StatusTypeDef HAL_SD_InitCard(SD_HandleTypeDef *hsd){  ...  /* Default SDMMC peripheral configuration for SD card initialization */  Init.ClockEdge           = SDMMC_CLOCK_EDGE_RISING;  Init.ClockPowerSave      = SDMMC_CLOCK_POWER_SAVE_DISABLE;  Init.BusWide             = SDMMC_BUS_WIDE_1B;  Init.HardwareFlowControl = SDMMC_HARDWARE_FLOW_CONTROL_DISABLE;  ...}为什么设置4B之后, 读写就会失败呢?



回帖(1)

jackhui

2024-3-8 16:43:51
在STM32U5系列的SDMMC控制器中,BusWide参数只支持SDMMC_BUS_WIDE_1B。这是由硬件限制决定的,无法直接支持4位数据线的模式。

如果您将BusWide参数设置为SDMMC_BUS_WIDE_4B,可能会导致读写失败。原因是SDMMC控制器无法正确识别和处理4位数据线的模式。

要解决这个问题,您可以尝试以下几个步骤:

1. 确保您使用的SD卡是支持4位数据线的,并且已经正确插入插槽。

2. 检查SDMMC控制器的时钟设置,确保时钟频率正确配置,以及时序满足SD卡的要求。

3. 确认您的SD卡初始化代码中没有其他错误,比如时钟设置、引脚配置等。

4. 如果以上步骤都没有解决问题,那么可能是SDMMC控制器硬件问题或者驱动库的兼容性问题。您可以尝试更新最新版本的STM32Cube库和固件,或者咨询ST技术支持获取更多帮助。

请注意,以上建议仅供参考。具体的问题原因和解决方法可能需要根据您的具体硬件和代码环境进行调试和排查。
举报

更多回帖

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