STM32/STM8技术william hill官网
直播中

黄宇鑫

4年用户 8经验值
擅长:模拟技术 嵌入式技术 控制/MCU
私信 关注

SDRAM测试异常,256M只能测到32M

本帖最后由 jf_82872908 于 2020-8-27 12:39 编辑

现象:
                设计PCB,展开SDRAM,出现异常现象,初始化之后,运行测试程序,SDRAM有256Mb大小,测试到32Mb就停止了。把测试停止之后的地址作为开始地址进行再一次测试,无响应。SDRAM的起始地址为0xC000 0000,异常地址在0xC1FFFFFC,大家知道这是怎么回事吗?什么原因?
代码:
外部的定义
#define SDRAM_SIZE((uint32_t)0x1000 0000)
#define SDRAM_SIZE_MB((uint32_t)0x100)
#define RT_tiCK_PER_SECOND 1000 测试代码: int sdram_test1(void)
{
    uint32_t i = 0;
    uint32_t start_time = 0;
    volatile uint32_t time_cast = 0;
    char data_width = 4;
    uint32_t data = 0;
   
    rt_kprintf(“正在写入%d MB-%dbytes数据,正在等待...  n”,SDRAM_SIZE_MB,SDRAM_SIZE);
   
    start_time = rt_tick_get(); //获取当前时钟
    为(i = 0; i     {
        *(_ IO uint32_t *)(SDRAM_BANK_ADDR + i * data_width)=(uint32_t)0x5555 5555;
        
        数据= *(__ IO uint32_t *)(SDRAM_SIZE_ADDR + i *数据宽度);
        if(data!= 0x55555555)
        {
            rt_kprintf(“ SDRAM测试失败,Data:%d  n”,data);
            打破;
        }
        time_cast = rt_tick_get()-start_time;
        if(((i + 1)* data_width)%(1024 * 1024)== 0)
        {
            rt_kprintf(“%d Mb Data Checked!Addr:0x%X,count / sum:%d /%d,获取数据: 0x%X成本时间:%d。%03dS。 n“,(int)((i + 1)* data_width / 1024/1024),(SDRAM_BANK_ADDR + i * data_width),i + 1,SDRAM_SIZE / data_width,data ,time_cast / RT_TICK_PER_SECOND,
                        time_cast%RT_TICK_PER_SECOND /(((RT_TICK_PER_SECOND * 1 + 999)/ 1000));
        }
        
        if(i> = SDRAM_SIZE / data_width)
        {
            rt_kprintf(“ SDRAM测试成功! n”);
            打破;
        }
    }
    返回RT_EOK;
}
MSH_CMD_EXPORT(sdram_test1,SDRAM测试1)控制台现象:
  | /
-RT-线程操作系统
/ |  4.0.2 build 2020
年8月27 日-2019年rt-thread团队
sdram初始化成功,映射为0xC0000000,大小为256 Mb,数据宽度为32系统调度程序启动
主线程工作...
msh /> sdram_test1
编写256 Mbytes-268435456字节数据,正在等待。...
1 Mb数据已检查!地址:0xC00FFFFC,计数/总和:262144/67108864,获取数据:0x55555555花费时间:0.084S。
2 Mb数据已检查!地址:0xC01FFFFC,计数/总和:524288/67108864,获取数据:0x55555555花费时间:0.177S。
已检查3 Mb数据!地址:0xC02FFFFC,计数/总和:786432/67108864,获取数据:0x55555555花费时间:0.270S。
已检查4 Mb数据!地址:0xC03FFFFC,计数/总和:1048576/67108864,获取数据:0x55555555花费时间:0.363S。
已检查5 Mb数据!地址:0xC04FFFFC,计数/总和:1310720/67108864,获取数据:0x55555555花费时间:0.457S。
已检查6 Mb数据!地址:0xC05FFFFC,计数/总和:1572864/67108864,获取数据:0x55555555花费时间:0.550S。
已检查7 Mb数据!地址:0xC06FFFFC,计数/总和:1835008/67108864,获取数据:0x55555555花费时间:0.643S。
已检查8 Mb数据!地址:0xC07FFFFC,计数/总和:2097152/67108864,获取数据:0x55555555花费时间:0.736S。
已检查9 Mb数据!地址:0xC08FFFFC,计数/总和:2359296/67108864,获取数据:0x55555555花费时间:0.830S。
已检查10 Mb数据!地址:0xC09FFFFC,计数/总和:2621440/67108864,获取数据:0x55555555花费时间:0.923S。
已检查11 Mb数据!地址:0xC0AFFFFC,计数/总和:2883584/67108864,获取数据:0x55555555花费时间:1.016S。
已检查12 Mb数据!地址:0xC0BFFFFC,计数/总和:3145728/67108864,获取数据:0x55555555花费时间:1.109S。
已检查13 Mb数据!地址:0xC0CFFFFC,计数/总和:3407872/67108864,获取数据:0x55555555花费时间:1.203S。
已检查14 Mb数据!地址:0xC0DFFFFC,计数/总和:3670016/67108864,获取数据:0x55555555花费时间:1.296S。
15 Mb数据已检查!地址:0xC0EFFFFC,计数/总和:3932160/67108864,获取数据:0x55555555花费时间:1.389S。
已检查16 Mb数据!地址:0xC0FFFFFC,计数/和:4194304/67108864,获取数据:0x55555555花费时间:1.483S。
已检查17 Mb数据!地址:0xC10FFFFC,计数/总和:4456448/67108864,获取数据:0x55555555花费时间:1.576S。
已检查18 Mb数据!地址:0xC11FFFFC,计数/总和:4718592/67108864,获取数据:0x55555555花费时间:1.669S。
已检查19 Mb数据!地址:0xC12FFFFC,计数/总和:4980736/67108864,获取数据:0x55555555花费时间:1.763S。
已检查20 Mb数据!地址:0xC13FFFFC,计数/总和:5242880/67108864,获取数据:0x55555555花费时间:1.856S。
已检查21 Mb数据!地址:0xC14FFFFC,计数/总和:5505024/67108864,获取数据:0x55555555花费时间:1.949S。
22 Mb数据已检查!地址:0xC15FFFFC,计数/总和:5767168/67108864,获取数据:0x55555555花费时间:2.043S。
已检查23 Mb数据!地址:0xC16FFFFC,计数/总和:6029312/67108864,获取数据:0x55555555花费时间:2.136S。
已检查24 Mb数据!地址:0xC17FFFFC,计数/总和:6291456/67108864,获取数据:0x55555555花费时间:2.229S。
已检查25 Mb数据!地址:0xC18FFFFC,计数/总和:6553600/67108864,获取数据:0x55555555花费时间:2.323S。
已检查26 Mb数据!地址:0xC19FFFFC,计数/总和:6815744/67108864,获取数据:0x55555555花费时间:2.416S。
已检查27 Mb数据!地址:0xC1AFFFFC,计数/总和:7077888/67108864,获取数据:0x55555555花费时间:2.509S。
已检查28 Mb数据!地址:0xC1BFFFFC,计数/总和:7340032/67108864,获取数据:0x55555555花费时间:2.603S。
已检查29 Mb数据!地址:0xC1CFFFFC,计数/和:7602176/67108864,获取数据:0x55555555花费时间:2.696S。
30 Mb数据已检查!地址:0xC1DFFFFC,计数/和:7864320/67108864,获取数据:0x55555555花费时间:2.789S。
已检查31 Mb数据!地址:0xC1EFFFFC,计数/总和:8126464/67108864,获取数据:0x55555555花费时间:2.883S。
已检查32 Mb数据!地址:0xC1FFFFFC,计数/总和:8388608/67108864,获取数据:0x55555555花费时间:2.976S。



附件为威廉希尔官方网站 连接。
  • PCB_CONNECT.JPG
已退回13积分

回帖(3)

zhangfen137

2020-10-2 01:09:18
你如果是 256Mb 的内存,就是 32MB 字节,1B = 8b,32MB = 256Mb,没问题呀
举报

dlutccj

2020-10-13 09:21:59
关注一下地址线
举报

zhangfen137

2021-9-1 16:47:43
SDRAM的起始地址为0xC000 0000,异常地址在0xC1FFFFFC,一共 0x01FFFFFC 个地址,也就是 32M 个地址,没错。每个地址对应一个字节的数据,也就是 8 bit,32M 个 8 bit 就是 256Mb 大小,没错。 0xC1FFFFFC 地址就是 SDRAM 最后一个地址了,再往后的地址都是空,当然会出错
举报

更多回帖

发帖
×
20
完善资料,
赚取积分