完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
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个回答
|
|
在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技术支持获取更多帮助。 请注意,以上建议仅供参考。具体的问题原因和解决方法可能需要根据您的具体硬件和代码环境进行调试和排查。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
878 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
936 浏览 2 评论
2044 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1145 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1568 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-21 22:07 , Processed in 0.631578 second(s), Total 76, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号