滴滴FAE

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

FC11290G在MT8167的调试

2
阅读(2085)

液晶驱动IC:FC11290

LCD:略

接口:MIPI-4LANE

Power mode:3power

问题点1:开机显示异常,见下图,中间发黑,四周亮,从经验来看,应该是GIP不对导致,所以需要从代码方面去分析问题。先是用万用表量各输入电压是否正常供电,此处有IOVCC,VSN,VSP,经测量,各路电压供电正常。

image.png

由于第一次调这款IC,还没有拿到IC规格书,手上只有初始化代码,本来想试试BIST MODE,先排除porch不对导致的显异,既然没有IC资料,那BIST MODE就不试了。

接下来我们看看初始化代码,如下为完整的初始化代码,个别寄存器的参数比较多(注意*),如E9h,EAh。

第一步,先让方案把LCD.C发我核对,看是否为移植出错,经对比发现平台下的代码跟测试架下发的代码一致。

{0x11, 0, {}},

{REGFLAG_DELAY, 120, {} },

{0xB9,3,{0xF1,0x12,0x90}},

{0xBA,27,{0x33,0x81,0x15,0xF9,0x0E,0x0E,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x25,0x00,0x91,0x0A,0x00,0x00,0x00,0x4F,0x01,0x00,0x00,0x37}},

{0xB2,3,{0x40,0x0A,0x30}},

{0xB3,10,{0x28,0x28,0x28,0x28,0x03,0xFF,0x00,0x00,0x00,0x00}},

{0xB4,1,{0x80}},

{0xB5,3,{0x09,0x09,0xF0}},

{0xB6,2,{0xb8,0xb8}}, 

{0xB8,2,{0x76,0x22}},

{0xBC,1,{0x46}}, 

{0xBF,3,{0x02,0x11,0x00}},

{0xC0,9,{0x73,0x73,0x50,0x50,0x00,0x00,0x08,0x70,0x00}},

{0xC1,12,{0x53,0x00,0x32,0x32,0x77,0xc1,0xCC,0xDD,0xAA,0xAA,0x77,0x77}},

{0xCC,1,{0x0B}},

{0xE3,14,{0x07,0x07,0x0B,0x0B,0x03,0x0B,0x00,0x00,0x00,0x00,0xFF,0x80,0xC0,0x10}},

{0xE9,63,{0x02,0x00,0x00,0x00,0x00,0x41,0x88,0x12,0x31,0x23,0x38,0x04,0x61,0x88,0x37,0x0A,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x31,0x57,0x88,0x88,0x88,0x18,0x8F,0x38,0x88,0xF8,0x88,0x20,0x46,0x88,0x88,0x88,0x08,0x8F,0x28,0x88,0xF8,0x88,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}}, 

{0xEA,63,{0x00,0x1A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x46,0x20,0x88,0x88,0x88,0x2F,0x88,0x08,0x88,0xF8,0x88,0x57,0x31,0x88,0x88,0x88,0x3F,0x88,0x18,0x88,0xF8,0x88,0x23,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x0B}},

{0xE0,34,{0x00,0x12,0x18,0x3F,0x3F,0x3F,0x4C,0x48,0x07,0x0D,0x0D,0x10,0x10,0x11,0x13,0x10,0x1E,0x00,0x12,0x18,0x3F,0x3F,0x3F,0x4C,0x48,0x07,0x0D,0x0D,0x10,0x10,0x11,0x13,0x10,0x1E}},

{0xC6,8,{0x00,0x0C,0xFF,0xFF,0x00,0xFF,0x60,0x28}},

{0x29, 0, {}},

{REGFLAG_DELAY, 50, {} },

{REGFLAG_END_OF_TABLE, 0x00, {}},

};

第二步,看看主板下发的代码是否正确,是否存在漏发,错发,多发,这种问题在调屏过程中遇到过很多次,要时刻提醒自己,紧接着飞线(D0N,D0P,GND),用随身携带的逻辑分析仪(TL2236B)抓取主板下的代码,如下图所示。

