[STM32H7] 使用HAL在STM32h745上挂载SD卡时出现问题

[复制链接]
543|10
 楼主| 石榴大王 发表于 2025-6-16 09:00 | 显示全部楼层 |阅读模式
我将SDCARD插到板上时遇到了一些问题。想使用SDIO 4-Wire将数据写入SD卡,我使用的是带Waveshare适配器的STM32 h745 Nucleo板。我能够初始化卡,能够读取CID数据,并确认它是正确的卡,但当我尝试挂载卡:
void StartDefaultTask(void const * argument){  /* USER CODE BEGIN StartDefaultTask */         if(f_mount(&fs, SDPath, 0) == FR_OK)        {                HAL_GPIO_WritePin(GPIOE, GPIO_PIN_1, GPIO_PIN_SET);        }  /* Infinite loop */  for(;;)  {    osDelay(1);  }  /* USER CODE END StartDefaultTask */}
在sd_diskio. c中的初始SD_read函数中卡住了
DRESULT SD_read(BYTE lun, BYTE *buff, DWORD sector, UINT count){  DRESULT res = RES_ERROR;  uint32_t timer;#if (osCMSIS < 0x20000U)  osEvent event;#else  uint16_t event;  osStatus_t status;#endif#if (ENABLE_SD_DMA_CACHE_MAINTENANCE == 1)  uint32_t alignedAddr;#endif  /*  * ensure the SDCard is ready for a new operation  */   if (SD_CheckStatusWithTimeout(SD_TIMEOUT) < 0)  {    return res;  } #if defined(ENABLE_SCRATCH_BUFFER)  if (!((uint32_t)buff & 0x3))  {#endif    /* Fast path cause destination buffer is correctly aligned */    uint8_t ret = BSP_SD_ReadBlocks_DMA((uint32_t*)buff, (uint32_t)(sector), count);     if (ret == MSD_OK) {#if (osCMSIS < 0x20000U)    /* wait for a message from the queue or a timeout */    event = osMessageGet(SDQueueID, SD_TIMEOUT);
卡在这条语句:
event = osMessageGet(SDQueueID, SD_TIMEOUT);
已禁用SD_TRANSCIEVER:
#define  USE_SD_TRANSCEIVER           0U               /*!< use uSD Transceiver */
elephant00 发表于 2025-6-18 17:14 | 显示全部楼层
DMA通道冲突、传输大小不匹配?
onlycook 发表于 2025-6-18 17:20 | 显示全部楼层
SD卡电源不稳定或电压不足/
jcky001 发表于 2025-6-18 18:00 | 显示全部楼层
检查DMA通道配置是否正确,DMA通道与SDIO外设是否匹配。
cr315 发表于 2025-6-18 18:45 | 显示全部楼层
在DMA传输完成后,检查DMA中断标志位是否被清除。
cr315 发表于 2025-6-18 19:00 | 显示全部楼层
可能是消息队列未正确初始化或超时导致的。
flycamelaaa 发表于 2025-6-18 21:00 | 显示全部楼层
增加超时时间(SD_TIMEOUT),让DMA传输有足够时间完成。
powerantone 发表于 2025-6-18 22:00 | 显示全部楼层
SDIO中断未使能或中断优先级配置不当。
stormwind123 发表于 2025-6-18 22:00 | 显示全部楼层
检查SDIO中断服务程序是否被正确调用,并在其中发送消息到SDQueueID。
probedog 发表于 2025-6-18 22:00 | 显示全部楼层
可能是硬件连接问题。
classroom 发表于 2025-6-18 22:00 | 显示全部楼层
SDIO信号线可能接触不良或存在干扰。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

55

主题

55

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部