滴滴FAE

各种调屏经验分享:TFT,AMOLED,PMOLED,详情见麦瑞科技术mrklcd.com

RM69032在MTK6739平台调试案例

0
阅读(6293)

屏的型号为H163QLN01.1

1,先简单介绍屏的接口定义,此屏接口定义有ELVDD&ELVSS,可以看出不带升压IC,ELVDD跟ELVSS分别是正负电压,type value分别为+4.63,-3.45这个需要主板提供给屏,工作原理是当主板下完初始化后,下了亮度指令后(大多数IC是51h,此处是CFh的P1),第10脚SWIRE会输出高电平给到升压IC(TPS65631)的使能脚(CTRL),方可实现升压。

VDD是Analog Power supply type value=3.0V

IOVDD是Digital Power supply  type value=1.8V

TE是同步信号,mipi cmd mode才到,video mode用不上,至于为什么,了解一下驱动IC的GRAM

MTP是烧OTP用的,方案公司用不上

其它就是mipi差分信号不作介绍,总体来讲接口定义比较简单


image.png

图1 接口定义


image.png

   图2 EVLDSS&ELVSS升压电路


现在讲一个真实的案例,平台是MTK6739,遇到两个问题

问题1:睡眠唤醒后,画面有一半是雪花点,初步怀疑是读了窗口地址,拿逻辑分析仪抓主板唤醒的代码。

image.png

图3 画面异常现象

image.png

图4 开机代码


image.png

图5 睡眠唤醒代码

从逻辑分析仪抓到的数据可以得知,有写2A,2B,虽然屏的分辨率是320*320,但写0X13F未必会正常,因为驱动IC的默认设置可能不是0x13F,何况规格书中没有写这两个寄存器,最好不要乱写,没必要给自己挖坑,屏蔽2A,2B指令后,屏显示正常。

OK视频

问题2:

进入睡眠后VDD与IOVCC不断电,ELVDD与ELVSS只能通过SWIRE控制开断,下睡眠指令后ELVDD与ELVSS关闭,但唤醒时会遇到闪一条白线,而且是概率性的出现,睡眠时间越长越容易出现,有点类似于TFT中的背光开早了一样,我用测试架模拟可以实现唤醒不闪,具体方法如下:

以下是测试架的代码,转接IC是SSD2828,送视频数据后再打开亮度与显示寄存器,有疑问可以联系我

TG_OpenVideo();

MIPI_SetMode(VD);//进入mipi HS MODE

//高速下指令

MIPI_GenericLongWrite(6);

MIPI_WriteData(0xF0);

MIPI_WriteData(0x55);

MIPI_WriteData(0xAA);

MIPI_WriteData(0x52);

MIPI_WriteData(0x08);

MIPI_WriteData(0x01);//page1


MIPI_GenericLongWrite(8);

MIPI_WriteData(0xCF);//p1写0xCF 打开亮度

MIPI_WriteData(0xFf);

MIPI_WriteData(0xD4);

MIPI_WriteData(0x95);

MIPI_WriteData(0xE8);

MIPI_WriteData(0x4F);

MIPI_WriteData(0x00);

MIPI_WriteData(0x04);


MIPI_GenericLongWrite(6);

MIPI_WriteData(0xF0);

MIPI_WriteData(0x55);

MIPI_WriteData(0xAA);

MIPI_WriteData(0x52);

MIPI_WriteData(0x08);

MIPI_WriteData(0x00);//page0


MIPI_DcsShortWrite(1);

MIPI_WriteData(0x29);  // Display on

Delayms(20);



以下是MTK39平台的代码节选


static struct LCM_setting_table lcm_initialization_setting[] = 

