STM32/GD32F4 在SDIO工作模型下DMA工作不正常总结

最近在使用GD32F407片子做快速读取的一个项目,借用了正点原子的内存管理方法,使用中发现了几个问题:

问题1.SDIO模式下,调试发现总是进入while(((DMA2->LISR&(1<<27))==RESET)&&timeout)timeout--;//等待传输完成 

解决办法:单步跟踪调试,发现硬件逻辑一切正常,最后怀疑是内存问题,果然发现,STM32/GD32在DMA操作时,访问内存时不能对CCM进行直接的访问

最后,将设计对CCM内存访问的函数

//为exfuns申请内存
//返回值:0,成功
//1,失败
uint8_t exfuns_init(void)
{
uint8_t i;
for(i = 0; i < _VOLUMES; i++)
{
fs[i] = (FATFS*)mymalloc( SRAMIN,sizeof(FATFS) ); //为磁盘i工作区申请内存
if( !fs[i] )
break;
}
file = (FIL*)mymalloc(SRAMIN,sizeof(FIL)); //为file申请内存
// ftemp = (FIL*)mymalloc(SRAMCCM,sizeof(FIL)); //为ftemp申请内存
fatbuf = (uint8_t*)mymalloc(SRAMIN,512); //为fatbuf申请内存
// if(i == _VOLUMES && file && ftemp && fatbuf)
if(i == _VOLUMES && file && fatbuf)
return 0; //申请有一个失败,即失败.
else
return 1;
}

改为SRAMIN,解决问题

posted @ 2019-08-13 17:08  求隐  阅读(2253)  评论(0编辑  收藏  举报