标题:
STM32 SDIO 报错 SD_RX_OVERRUN
[打印本页]
作者:
yuchengze
时间:
2017-6-22 16:34
标题:
STM32 SDIO 报错 SD_RX_OVERRUN
使用
STM32
官方
SDIO
的SDCARD驱动的时候,以前单任务的时候没有出现这种错误,现在使用多任务的时候经常出现,表现为读取文件的时候没有问题,经常点击屏幕的时候就会出问题,最后通过仿真找到出错点就是读取数据向SD卡发送CD17命令时出现
SD_RX_OVERRUN
这个错误,产生原因为读取FIFO溢出.
通过仿真与测试发现问题主要出现在读取过程中不能打断,也就是临界点.
在两个读取函数里面
SD_Error SD_ReadMultiBlocks(u32 addr, u32 *readbuff, u16 BlockSize, u32 NumberOfBlocks);
SD_Error SD_ReadBlock(u32 addr, u32 *readbuff, u16 BlockSize);
关键点加上临界保护
OS_ENTER_CRITICAL(); //关闭系统中断
while (!(SDIO->STA &(SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DBCKEND | SDIO_FLAG_STBITERR)))
{
if (SDIO_GetFlagStatus(SDIO_FLAG_RXFIFOHF) != RESET)
{
for (count = 0; count < 8; count++)
{
*(tempbuff + count) = SDIO_ReadData();
}
tempbuff += 8;
}
}
OS_EXIT_CRITICAL(); //开启系统中断
同样写操作的时候也一样需要.
因为有些外设的操作时不能被打断的.
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0