首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

STM32 SDIO 报错 SD_RX_OVERRUN

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();                         //开启系统中断  

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


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