搜索
bottom↓
回复: 13

RTT加入64Mbit SDRAM 后,运行mem_text(),8位和16位测试成功,32位测试失败?

[复制链接]

出0入0汤圆

发表于 2012-2-14 12:07:05 | 显示全部楼层 |阅读模式
直接看图


(原文件名:75F55A1A-C125-4123-AF6B-3CC7A371E570.jpg)

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2012-2-14 12:09:54 | 显示全部楼层
这图楼主能看清?

测试时直接把RAM全写了,所以此时所测试RAM不能被别人使用,不然肯定乱了。

出0入0汤圆

 楼主| 发表于 2012-2-14 12:39:15 | 显示全部楼层
回复【1楼】aozima  
-----------------------------------------------------------------------

不好意思,图像传小了


(原文件名:(G3HZ7JU08]`P5G}$WI66CP.jpg)

还有一个问题,我现在使用的是LM3S9D92,外挂的64Mbit的SDRAM 和内部的96K RAM 如何区别?

出0入0汤圆

发表于 2012-2-14 12:55:30 | 显示全部楼层
MARK.

出0入0汤圆

 楼主| 发表于 2012-2-14 13:10:57 | 显示全部楼层
回复【1楼】aozima  
这图楼主能看清?
测试时直接把ram全写了,所以此时所测试ram不能被别人使用,不然肯定乱了。
-----------------------------------------------------------------------

直接全写了?不明白什么意思?

        uint8_t * p_uint8_t = (uint8_t *)address;
        for(i=0; i<size/sizeof(uint8_t); i++)
        {
            *p_uint8_t++ = (uint8_t)i;
        }

起始地址:0x6000,0000  size:0x0080,0000
这不算全写吗?


还有,我觉得我的SDRAM全部地址都能访问。
但是总搞不明白FINSH时常会出现错误的信息。

比如所发的图:跑着跑着,就出现RTT的LOGO,然后FINSH跟死了一样

还如:访问SPI_FLASH时,连着读2000个字节时,也会出现FINSH死掉

(原文件名:H%S%0E~FTM_ZWS118C1E2~D.jpg)

出0入0汤圆

发表于 2012-2-14 13:13:59 | 显示全部楼层
RAMTEST 的数据正确性都不能保证还想系统跑稳定?
更别提因性能差造成的随机数据出错了。

先把外部RAM的时钟降下来保证数据正确性吧。

出0入0汤圆

 楼主| 发表于 2012-2-14 14:14:06 | 显示全部楼层
回复【5楼】aozima  
ramtest 的数据正确性都不能保证还想系统跑稳定?
更别提因性能差造成的随机数据出错了。
先把外部ram的时钟降下来保证数据正确性吧。
-----------------------------------------------------------------------

我上传的图片能很清楚看到8bit test pass 和16bit test pass,这不能够说明RAM数据的正确性吗?

我刚开始学习M3跟RTT,虽然有些问题在你们看来很简单,但对于初学者来说,只需要你们稍稍指点一下,那也是很大的帮助。谢谢

我拿其他的例子说明吧。我是真不明白FINSH出现这些信息是怎么回事?

我在两个地方加入一样的测试RAM的代码;
1、在board.c里面加入;
#if LM3S_EXT_SRAM == 1
        /* init SDRAM */
        rt_hw_sdram_init();
    /* memtest */
    {
        unsigned char * p_extram = (unsigned char *)LM3S_EXT_SRAM_BEGIN;
        unsigned int temp;

        rt_kprintf("\r\nmem testing....\n");
        for(temp=0; temp<(LM3S_EXT_SRAM_END-LM3S_EXT_SRAM_BEGIN); temp++)
        {
            *p_extram++ = (unsigned char)temp;
        }

        p_extram = (unsigned char *)LM3S_EXT_SRAM_BEGIN;
        for(temp=0; temp<(LM3S_EXT_SRAM_END-LM3S_EXT_SRAM_BEGIN); temp++)
        {
            if( *p_extram++ != (unsigned char)temp )
            {
                rt_kprintf("\rmemtest fail @ %08X\r\nsystem halt!!!!!",(unsigned int)p_extram);
                while(1);
            }
        }
        rt_kprintf("\rmem test pass!!\r\n");
    }/* memtest */
#endif

2、在FINSH里面加入测试函数

void mem_check()
{    /* memtest */
    {
        unsigned char * p_extram = (unsigned char *)LM3S_EXT_SRAM_BEGIN;
        unsigned int temp;

        rt_kprintf("\r\nmem testing....\n");
        for(temp=0; temp<(LM3S_EXT_SRAM_END-LM3S_EXT_SRAM_BEGIN); temp++)
        {
            *p_extram++ = (unsigned char)temp;
        }

        p_extram = (unsigned char *)LM3S_EXT_SRAM_BEGIN;
        for(temp=0; temp<(LM3S_EXT_SRAM_END-LM3S_EXT_SRAM_BEGIN); temp++)
        {
            if( *p_extram++ != (unsigned char)temp )
            {
                rt_kprintf("\rmemtest fail @ %08X\r\nsystem halt!!!!!",(unsigned int)p_extram);
                while(1);
            }
        }
        rt_kprintf("\rmem test pass!!\r\n");
    }/* memtest */
}
FINSH_FUNCTION_EXPORT(mem_check, check SDRAM );

测试结果如下图:

(原文件名:Snap1.jpg)

出0入0汤圆

 楼主| 发表于 2012-2-14 14:16:09 | 显示全部楼层
回复【5楼】aozima  
ramtest 的数据正确性都不能保证还想系统跑稳定?
更别提因性能差造成的随机数据出错了。
先把外部ram的时钟降下来保证数据正确性吧。
-----------------------------------------------------------------------

对了,我使用的是最新的RT-Thread 1.0.0

其他的版本我没有。

出0入0汤圆

发表于 2012-2-14 14:24:52 | 显示全部楼层
“我上传的图片能很清楚看到8bit test pass 和16bit test pass,这不能够说明RAM数据的正确性吗? ”
如果这能说明,那16位就不用测了
8位测试保证字节片选正常工作。(存储器宽度大于8时通过BL来选择写高8位或低8位)
16位保证多片RAM都正常。   (大部分系统都用多片存储器组合成32位)
32位位测试同上。
32位环回测试保证每个地址都是有效的。 (8位到FF就环回了,1M的RAM你输入size为2M测试也是通过的)

“我在两个地方加入一样的测试RAM的代码;”
但结果却不一样(要考虑此时环境也不一样,第一次测试是在finsh启动前)。
因为,SDRAM被初始化成heap被人用掉了(finsh就是动态线程),你再对其进行写操作,就会乱掉。
这个问题在1楼就说明了。

要全片测试,就先不要让别人使用SDRAM。(#if LM3S_EXT_SRAM == 1 )

startup.c (把下面代码手动修改为先不使用片外RAM)

#ifdef RT_USING_HEAP
#if LM3S_EXT_SRAM == 1
    /* init sdram */
    rt_system_heap_init((void*)LM3S_EXT_SRAM_BEGIN, (void*)LM3S_EXT_SRAM_END);
#else
#ifdef __CC_ARM
    rt_system_heap_init((void*)&Image$$RW_IRAM1$$ZI$$Limit, (void*)LM3S_SRAM_END);
#elif __ICCARM__
    rt_system_heap_init(__segment_end("HEAP"), (void*)LM3S_SRAM_END);
#else
    /* init memory system */
    rt_system_heap_init((void*)&__bss_end, (void*)LM3S_SRAM_END);
#endif
#endif
#endif

出0入0汤圆

发表于 2012-2-14 14:45:52 | 显示全部楼层
也就是说,在进行全部SDRAM测试前,请确保其他程序不会去使用SDRAM。如果把SDRAM作为heap使用,那么肯定会坏掉。

所以,在进行测试前,请让整个系统完全使用片内的SRAM。

出0入0汤圆

 楼主| 发表于 2012-2-14 14:47:14 | 显示全部楼层
回复【8楼】aozima  
-----------------------------------------------------------------------


mem testing....
mem test pass!!

\ | /
- RT -     Thread Operating System
/ | \     1.0.0 build Feb 13 2012
2006 - 2011 Copyright by rt-thread team
finsh>>SPI File System initialized!
TCP/IP initialized!

finsh>>mem_test(0x60000000, 0x00800000)
memtest,address: 0x60000000 size: 0x00800000
8bit test pass!!
16bit test pass!!
32bit test pass!!
32bit Loopback test pass!!
        1, 0x00000001
finsh>>


谢谢aozima.

开始不明白“测试时直接把RAM全写了,所以此时所测试RAM不能被别人使用,不然肯定乱了。”什么意思

呵呵,是不是说我使用了外部RAM之后,其他的线程如果也使用了外部RAM,就会出错?

还有不太明白,内部和外部的RAM,RTT是如何调度的?

出0入0汤圆

发表于 2012-2-14 14:50:49 | 显示全部楼层
回复【10楼】sunchao151  
内部和外部的RAM,RTT是如何调度的?
-----------------------------------------------------------------------

目前仅能够指定一块memory为heap,1.1.x分支会能够支持多块不连续的内存区域作为heap。

在目前这种情况下,可以类似STM32Radio的方式,把内部RAM提供给全局变量、静态变量,外部RAM作为Heap使用(应该目前的LM3S9B分支代码就是这样吧)。

出0入0汤圆

发表于 2012-2-14 14:53:12 | 显示全部楼层
“是不是说我使用了外部RAM之后,其他的线程如果也使用了外部RAM,就会出错”
正常使用情况下,HEAP被系统管理,只要应用程序不过界访问就不会有问题。

比如你测试时,finsh是动态线程,栈开在SDRAM中,而你直接全写成FF了,那finsh会如何?

“还有不太明白,内部和外部的RAM,RTT是如何调度的”
目前只能任选其一做为HEAP使用。

出0入0汤圆

 楼主| 发表于 2012-2-14 16:59:08 | 显示全部楼层
回复【11楼】ffxz  
回复【10楼】sunchao151  
内部和外部的ram,rtt是如何调度的?
-----------------------------------------------------------------------
目前仅能够指定一块memory为heap,1.1.x分支会能够支持多块不连续的内存区域作为heap。
在目前这种情况下,可以类似stm32radio的方式,把内部ram提供给全局变量、静态变量,外部ram作为heap使用(应该目前的lm3s9b分支代码就是这样吧)。
-----------------------------------------------------------------------

谢谢了,刚写完的spi flash (w25Q32)挂载到文件系统里也出现问题
我另外发一个贴,帮我解决下问题,好吗?

给如下链接,谢谢;
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=5406758&bbs_id=3066
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 01:48

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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