我手头有几块这样的屏,初始化及显示已经成功了,准备移植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;
}
返回结果和写入不一致
一周热门 更多>