有人用过ILI9488吗?——读GRAM数据不对已解决,jpg图片显示又碰到问题了

2019-07-21 00:57发布

我手头有几块这样的屏,初始化及显示已经成功了,准备移植bmp的时候发现要用到读DRAM内容,本以为很简单的,但发现读出来的内容和写入的有差别,不知道是怎么回事?
芯片手册见附件,几个命令的说明如下:
1、写DRAM

2、读DRAM


我用的16位总线方式,简单测试了一些数据:
写入      读出
0x0000  0x0100
0x1111  0x1120
0x2222  0x2544
0x3333  0x3564
0x4444  0x4188
0x5555  0x51A8
0x6666  0x65CC
0x7777  0x75EC
0x8888  0x8910
0x9999  0x9930
0xAAAA  0xAD54
0xBBBB  0xBD74
0xCCCC  0xC998
0xDDDD  0xD9B8
0xEEEE  0xEDDC
0xFFFF  0xFDFC
为了排除连线问题,我还将读出的数据再写到屏和原先的颜 {MOD}放在一起比较对比,能看到区别,说明有差异的数据位确实写到屏上去了;另外读ID的功能我测试是正常的,它对应的命令如下,和读DARM操作是类似的,代码也没多大区别,但读DRAM就不对了;

附相关的代码:
uint32_t ili9488_read_id(void)
{
 uint32_t lcd_id,lcd_id1=0,lcd_id2=0;
 Write_CMD(0xd3);
 ReadBegin();
 LCD_ReadTrig();
 ReadDataPort();  
 LCD_ReadTrig();
 ReadDataPort();   
 LCD_ReadTrig();
 lcd_id1 = ReadDataPort()&0x00FF;
 LCD_ReadTrig();
 lcd_id2 = ReadDataPort()&0x00FF;
 ReadEnd();       
 lcd_id=(lcd_id1<<8)+lcd_id2;       
 return lcd_id;
}
返回结果正确 ID=0x9488

u16 LCD_ReadPoint(u16 x,u16 y)
{
  u16 r=0;
 if(x>=width||y>=height)return 0; //超过了范围,直接返回 
 LCD_SetCursor(x,y);  Write_CMD(0x2e); //发送读GRAM指令 
 ReadBegin();  
 LCD_ReadTrig(); 
 ReadDataPort();  //dummy Read    LCD_ReadTrig();  
 r = ReadDataPort();
 ReadEnd();   
 return r;
}
返回结果和写入不一致

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。