STM32F407 sd卡无法读取 卡死在 while(SD_GetStatus() != SD_TRANSFER_OK)

2019-07-20 21:10发布

本人在做一个项目,里面需要读取SD卡的图片以及汉字,但是现在无法正常读取。在开发板上程序已经能正常工作,但是到了自己画的PCB板上就无法正常读取了。已测量SD卡各管脚与STM32f407的管脚,相连没有问题。经过单步调试,最后发现程序一直在while(SD_GetStatus() != SD_TRANSFER_OK)死循环,应该是DMA传输的问题,但是程序感觉应该没问题,应该在开发板调试通了,电路板相连也没问题,求大神解答。给个SD初始化的程序吧。
SD_Error SD_Init(void)
{
  __IO SD_Error errorstatus = SD_OK;

  /* ÅäÖÃNVIC */
  SDIO_Interrupts_Config();

  /* SDIO Peripheral Low Level Init */
  SD_LowLevel_Init();

  SDIO_DeInit();

  errorstatus = SD_PowerON();

  if (errorstatus != SD_OK)
  {
    /*!< CMD Response TimeOut (wait for CMDSENT flag) */
    return(errorstatus);
  }

  errorstatus = SD_InitializeCards();

  if (errorstatus != SD_OK)
  {
    /*!< CMD Response TimeOut (wait for CMDSENT flag) */
    return(errorstatus);
  }

  /*!< Configure the SDIO peripheral */
  /*!< SDIO_CK = SDIOCLK / (SDIO_TRANSFER_CLK_DIV + 2) */
  /*!< on STM32F4xx devices, SDIOCLK is fixed to 48MHz */
  SDIO_InitStructure.SDIO_ClockDiv = SDIO_TRANSFER_CLK_DIV;
  SDIO_InitStructure.SDIO_ClockEdge = SDIO_ClockEdge_Rising;
  SDIO_InitStructure.SDIO_ClockBypass = SDIO_ClockBypass_Disable;
  SDIO_InitStructure.SDIO_ClockPowerSave = SDIO_ClockPowerSave_Disable;
  SDIO_InitStructure.SDIO_BusWide = SDIO_BusWide_1b;
  SDIO_InitStructure.SDIO_HardwareFlowControl = SDIO_HardwareFlowControl_Disable;
  SDIO_Init(&SDIO_InitStructure);

  /*----------------- Read CSD/CID MSD registers ------------------*/
  errorstatus = SD_GetCardInfo(&SDCardInfo);

  if (errorstatus == SD_OK)
  {
    /*----------------- Select Card --------------------------------*/
    errorstatus = SD_SelectDeselect((uint32_t) (SDCardInfo.RCA << 16));
  }

  if (errorstatus == SD_OK)
  {
    errorstatus = SD_EnableWideBusOperation(SDIO_BusWide_4b);
  }

  return(errorstatus);
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。