×
单片机 > 单片机程序设计 > 详情

STM32 SDIO 报错 SD_RX_OVERRUN

发布时间:2020-05-18 发布时间:
|

使用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);

关键点加上临界保护


  1. OS_ENTER_CRITICAL();                        //关闭系统中断  

  2.   

  3.     while (!(SDIO->STA &(SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DBCKEND | SDIO_FLAG_STBITERR)))  

  4.     {  

  5.       if (SDIO_GetFlagStatus(SDIO_FLAG_RXFIFOHF) != RESET)  

  6.       {  

  7.         for (count = 0; count 

  8.         {  

  9.           *(tempbuff + count) = SDIO_ReadData();  

  10.         }  

  11.         tempbuff += 8;  

  12.       }  

  13.     }  

  14. OS_EXIT_CRITICAL();                         //开启系统中断  


同样写操作的时候也一样需要.


因为有些外设的操作时不能被打断的.




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
基于arm的指纹识别门禁系统是如何设计的