Mstar 平台背光时序调试

 屏就是一个设备,我们在给它上电后,它需要有一段时间后才启动完毕,对于大多数屏来讲,这个时间都比较短,一般要求大于几十毫秒,之后我们就可以给它送Data & Clock;
 当它收到我们的信号后,它开始要安排输出,这个准备的时间会比较长,不同的屏差异也比较大,普遍是在800ms~1400ms。在这个时间里,
 我们不能将背光打开,否则就会看到各种闪线或是花屏。这两个delay 数据都可以从屏的规格书里找到。

Mstar panel ,VB1上电是分开的,但是针对不同的屏 时,时序有差异,也就是这两者的启动时间间隔是不一样的,下面我们分享一下调试经验。

Panel/VB1 连接

在这里插入图片描述
从硬件原理图上看,panel on/off 由pin D2 控制;VB1 由pin E4 控制。
这两个PIN都属于简单的GPIO口,只需要配置为输出模式,通过高低电平来控制外设。

软件配置

原理图上面的pin 在board 信息里面定义,E4,D2如下:

#define BALL_E4 PAD_GPIO0_PM
#define PAD_GPIO0_PM 6
#define GPIO_PAD_6 GPIO5
#ifndef BALL_E4_IS_GPIO
#define BALL_E4_IS_GPIO 0
#endif 
#ifndef PAD_GPIO0_PM_IS_GPIO
#define PAD_GPIO0_PM_IS_GPIO BALL_E4_IS_GPIO
#endif 
#define BALL_D2 PAD_SAR2
#define PAD_SAR2 32
#define GPIO_PAD_32 GPIO31
#ifndef BALL_D2_IS_GPIO
#define BALL_D2_IS_GPIO 0
#endif 
#ifndef PAD_SAR2_IS_GPIO
#define PAD_SAR2_IS_GPIO BALL_D2_IS_GPIO
#endif 

@ vendor\mstar\supernova\projects\board\m7221\ChipInfo\MSD96BUXM8.h

有了pin 的定义,我们就可以定义其功能,状态。

  1. mboot 配置
//Panel
#define PAD_SAR2_IS_GPIO     GPIO_OUT_LOW       //PANEL_ON/OFF(L: Panel OFF H: Panel ON)

//VBL_CTRL
#define PAD_GPIO0_PM_IS_GPIO    GPIO_OUT_LOW     //H : BACKLIGHT  OFF ,L : BACKLIGHT  ON ,

@ vendor\mstar\mboot\MBoot\sboot\inc\M7221\board\BD_MST160D_AH_M7221.h

mboot 里面配置D2 为输出模式且默认输出Low状态,E4 也是为输出模式默认输出Low 状态

  1. supernova 配置
static GPIOInfo_t  Board_GPIO_Setting[BOARD_GPIO_NUM] = {
	......
    // panel on/off
    {PANEL_CTL, 0, PAD_SAR2},                    //PANEL_ON/OFF
    // VB  CTRL
    {INV_CTL, 0, PAD_GPIO0_PM},   
    ......
}

@vendor\mstar\supernova\projects\board\m7221\serials\MST160D_10ABQM_18443_DTMB_AH\Board.h

在supernova 中配置完成以后,就通过PANEL_CTL,INV_CTL来控制着两个GPIO状态。

  1. 状态控制
void mapi_display::InternalOnOff(MAPI_BOOL bOn)
{
    MAPI_U32 delayTime;

    mapi_gpio *gptr1 = mapi_gpio::GetGPIO_Dev(INV_CTL);
    mapi_gpio *gptr2 = mapi_gpio::GetGPIO_Dev(PANEL_CTL);

    if(bOn)
    {
        // Avoid duplicate turn on
        if (gptr1 != NULL && gptr2 != NULL)
        {
            if (gptr1->GetDevOnOff() && gptr2->GetDevOnOff())
            {
                printf("Panel/Backlight already on, just return!\n");
                return;
            }
        }

        if (gptr2 != NULL)
        {
            /* enable VCC */
            gptr2->SetOn();
        }

        delayTime = g_IPanel.OnTiming(E_APIPNL_POWER_TIMING_1);
        OS_DELAY_TASK(delayTime);

        g_IPanel.Enable(bOn);
#if (ENABLE_LITE_SN == 0)
#if (MSTAR_TVOS ==1 )
        if(mapi_display::Get_bootlogo_display() == FALSE)
        {
           MAPI_U16 u16SwingLevel = mapi_syscfg_fetch::GetInstance()->GetSwingLevel();
           MApi_PNL_Control_Out_Swing(u16SwingLevel);
        }
#endif
#endif
        delayTime = g_IPanel.OnTiming(E_APIPNL_POWER_TIMING_2);
        OS_DELAY_TASK(delayTime);
        if (gptr1 != NULL)
        {
            /*enable VCC backlight*/
            gptr1->SetOn();
        }
    }
    else
    {
        if (gptr1 != NULL)
        {
            /*disable VCC  backelight*/
            gptr1->SetOff();
        }

        delayTime = g_IPanel.OffTiming(E_APIPNL_POWER_TIMING_1);
        OS_DELAY_TASK(delayTime);


        g_IPanel.Enable(bOn);

        delayTime = g_IPanel.OffTiming(E_APIPNL_POWER_TIMING_2);
        OS_DELAY_TASK(delayTime);
        if (gptr2 != NULL)
        {
            /*disable VCC */
            gptr2->SetOff();
        }
    }
}

@\vendor\mstar\supernova\MStarSDK\src\display\mapi_display.cpp

mapi_gpio::GetGPIO_Dev 分别获取两个GPIO的控制指针,

  1. 首先判断屏和背光是否已经全部打开;
  2. 如果打开则返回,反之进入下一步;
  3. 先拉高D2,进行屏供电;
  4. 中间通过OnTiming,分别给屏两个时序控制;
    // E_APIPNL_POWER_TIMING_1,E_APIPNL_POWER_TIMING_2
  5. 时序给完之后,拉高E4,背光打开;

时序调整

上面是标准的屏上电,背光开启的流程。针对不同屏的时序调试,需要通过屏参文件的参数进行调整

###########################
#  Output tmming setting  #
###########################
.............
m_wPanelOnTiming1       =   30;
m_wPanelOnTiming2       =   200;
m_wPanelOffTiming1      =   220;
m_wPanelOffTiming2      =   10;
.............

在panel VCC 上电到 panel data&clock 过程中,给时序m_wPanelOnTiming1; 在paneldata&clock到 打开背光的过程中
给时序m_wPanelOnTiming2。
m_wPanelOffTiming1,m_wPanelOffTiming2 为关机断电时序参数。

在应用上通过apiPNL.h中定义api g_IPanel.OnTiming,g_IPanel.OffTiming来设定。

发布了101 篇原创文章 · 获赞 19 · 访问量 33万+

猜你喜欢

转载自blog.csdn.net/kehyuanyu/article/details/102818013
今日推荐