|
发表于 2014-7-10 23:25:34
|
显示全部楼层
这里不太可能有回答,只能其他地方看看了,是以下的问题吗?
主要卡死在两个地方:
1、就是在初始化SD卡的时候,有一个FindSCR()函数中:
while (!(SDIO->STA & (SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DBCKEND | SDIO_FLAG_STBITERR)))
{
if (SDIO_GetFlagStatus(SDIO_FLAG_RXDAVL) != RESET)
{
*(tempscr + index) = SDIO_ReadData();
index++;
}
}
卡死在这个while循环中,不过这个可以使用index来判断,当大于1时就跳出,不会影响操作。这个姑且算是解决了吧。呵呵。
2、另一个就卡死在SD_ReadBlock()或者SD_WriteBlock()函数的DMA查询那里,比如SD_ReadBlock()中的:
SDIO_ITConfig(SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_DATAEND | SDIO_IT_RXOVERR | SDIO_IT_STBITERR, ENABLE);
SDIO_DMACmd(ENABLE);
DMA_RxConfiguration(readbuff, BlockSize);
while (DMA_GetFlagStatus(DMA2_FLAG_TC4) == RESET)
{}
这个就不好解决了,呵呵。通过观察SDIO中断标志,可以看出大多时候是出现了SDIO_IT_RXOVERR错误,但是极个别时候是数据正常。
另外,应用程序中是没有循环等待的。
测试程序是使用的官方例程,里面的DMA是每次使用前都重新配置了的。
很谢谢你的关注,呵呵。 |
评分
-
查看全部评分
|