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);
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
fanyanxi
1楼-- · 2019-07-21 01:22
morrow00 发表于 2016-1-19 14:50
没有解决,现在怀疑不是程序问题。可能是硬件问题,想问一下,SD卡的原理图是 不是都需要上拉电阻?

我用的F207也是死在 while(SD_GetStatus() != SD_TRANSFER_OK)这里,但我的情况是例程在我的板上好用,但我的工程不行?请指教!
morrow00
2楼-- · 2019-07-21 04:57
 精彩回答 2  元偷偷看……
dop101
3楼-- · 2019-07-21 05:57
用原子的驱动跑试试。应该没问题
morrow00
4楼-- · 2019-07-21 07:35
dop101 发表于 2016-1-15 11:33
用原子的驱动跑试试。应该没问题

应该不是驱动的问题吧。因为在开发板上的可以的。在自己画的板子上就不行、。但是又查不出硬件有啥问题
dop101
5楼-- · 2019-07-21 10:29
 精彩回答 2  元偷偷看……
fsj500
6楼-- · 2019-07-21 11:13
问题解决没有

一周热门 更多>