{

{0xF0,5,{0x55,0xAA,0x52,0x08,0x00}},


{0xBD,5,{0x03,0x20,0x14,0x4B,0x00}},


{0xBE,5,{0x03,0x20,0x14,0x4B,0x01}},


{0xBF,5,{0x03,0x20,0x14,0x4B,0x00}},


{0xBB,3,{0x07,0x07,0x07}},


{0xC7,1,{0x40}},


{0xF0,5,{0x55,0xAA,0x52,0x08,0x02}},


{0xEB,1,{0x02}},


{0xFE,2,{0x08,0x50}},


{0xC3,3,{0xF2,0x95,0x04}},


{0xE9,3,{0x00,0x36,0x38}},


{0xCA,1,{0x04}},


{0xF0,5,{0x55,0xAA,0x52,0x08,0x01}},


{0xB0,3,{0x03,0x03,0x03}},


{0xB1,3,{0x05,0x05,0x05}},


{0xB2,3,{0x01,0x01,0x01}},


{0xB4,3,{0x07,0x07,0x07}},


{0xB5,3,{0x03,0x03,0x03}},


{0xB6,3,{0x55,0x55,0x55}},


{0xB7,3,{0x36,0x36,0x36}},


{0xB8,3,{0x23,0x23,0x23}},


{0xB9,3,{0x03,0x03,0x03}},


{0xBA,3,{0x03,0x03,0x03}},


{0xBE,3,{0x32,0x30,0x70}},


{0xCF,7,{0x00,0xD4,0x95,0xE8,0x4F,0x00,0x04}},//when boot,p1=0x00 light off,建议进入高速后再开亮度,否则会闪


{0x35,1,{0x01}},// TE ON


{0x36,1,{0x00}},


{0xC0,1,{0x20}},


{0xC2,6,{0x17,0x17,0x17,0x17,0x17,0x0B}},


{0xF0,5,{0x55,0xAA,0x52,0x08,0x02}},


{0xED,8,{{0x48,0x00,0xFF,0x13,0x08,0x30,0x0C,0x00}},


{0x11, 0, {0x00}},//Sleep out


{REGFLAG_DELAY,300,{0x00}},


{0xF0,5,{0x55,0xAA,0x52,0x08,0x02}},


{0xED,8,{0x48,0x00,0xFE,0x13,0x08,0x30,0x0C,0x00}},


{REGFLAG_DELAY, 20, {0x00}},


{0xED,8,{0x48,0x00,0xE6,0x13,0x08,0x30,0x0C,0x00}},


{REGFLAG_DELAY, 20, {0x00}},


{0xED,8,{0x48,0x00,0xE2,0x13,0x08,0x30,0x0C,0x00}},


{REGFLAG_DELAY, 20, {0x00}},


{0xED,8,{0x48,0x00,0xE0,0x13,0x08,0x30,0x0C,0x00}},


{REGFLAG_DELAY, 20, {0x00}},


{0xED,8,{0x48,0x00,0xE0,0x13,0x08,0x00,0x0C,0x00}},


{REGFLAG_DELAY, 20, {0x00}},


{0x29, 0, {0x00}},//display on


{0xF0,5,{0x55,0xAA,0x52,0x08,0x00}},

{REGFLAG_END_OF_TABLE, 99, {}}

};


static struct LCM_setting_table lcm_deep_sleep_mode_in_setting[] = {

// Display off sequence

{0x28, 0, {0x00}},

{REGFLAG_DELAY,20, {}},

{0xF0,5,{0x55,0xAA,0x52,0x08,0x00}},

{0xc8,7,{0x84,0x12,0x00,0x00,0xA0,0x00,0x0D}},

{0xF0,5,{0x55,0xAA,0x52,0x08,0x01}},

{0xc2,12,{0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F}},

{REGFLAG_DELAY,20, {}},

{0x29, 0, {0x00}},

{REGFLAG_DELAY,20, {}},

{0x28, 0, {0x00}},

{0x10, 0, {0x00}},

{REGFLAG_DELAY, 120, {}},

{REGFLAG_END_OF_TABLE,99, {}}

//power off

};


static void lcm_get_params(LCM_PARAMS *params)

{

memset(params, 0, sizeof(LCM_PARAMS));

params->type   = LCM_TYPE_DSI;

params->width  = FRAME_WIDTH;

params->height = FRAME_HEIGHT;

params->virtual_width = VIRTUAL_WIDTH;

params->virtual_height = VIRTUAL_HEIGHT;


// enable tearing-free

params->dbi.te_mode = LCM_DBI_TE_MODE_VSYNC_ONLY;//LCM_DBI_TE_MODE_VSYNC_ONLY;

params->dbi.te_edge_polarity = LCM_POLARITY_FALLING;


#if (LCM_DSI_CMD_MODE)

params->dsi.mode   = CMD_MODE;

#else

params->dsi.mode   = SYNC_PULSE_VDO_MODE;


#endif

// DSI

params->dsi.LANE_NUM = LCM_ONE_LANE;

//The following defined the fomat for data coming from LCD engine.

params->dsi.data_format.color_order = LCM_COLOR_ORDER_RGB;

params->dsi.data_format.trans_seq   = LCM_DSI_TRANS_SEQ_MSB_FIRST;

params->dsi.data_format.padding     = LCM_DSI_PADDING_ON_LSB;

params->dsi.data_format.format      = LCM_DSI_FORMAT_RGB888;


// Video mode setting

params->dsi.packet_size=256;

params->dsi.PS=LCM_PACKED_PS_24BIT_RGB888;


params->dsi.vertical_sync_active = 2;  //4;

params->dsi.vertical_backporch = 16; //12;

params->dsi.vertical_frontporch = 8; //20;

params->dsi.vertical_active_line = VIRTUAL_HEIGHT; 


params->dsi.horizontal_sync_active = 4;  //8;

params->dsi.horizontal_backporch = 30;

params->dsi.horizontal_frontporch = 30;  //20;

params->dsi.horizontal_active_pixel = VIRTUAL_WIDTH;

  params->dsi.PLL_CLOCK = 93;//fps 60,对应的Mipi速率为186Mbps

}

调试过程中有遇到问题可以联系我