天嵌 ARM开发社区

 找回密码
 注册
查看: 1595|回复: 1

SDRAM实际大小与配置值不一致

[复制链接]
rchjbc 发表于 2013-12-14 17:31:09 | 显示全部楼层 |阅读模式
天嵌给提供的裸奔测试程序中设置的SDRAM大小是128MB,不知道大家注意到没有?
个人猜测CPU是根据设置的SDRAM大小来确定与BA0/1连接的地址线,例如对于64MB/32 bits的配置,内核地址对应为addr[25:0],这个地址送到CPU中的SDRAM控制器以后,addr[1:0]用来确定DQM信号,addr[10:2]对应列地址,addr[23:11]对应行地址,addr[25:24]对应Bank选择信号。板子上SDRAM有64MB,电路中Bank选择信号连接了addr[25:24],这个没有问题。但是如果设置SDRAM大小的时候设置成了128MB会有什么结果?是不是CPU就把addr[26:25]变成了Bank选择信号?这样的话对于开发板上64MB的SDRAM来说其bank选择信号就是错误的,不知道这样的分析有没有道理?
问题是SDRAM配置成128MB以后我对它进行了测试,从地址0x301ffff0写到0x33fffff0,差不多把64MB的SDRAM全覆盖了(前2MB没有写,因为怕把程序给覆盖掉),然后再读一遍,对比写入和读出的数据,发现完全一致。错误的bank选择信号,读写居然还正常,我就想不通了,求高手解答啊
 楼主| rchjbc 发表于 2013-12-14 17:37:07 | 显示全部楼层
这里附上测试代码
void Main(void)
{
        unsigned int *p=(unsigned int *)0x301ffff0;
        unsigned int *p_end=(unsigned int *)0x33fffff0;
        UART0_init(115200);
        printf("\n\rSDRAM test ...\n\r");
       
        for(;p<p_end;p++)
                *p=(unsigned int)p;
       
        p=(unsigned int *)0x301ffff0; //指针归位
       
        for(;p<p_end;p++)
        {
                if(*p!=((unsigned int)p))
                printf("addr: %x,  read value=%x\n\r",(unsigned int)p,*p);
        }
        printf("\n\rSDRAM test end...\n\r");       
        while(1);
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-5-3 06:14 , Processed in 1.062500 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表