image.png

很明显,主板在发送初始化出现错误,E9,EA对应GIP,E0是设置gamma的。那问题来了,为什么MTK平台会发送错误?我们很少遇到发送错误的,其实屏厂的工程师有时在测试架上也会遇到,市场上常见的MIPI测试架都是用的SSD2828QN4,当打包个数(length)与实际下发的参数不一致时,也会导致整个数据包出错,从而导致这个寄存器配置不成功。

由此可见分析问题的方向是对的,接下来要做的就是找到MIPI打包出错的原因。前面我们提到个别寄存器的长度太长,上述代码中像E9h,EAh,参数有63个加上寄存器本身都64个字节了,我们常见的ic寄存器参数都比较短,像FITI,ILITEK,Novatek,Gohi,Focaltech,himax的参数都不会太长,以前见过三星的IC(S6D7AT0B01)有的寄存器参数比较长,有100多个。

从以往的经验来看,有些IC在MTK平台要用其它的写法,如data_array这种写法,这种写法直接将datatype都体现出来,如{0xB9,3,{0xF1,0x12,0x90}},对应的data_array写法如下:

data_array[0]=0x00043902;

data_array[1]=0x9012F1B9;

dsi_set_cmdq(data_array,2, 1);

手工转换太慢,于是找群里的大佬要了一个小工具,分分钟搞定格式转换。

data_array[0]=0x00043902;

data_array[1]=0x9012F1B9;

dsi_set_cmdq(data_array,2, 1);


data_array[0]=0x001C3902;

data_array[1]=0x158133BA;

data_array[2]=0x020E0EF9;

data_array[3]=0x00000000;

data_array[4]=0x44000000;

data_array[5]=0x0A910025;

data_array[6]=0x4F000000;

data_array[7]=0x37000001;

dsi_set_cmdq(data_array,8, 1);


data_array[0]=0x00043902;

data_array[1]=0x300A40B2;

dsi_set_cmdq(data_array,2, 1);


data_array[0]=0x000B3902;

data_array[1]=0x282828B3;

data_array[2]=0x00FF0328;

data_array[3]=0x00000000;

dsi_set_cmdq(data_array,4, 1);


data_array[0]=0x80B41500;

dsi_set_cmdq(data_array,1, 1);


data_array[0]=0x00043902;

data_array[1]=0xF00909B5;

dsi_set_cmdq(data_array,2, 1);


data_array[0]=0x00033902;

data_array[1]=0x00BBBBB6;

dsi_set_cmdq(data_array,2, 1);


data_array[0]=0x00033902;

data_array[1]=0x002276B8;

dsi_set_cmdq(data_array,2, 1);


data_array[0]=0x46BC1500;

dsi_set_cmdq(data_array,1, 1);


data_array[0]=0x00043902;

data_array[1]=0x001102BF;

dsi_set_cmdq(data_array,2, 1);


data_array[0]=0x000A3902;

data_array[1]=0x507373C0;

data_array[2]=0x08000050;

data_array[3]=0x00000070;

dsi_set_cmdq(data_array,4, 1);


data_array[0]=0x000D3902;

data_array[1]=0x320053C1;

data_array[2]=0xCCC17732;

data_array[3]=0x77AAAADD;

data_array[4]=0x00000077;

dsi_set_cmdq(data_array,5, 1);


data_array[0]=0x0BCC1500;

dsi_set_cmdq(data_array,1, 1);


data_array[0]=0x000F3902;

data_array[1]=0x0B0707E3;

data_array[2]=0x000B030B;

data_array[3]=0xFF000000;

data_array[4]=0x0010C080;

dsi_set_cmdq(data_array,5, 1);


data_array[0]=0x00403902;

data_array[1]=0x000002E9;

data_array[2]=0x88410000;

data_array[3]=0x38233112;

data_array[4]=0x37886104;

data_array[5]=0x0044000A;

data_array[6]=0x00000000;

data_array[7]=0x00000044;

