SDRAM部分数据读取错误,是什么原因

2019-07-20 18:52发布

MCU位stm32f429,外部SDRAM是16M。配置除了刷新周期和正点原子例程不一样,其余都是一样的。(由于内存大小不一样,算出来的刷新周期也不一样)。

void fsmc_sdram_test(void)     //测试程序
{  
        u32 i=0;            
        u32 temp=0;                                                       
        for(i=0;i<8*1024*1024;i+=8*1024)
        {
                *(vu32*)(Bank5_SDRAM_ADDR+i)=temp;
                temp++;
        }
        for(i=0;i<8*1024*1024;i+=8*1024)
        {       
                  temp=*(vu32*)(Bank5_SDRAM_ADDR+i);
                        printf("%d ",temp);
        }                                         
}
上面测试程序的结果是:1024个数据,有5~20个数据是错误的,其余都正常。
有没有可能是在自刷新的时候,MCU还在写入数据,导致读出来的数据出错了?       

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
正点原子
1楼-- · 2019-07-20 21:07
[mw_shl_code=applescript,true]        //每隔32K字节,写入一个数据,总共写入1024个数据,刚好是32M字节
        for(i=0;i<32*1024*1024;i+=32*1024)
        {
                tempbuf[temp]=*(vu32*)(Bank5_SDRAM_ADDR+i);//保存原来的数据
                delay_us(1);
                *(vu32*)(Bank5_SDRAM_ADDR+i)=temp;
                temp++;
        }[/mw_shl_code]
正点原子
2楼-- · 2019-07-20 22:53
貌似你这样频繁写会有一点bug,参考下我们综合实验的写入方式。
流年丶
3楼-- · 2019-07-21 02:51
正点原子 发表于 2016-11-14 19:15
[mw_shl_code=applescript,true]        //每隔32K字节,写入一个数据,总共写入1024个数据,刚好是32M字节
        for(i=0 ...

问题找到了,在数据读出的时候,加了printf打印函数。原子哥,有没有可能是由于printf打印函数花费的时间太久,导致在自刷新的时候,还在写入数据?

一周热门 更多>