767+64MB内存+10寸LTDC 内存数据部分出错

2019-07-20 10:25发布

本帖最后由 orta 于 2017-12-18 15:56 编辑

请问,小弟最近做一个项目,需要用64MB内存 + 10寸 1280x800 电容屏(RGB565)

首先,单独测试SDRAM(程序中没有LTDC的使用)
u8 testsram[64*1024*1024] __attribute__((at(0XC0000000)));// 数组映射到地址 0XC0000000

测试代码:

    for(i=0;i<64*1024*1024;i++)
    {
        testsram[ i ] = k; // K 代表测试次数
  }   
    temp=0;
    for(i=0;i<64*1024*1024;i++)
    {
        if(testsram
[ i ]!=k){wrong++;}

  }   


这个代码十分简单,使劲刷SDRAM所有地址 所有数据, 经测试,64MB SDRAM 工作正常,wrong 从来没有++ 过。
======================================================================================================


然后,开始挂载1280x800电容屏。用的正点原子的 10.1寸电容屏,采用1层 LTDC, 屏的SDRAM映射地址为:
u16 ltdc_lcd_framebuf[1280][800] __attribute__((at(0XC0000000))), 也就是 SDRAM起始地址。
层配置:
    LTDC_Layer_Parameter_Config(0,(u32)ltdc_framebuf[0],LCD_PIXFORMAT,255,0,6,7,0X000000);
    LTDC_Layer_Window_Config(0,0,0,lcdltdc.pwidth,lcdltdc.pheight);   


通过 多点触摸 测试程序, 5点触摸工作正常,屏幕显示稳定。

===========================================================================================================

最后,挂载电容屏显示的同时,将SDRAM空闲部分的空间进行测试。

屏的映射起始地址:u16 ltdc_lcd_framebuf[1280][800] __attribute__((at(0XC0000000))),


测试数组映射地址:u8 sdram_array[60*1024*1024] __attribute__((at(0XC0400000)));           // 屏缓冲占 1280x800x2 字节 , 我多给它让一点空间,让出4MB吧,所以, sdram_array 数组起始地址为 0XC0000000 + 4*1024*1024 = 0XC0400000

然后,通过

测试代码:

    for(i=0;i<60*1024*1024;i++)
    {
        sdram_array
[ i ] = k; // K 代表测试次数
  }   
    temp=0;
    for(i=0;i<60*1024*1024;i++)
    {
        if(sdram_array
[ i ]!=k){wrong++;}
  }   


悲剧发生了, wrong跑出来很多 (但不是所有地址都有错)。
经过测试, i<10*1024*1024 , 只测试10MB空间 还是正确,加大测试范围则开始出现错误,但不是所有地址都错 (wrong 计数器 小于 i 计数器)

我尝试过
1. 降低SDRAM配置时钟
2. 降低LTDC时钟
3. 更换LTDC映射地址位置

都无法解决。

请问还有什么原因会导致这个问题呢?
我想到的,是不是 因为同时挂载了LTDC 和SDRAM, LTDC总是占用总线,导致 单独对SDRAM其他地址空间操作时失败?

谢谢大家!







友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
orta
1楼-- · 2019-07-20 14:49
 精彩回答 2  元偷偷看……
orta
2楼-- · 2019-07-20 17:51
自勉。。。。
正点原子
3楼-- · 2019-07-20 22:13
降低LTDC的像素时钟试试。
像素时钟不能超过50M

一周热门 更多>