data_array[8]=0x88573100;

data_array[9]=0x8F188888;

data_array[10]=0x88F88838;

data_array[11]=0x88884620;

data_array[12]=0x288F0888;

data_array[13]=0x0088F888;

data_array[14]=0x00010000;

data_array[15]=0x00000000;

data_array[16]=0x00000000;

dsi_set_cmdq(data_array,17, 1);


data_array[0]=0x00403902;

data_array[1]=0x001A00EA;

data_array[2]=0x00000000;

data_array[3]=0x00000000;

data_array[4]=0x88204600;

data_array[5]=0x882F8888;

data_array[6]=0x88F88808;

data_array[7]=0x88883157;

data_array[8]=0x18883F88;

data_array[9]=0x2388F888;

data_array[10]=0x00000010;

data_array[11]=0x00000010;

data_array[12]=0x00000000;

data_array[13]=0x00000000;

data_array[14]=0x00000000;

data_array[15]=0x00000000;

data_array[16]=0x0B010000;

dsi_set_cmdq(data_array,17, 1);


data_array[0]=0x00233902;

data_array[1]=0x181200E0;

data_array[2]=0x4C3F3F3F;

data_array[3]=0x0D0D0748;

data_array[4]=0x13111010;

data_array[5]=0x12001E10;

data_array[6]=0x3F3F3F18;

data_array[7]=0x0D07484C;

data_array[8]=0x1110100D;

data_array[9]=0x001E1013;

dsi_set_cmdq(data_array,10, 1);


data_array[0]=0x00093902;

data_array[1]=0xFF0C00C6;

data_array[2]=0x60FF00FF;

data_array[3]=0x00000028;

dsi_set_cmdq(data_array,4, 1);

代码发给驱动并编译软件验证,结果还是一样的现象,用逻辑分析仪抓取发现仍然发错,由此可以说明代码错发跟格式没关系,需要从其它地方找原因。当天建议方案提FAQ给MTK原厂。

第二天收到方案公司的回复说初始化已经送成功,屏已经正常点亮,他们说改了如下地方,至于下面的代码会影响什么,就不清楚了,属于我的知识盲区,或许是设置了打包长度

image.png

默认的mipi打包长度应该是64byte(para_list[64])以内,见下面结构体,反正记住这点吧,既然理解不了那就记死的。

struct LCM_setting_table {

unsigned char cmd;

unsigned char count;

unsigned char para_list[64];

};

终上所述,开机显异的问题解决。

半个月后,方案又反馈问题,说唤醒显示异常,此处说明一下,第一次送的样品唤醒正常,试产的屏唤醒异常,有可能是IC厂改了东西,但不对外透露,我用测试架回读两个屏的默认值发现有差异,下图为寄存器对比图。

image.png

不良现象如下图,显示异常。

image.png

还是老方法,直接抓主板下的代码,发现有发2A,2B寄存器,用测试架将2A,2B加上去,未见2A,2B干扰FC11290G,以前在波导时遇到过,ILI9881B+GP3.97吃2A,2B寄存器。现在大部分FW以上分辨率的IC都不带RAM,担心会吃这些寄存器。

image.png

问IC原厂的朋友,他说可能是复位不对导致的,个别寄存器复位不成功,导致写不成功,此时用万用表量唤醒时的各路电压发现IOVCC=2.8V。


普及一个小常识,MTK平台开机调用的是LK,唤醒调用kernel,容易记混淆。


当前软件开机时IOVCC=1.8V,显示正常,但是kernel唤醒后IOVCC变成2.8V了,IOVCC是逻辑电平,RESET的高电平需要跟IOVCC保持一致,唤醒时RESET的高电平还是1.8V,1.8V高电平复位不一定会成功,电平不兼容导致复位不完全,导致主板给FC11290写初始化不成功,从而导致唤醒后的画面异常。


滴滴FAE小提示:分析问题时,先排除硬件没问题再找软件的问题,以上问题完美解决,希望对你有用。