您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> SDRAM遍历的奇怪问题
本帖共有566个阅读者
发表帖子 发表投票 回复主题
SDRAM遍历的奇怪问题
blackfin(论坛游民)
blackfin
头衔:社区公民
帮派:无帮无派
帖数:114
金钱:1105
积分:153
注册时间:2011/6/10
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
SDRAM遍历的奇怪问题
我对SDRAM进行遍历,程序如下:
写SDRAM:
void speed_w_test_2(void)
{
    int i,cont;
    volatile unsigned short* DDRdata;
    DDRdata = 0;
    
    for(i = 0; i < SDRAM_END_ADDR; i++)        
    {
        if(i % 2)
        {
            *DDRdata    =    0xaaaa;
            DDRdata++;
        }
        if(!(i % 2))
        {
            *DDRdata    =    0x5555;
            DDRdata++;
        }    
    }        
}
读SDRAM:
void speed_r_test_2(void)
{
    int i,cont,temp1,temp2;
    volatile unsigned short* DDRdata;
    
    DDRdata = 0;
    for(i = 0;i < SDRAM_END_ADDR; i++)    
    {
        if(i % 2)
        {
            temp1 = *DDRdata;           
            
            if(temp1 != 0xaaaa)
            {
                temp2 = *DDRdata;         
                uart_printf("error! Addr is 0x%08x, Data is %x\n",i,temp1);
            }
            
            DDRdata++;
        }
        if(!(i % 2 ))
        {
            temp1 = *DDRdata;           
            
            if(temp1 != 0x5555)
            {
                temp2 = *DDRdata;  
                uart_printf("error! Addr is 0x%08x, Data is %x\n",i,temp1);
            }
            
            DDRdata++;
        }
    }
}
我专门在读SDRAM中的uart_printf一行设了断点查看出错的地址(每次出错地址不同)发现,对同一地址读数据,temp1读回的值不对,但temp2读回的值是对的。但是用VDSP的内存查看器看到的数据又是对的。请问一下这是为什么呢?
上传的图片
  201349822853.jpg [ 38.20 KB 245×619 ] (缩略时请点击查看原图)

 


这家伙很懒,什么也没有留下!
等级:论坛游民 参考IP地址:*.*.*.*
2013/4/9 8:25:13
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
你把系统时钟降到80M或者50M,看看还有错没有。如果没有,很可能是PCB走线串扰或者走线太细引起的内存错误。

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2013/4/9 9:26:09
blackfin(论坛游民)
blackfin
头衔:社区公民
帮派:无帮无派
帖数:114
金钱:1105
积分:153
注册时间:2011/6/10
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
发现问题了,我36MHz的PPI时针走线刚好从SDRAM的信号线上横走过去。只要断开36MHz的PPI走线,遍历就正常。接上就出错。现在在这条走线上加了一个49.9欧的电阻后遍历也正常了!这个电阻值大小是我随便选的,请问下这电阻大小和作用具体是什么呢?

这家伙很懒,什么也没有留下!
等级:论坛游民 参考IP地址:*.*.*.*
2013/4/9 11:24:24
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
串联电阻是为了防止信号反射引起的串扰,通常会根据时钟频率和板卡阻抗来配置,通常时钟上用33欧。通常并行线上不要过时钟,如果过,必须有地层隔离。

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2013/4/10 13:28:26
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.159238 Call, 1 Queries, Processed in 0.015625 second(s),