上司给了一块新屏及其初始化代码,要求在MT6735平台上调试好新屏。
新屏的初始化代码如下:
//*************************************************//
//LCDD (Peripheral) Setting ILI9881C+hsd5.0HD
//*************************************************//
Generic_Long_Write_3P(0xFF,0x98,0x81,0x03);
Generic_Short_Write_1P(0x01,0x00);
...................................................................
Generic_Short_Write_1P(0xD2,0x65);
Generic_Short_Write_1P(0xD3,0x39);
Generic_Long_Write_3P(0xFF,0x98,0x81,0x00);
Generic_Short_Write_NP(0x35); //TE on
//Sleep Out
DCS_Short_Write_NP(0x11);
Delay(120);
//Display ON
DCS_Short_Write_NP(0x29);
Delay(20);
根据第二行 ILI9881C+hsd5.0HD ,我想这块屏应该属于ILI9881系列,应该在之前已调好的ILI9881屏代码的基础上修改初始化代码,于是我在原平台代码中找到一块名为ili9881_hd_dsi_vdo_cmi_yx的屏代码,其内部初始化代码格式为:
{0xFF, 3, {0x98,0x81,0x03}},
{0x01, 1, {0x00}},
..................................
{0xFF, 3, {0x98,0x81,0x00}},
{0x35, 0, {0x00}},
//Sleep Out
{0x11, 0, {0x00}},
{REGFLAG_DELAY, 120, {}},
//Display ON
{0x29, 0, {0x00}},
{REGFLAG_DELAY, 20, {}},
{REGFLAG_END_OF_TABLE, 0x00, {}}
将厂商提供的初始化代码改成平台识别的格式,方法一看便知,数据没变,变得只是格式。但值得注意的是:
Generic_Short_Write_NP 对应于 0,
DCS_Short_Write_NP(0x11) 对应于{0x11, 0, {0x00}}
Delay(120) 对应于{REGFLAG_DELAY, 120, {}}
将初始化代码修改保存后,编译,使用flashtool 刷机,开机后正常显示了第一帧画面,然后就重启了。
借助MyCommTool串口调试工具,在其生成的log文件中查找error: ,发现错误如下:
...............................................................................................................................
[ 15.074292] [name:fault&][0000dead] *pgd=00000000bd819003, *pud=00000000bd819003, *pmd=00000000bd81a003, *pte=0000000000000000
[ 15.075725] <0>-(0)[184:gt1x_auto_updat][name:traps&]Internal error: Oops: 96000045 [#1] PREEMPT SMP
[ 15.076872] [name:aee&]disable aee kernel api
........................................................................................................................................................................................................
分析结论:GTP启动失败导致重启,将GTP关闭
解决办法:在配置文件中将以下几行注释掉
# CONFIG_TOUCHSCREEN_MTK_GT1151 is not set
# CONFIG_GT1151_FIRMWARE="firmware1"
# CONFIG_GT1151_CONFIG="config2"
# CONFIG_GTP_DRIVER_SEND_CFG=y
# CONFIG_GTP_CUSTOM_CFG=y
# CONFIG_GTP_HOTKNOT=y
# CONFIG_GTP_AUTO_UPDATE=y
# CONFIG_GTP_HEADER_FW_UPDATE=y
# CONFIG_GTP_CREATE_WR_NODE=y
# CONFIG_GTP_POWER_CTRL_SLEEP=y
之后屏就调好了。