微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > ARM技术讨论 > STM32F407 sd卡无法读取 卡死在 while(SD_GetStatus() != SD_TRANSFER_OK

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

时间:10-02 整理:3721RD 点击:
本人在做一个项目,里面需要读取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);
}

请问你解决了么,我现在也遇到了这样的问题

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top