PANEL开发参考

Version 1.0


1. 概述

本文档主要的内容是DISP模块在LCD输出场景下的使用说明,让显示相关应用开发人员了解显示驱动的接口及使用流程,了解显示模块功能及使用限制,并介绍了相关调试方法和问题排查手段。


2. 模块介绍


2.1. 模块功能介绍

  1. 支持两个video layer,layer0支持4 windows 拼图,layer1 单个window作为PIP使用

  2. 单个window scaling up

  3. 单个window crop

  4. 支持以video layer为单位做rotate 90/270

  5. video pixel format支持NV12

  6. 支持Contrast、Hue、Luma、Saturation、Sharpness、Gamma等图像PQ调整

  7. 支持SSC,有效减低EMI

  8. 支持LCD显示(包括TTL PANEL、MIPI PANEL),TTL输出CLK支持范围9Mhz-75Mhz,MIPI DSI输出CLK, 支持范围100Mbps/lane – 1.5Gbps/lane


2.2. 模块源码文件介绍

  • alkaid/sdk/interface/inclue/disp/mi_disp.h

    声明DISP所有的用户调用API,定义了DISP API当前的version num

  • alkaid/sdk/interface/inclue/disp/mi_disp_datatype.h

    定义了DISP API使用到的数据结构类型

  • alkaid/sdk/interface/src/disp/disp_api.c

    DISP API实现,最终编译生成libmi_disp.so libmi_disp.a


3. 模块功能


3.1. 多路拼图

DISP video layer0硬件有4个mgwin,软件抽象为4个input port,可以接收前端输出的yuv数据(NV12),4个input port在video layer0上的显示位置可以任意设置,但4个input port的显示位置不能相互叠加。

图3-1


3.2. PIP

DISP video layer1可以用于PIP,将画面叠加到video layer0显示,默认video layer1显示优先级高于video layer0,即如果两个video layer上都有内容,那么video layer1显示在上,video layer0显示在下。

图3-2


3.3. 图像缩放

DISP支持针对单个input port做scaling up,H/V方向放大比例可以达到16倍,来满足每个window对最终显示尺寸的需求。

图3-3

  • 相关API:

    MI_S32 MI_DISP_SetInputPortAttr(MI_DISP_LAYER DispLayer, MI_DISP_INPUTPORT LayerInputPort, const MI_DISP_InputPortAttr_t *pstInputPortAttr);
    
  • DispLayer

    可以使用任意一个video layer上的任意一个input port做scaling up,video layer使用范围0-1

  • LayerInputPort

    可以使用任意一个input port做scaling up。如果使用video layer0,input port使用范围0-3;如果使用video layer1,则只有一个input port可以使用。

  • pstInputPortAttr

    typedef struct MI_DISP_VidWin_Rect_s
    {   
    ¦   MI_U16 u16X;
    ¦   MI_U16 u16Y;
    ¦   MI_U16 u16Width;
    ¦   MI_U16 u16Height;
    } MI_DISP_VidWinRect_t;
    
    typedef struct MI_DISP_InputPortAttr_s
    {
    ¦   MI_DISP_VidWinRect_t stDispWin;         
    ¦   MI_U16 u16SrcWidth;
    ¦   MI_U16 u16SrcHeight;             
    } MI_DISP_InputPortAttr_t;
    

    定义input port属性

    u16SrcWidthinput image width
    
    u16SrcHeightinput image height
    

    u16X:在layer上的显示位置H方向偏移

    u16Y:在layer上的显示位置V方向偏移

    u16Width:放大后图像显示的宽,不放大等于u16SrcWidth

    u16Height:放大后图像显示的高,不放大等于u16SrcHeight

    同样如多路拼图所述,放大后的各个window之间不能叠加。

    video layer size需要等于最终输出timing的有效width/height,图像才能全屏显示。比如,现在使用一个1920x1080的panel显示,那么输出timing的有效width等于1920,height等于1080,如果只开启了一个input port并且希望该port全屏显示,那么应该满足:

    u16Width = video layer width
    
    u16Height = video layer height
    
    video layer width = panel active width
    
    video layer height = panel active height
    

3.4. 图像裁剪

DISP支持对input image做crop,适用于zoom in场景,需要对局部区域放大显示。

图3-4

  • 相关API:

    MI_S32 MI_DISP_SetZoomInWindow(MI_DISP_LAYER DispLayer, MI_DISP_INPUTPORT LayerInputPort, MI_DISP_VidWinRect_t* pstZoomRect);
    
  • DispLayer

    可以对任意video layer上的任意input port做crop,layer id取值范围0-1

  • LayerInputPort

    可以对任意input port做crop,如果使用video layer0,input port取值范围0-3,如果使用video layer1,则只有一个port可以使用。

  • pstZoomRect

    typedef struct MI_DISP_VidWin_Rect_s
    {
    ¦   MI_U16 u16X;
    ¦   MI_U16 u16Y;
    ¦   MI_U16 u16Width;
    ¦   MI_U16 u16Height;
    } MI_DISP_VidWinRect_t;
    

    设定crop属性:

    u16Xcrop H方向起始点
    
    u16Ycrop V方向起始点
    
    u16Widthcrop width
    
    u16Heightcrop height
    

3.5. 图像旋转

DISP支持以layer为单位做旋转90度或者270度,同时支持旋转加放大,以满足旋转后需要满屏显示的场景。

图3-5

相关API:

MI_S32 MI_DISP_SetVideoLayerRotateMode(MI_DISP_LAYER DispLayer, MI_DISP_RotateConfig_t *pstRotateConfig);
  • DispLayer

    可以使用任意一个video layer做旋转,video layer取值范围0-1

  • pstRotateConfig

    typedef enum
    {
    ¦   E_MI_DISP_ROTATE_NONE,
    ¦   E_MI_DISP_ROTATE_90,
    ¦   E_MI_DISP_ROTATE_180,                    
    ¦   E_MI_DISP_ROTATE_270,                    
    ¦   E_MI_DISP_ROTATE_NUM,
    }MI_DISP_RotateMode_e;
    typedef struct MI_DISP_RotateConfig_s
    {
    ¦   MI_DISP_RotateMode_e eRotateMode;
    }MI_DISP_RotateConfig_t;
    

    设置旋转角度,E_MI_DISP_ROTATE_90旋转90度,E_MI_DISP_ROTATE_270旋转270度,不支持旋转180度。


3.6. SSC

时钟展频通过频率调制的手段将集中在窄频带范围内的能量分散到设定的宽频带范围,通过降低时钟在基频和奇次谐波频率的幅度(能量),达到降低系统电磁辐射峰值的目的。

图3-6

SSC在屏参中配置,SSC step/span 由展频计算表中的公式来计算得到。


3.7. PQ


3.7.1. xMatrix

DISP支持通过3x3 CSC Matrix调节图像Contrast、Hue、Luma、Saturation、Sharpness。

相关API:

MI_S32 MI_DISP_IMPL_SetLcdParam(MI_DISP_DEV DispDev, MI_DISP_LcdParam_t *pstLcdParam)
  • DispDev

    DISP设备ID设为0

  • pstLcdParam

    typedef struct MI_DISP_Csc_s            
    { 
    ¦   MI_DISP_CscMattrix_e eCscMatrix;    /* eCscMatrix  使用第4组Matrix*/
    ¦   MI_U32 u32Luma;               /* luminance:   0 ~ 100 default: 50 */
    ¦   MI_U32 u32Contrast;            /* contrast:   0 ~ 100 default: 50 */
    ¦   MI_U32 u32Hue;              /* hue:   0 ~ 100 default: 50 */
    ¦   MI_U32 u32Saturation;       /* saturation:  0 ~ 100 default: 40 */
    } MI_DISP_Csc_t;
    
    typedef struct MI_DISP_LcdParam_s
    {
    ¦   MI_DISP_Csc_t stCsc;
    ¦   MI_U32 u32Sharpness;
    } MI_DISP_LcdParam_t;
    

3.7.2. Color Temperature

DISP支持图像R/G/B分量的色温调节。

相关API:

MI_S32 MI_DISP_DeviceSetColorTempeture(MI_DISP_DEV DispDev, MI_DISP_ColorTemperature_t
  • DispDev

    DISP设备ID设为0

  • pstColorTempInfo

    typedef struct
    {   
    ¦   MI_U16 u16RedOffset; 
    ¦   MI_U16 u16GreenOffset;
    ¦   MI_U16 u16BlueOffset;
    ¦   MI_U16 u16RedColor;  // 00~FF, 0x80 is no change
    ¦   MI_U16 u16GreenColor;// 00~FF, 0x80 is no change
    ¦   MI_U16 u16BlueColor; // 00~FF, 0x80 is no change
    }MI_DISP_ColorTemperature_t;
    

3.7.3. Gamma

方法一:使用SigmaStar System Tool调GAMMA,参考以下步骤:

  1. 连接到chip

    图3-7

  2. 打开GAMMA调整界面

    图3-8

  3. GAMMA调节

    图3-9

  4. load gamma设定

    图3-10

方法二:使用DISP API设定GAMMA

可以将调好的gamma设定通过SigmaStar System Tool生成c code gamma table。

图3-11

SigmaStar System Tool可以生成如下格式的c code gamma table

MI_U8 tnormalGammaR[] =                                                                                                                  
{                                                                                                                                        
¦   0x00,0x07,0x0F,0x17,                                                                                                                 
¦   0x1F,0x27,0x2F,0x37,                                                                                                                 
¦   0x3F,0x47,0x4F,0x57,                                                                                                                 
¦   0x5F,0x67,0x6F,0x77,                                                                                                                 
¦   0x7F,0x87,0x8F,0x97,                                                                                                                 
¦   0x9F,0xA7,0xAF,0xB7,                                                                                                                 
¦   0xBF,0xC7,0xCF,0xD7,                                                                                                                 
¦   0xDF,0xE7,0xEF,0xF7,                                                                                                                 
¦   0xFF                                                                                                                                 
};

MI_U8 tnormalGammaG[] =                                                                                                                  
{                                                                                                                                        
¦   0x00,0x07,0x0F,0x17,                                                                                                                 
¦   0x1F,0x27,0x2F,0x37,                                                                                                                 
¦   0x3F,0x47,0x4F,0x57,                                                                                                                 
¦   0x5F,0x67,0x6F,0x77,                                                                                                                 
    0x7F,0x87,0x8F,0x97,
¦   0x9F,0xA7,0xAF,0xB7,                                                                                                                 
¦   0xBF,0xC7,0xCF,0xD7,                                                                                                                 
¦   0xDF,0xE7,0xEF,0xF7,                                                                                                                 
¦   0xFF                                                                                                                                 
};

MI_U8 tnormalGammaB[] =                                                                                                                  
{                                                                                                                                        
¦   0x00,0x07,0x0F,0x17,                                                                                                                 
¦   0x1F,0x27,0x2F,0x37,                                                                                                                 
¦   0x3F,0x47,0x4F,0x57,                                                                                                                 
¦   0x5F,0x67,0x6F,0x77,                                                                                                                 
¦   0x7F,0x87,0x8F,0x97,                                                                                                                 
¦   0x9F,0xA7,0xAF,0xB7,                                                                                                                 
¦   0xBF,0xC7,0xCF,0xD7,                                                                                                                 
¦   0xDF,0xE7,0xEF,0xF7,                                                                                                                 
¦   0xFF                                                                                                                                 
};

调用DISP API设定GAMMA

MI_DISP_GammaParam_t stGammaParam;
stGammaParam.bEn = TRUE;
stGammaParam.u16EntryNum = sizeof(tnormalGammaR);
stGammaParam.pu8ColorR = tnormalGammaR;
stGammaParam.pu8ColorG = tnormalGammaG;
stGammaParam.pu8ColorB = tnormalGammaB;
MI_DISP_DeviceSetGammaParam(devid, &stGammaParam);

3.8. 输出设备

DISP支持LCD以及HDMI/VGA,LCD和HDMI/VGA不能同时显示,HDMI/VGA可以同时输出显示。LCD支持TTL PANEL和MIPI PANEL。本节主要介绍点亮TTL或MIPI PANEL的相关操作。

DISP视频显示数据流程框图如下:

图3-12

DISP video layer0 的4个input port可以绑定vdec的4个channel做4windows拼图显示,DISP video layer1的port可以做PIP使用,即最终video layer1和video layer0做mixer,video layer1显示优先级高于video layer0。

DISP硬件拼图后根据用户选择的输出设备,将拼图后的视频数据按照一定的时序通过TTL接口送出RGB data;如果是MIPI接口,支持sync mode、sync event mode、burst mode等MIPI标准传输模式。

GUI FB/Cursor 有独立的HW engine,需要操作FB device来进行UI的绘制,这部分不做详细介绍。

3.8.1. TTL

Parallel RGB Interface有两种,DE mode和HV mode,当使能DE的时候,会使用VSYNC、HSYNC、DOTCLK、DE、D[0-23]这些pin,当使能HV mode的时候,会使用VSYNC、HSYNC、DOTCLK、D[0-23]。

图3-13

一些panel driver IC需要对其初始化,其实就是对其内部register的设定,一般会通过SPI或者IIC接口来通信,初始化需要的cmd和data一般由屏厂提供,发送时的数据格式需要参考panel datasheet。

使用Parallel RGB Interface的panel需要HSYNC、VSYNC、DOTCLK来作为同步信号,RGB data只在timing的特定区间有效。

图3-14

行场信号中的blanking区间是不可见区域,只有active区间的RGB data才会最终显示出来,不同的panel Driver IC对于blanking区间的要求不同。

行信号中:

Htotal = HSYNC + HBP + HFP + H Active

场信号中:

Vtotal = VSYNC + VBP + VFP + V Active

最后计算像素时钟频率:

Pixel CLK = Htotal * Vtotal * fps

屏参中时序相关的配置主要是调整行信号中HSYNC、HBP、HFP和场信号中VSYNC、VBP、VFP。panel spec中会提供blanking区间各部分的长度要求。

blanking区间是一个可调范围,最终计算出的pixel clk也是在一个范围内。

主控芯片一般会有时钟频率的限制,所以在点一个新的panel时,应先计算panel的pixel clk,如果将要点的panel满足像素时钟频率的要求,则一般可以点起来。

图3-15 Parallel RGB Interface Timing

3.8.2. MIPI

MIPI DSI 规格:

  • 1-4 data lanes, 1 clock lane

  • Level:

    • LP: 0~12V

    • HS: 100~300mV,

  • HS: 80Mbps ~ 1.5Gbps/lane

  • Pixel format:

    • 16 bpp (5,6,5 RGB) each pixel using two bytes

    • 18 bpp (6,6,6 RGB) packed

    • 18 bpp (6, 6, 6 RGB) loosely packed into three bytes

    • 24 bpp (8, 8, 8 RGB), each pixel using three bytes

  • video mode: BURST_MODE/SYNC_EVENT/SYNC_PULSE

  • data/clk chn swap

  • data/clk chn P/N swap

  • data clk skew adjustment

MIPI DPHY timing chart:

图3-16 Data lanes-Low Power Mode to/from High Speed Mode Timing

图3-17 Clock lanes- High Speed Mode to/from Low Power Mode Timing

Configure HS Timing Parameter:

  • HS_TRAIL/HS_EXIT /HS_PRPR/HS_ZERO/CLK_PRPR/CLK_ZERO/CLK_POST/CLK_TRAIL

    Timing specification
    THS-PREPARE + THS-zero 145ns+10*UI
    THS-PREPARE 40ns+4*UI ~ 85ns +6*UI
    THS-ZERO >60ns+4*UI ~105ns+6*UI

    UI表示时间间隔,等于时钟通道上任何HS状态的持续时间.

    UI的计算方法:

    H_Total = HACT+HPW+HBP+HFP

    V_Total = VACT+VPW+VBP+VFP

    BitsPerPixel=24(RGB888)/18(RGB666)/16(RGB565)

    Bitrate = (H_Total)*(V_Total)*FPS* BitsPerPixel/lane number

    UI = 1/Bitrate

    图3-18 DSI clock channel timing

    如果Bitrate = 750Mps,UI = 1/Bitrate = 1.333ns,那么HS timing parameter计算结果为:

    Timing specification Absolute time DA_HS_PREP value(Absolute time/(8*UI))
    THS-PREPARE + THS-zero 145ns+10*UI > 158.33 ns > 15
    THS-PREPARE 40ns+4*UI ~ 85ns +6*UI 45.32 ~ 92.98 ns 5 ~ 8
    THS-zero >60ns+4*UI ~105ns+6*UI > 112.98~ 65.32 ns 10 ~ 7

Configure LP Timing Parameter:

  • CONT_DET/LPX/TA_GET/TA_SURE/TA_GO

    low power parameters建议使用提供的默认值


4. 点屏配置


4.1. 配置DISP device

MI_S32 MI_DISP_SetPubAttr(MI_DISP_DEV DispDev, const MI_DISP_PubAttr_t *pstPubAttr)
  • 配置DISP设备属性

    参数 描述
    DispDev DISP device ID
    pstPubAttr u32BgColor 背景色
    eIntfType 接口类型(点屏使用E_MI_DISP_INTF_LCD)
    eIntfSync 输出timing(点屏使用E_MI_DISP_OUTPUT_USER)
    stSyncInfo u16Vact 等于屏参中u16Height
    u16Vbb 等于屏参中u16VSyncBackPorch
    u16Vfb 等于屏参中u16VTotal-(u16VSyncWidth+u16Height+u16VSyncBackPorch)
    u16Hact 等于屏参中u16Width
    u16Hbb 等于屏参中u16HSyncBackPorch
    u16Hfb 等于屏参中u16HTotal-(u16HSyncWidth+u16Width+u16HSyncBackPorch)
    u16Hpw 等于屏参中u16HSyncWidth
    u16Vpw 等于屏参中u16VSyncWidth
    u32FrameRate 等于屏参中u16DCLK*1000000/(u16HTotal*u16VTotal)

    表中未列参数默认填0。

    MI_S32 MI_DISP_Enable(MI_DISP_DEV DispDev)
    
  • 使能DISP设备

    参数 描述
    DispDev DISP device ID

4.2. 配置DISP video layer

MI_S32 MI_DISP_SetVideoLayerAttr(MI_DISP_LAYER DispLayer, const MI_DISP_VideoLayerAttr_t *pstLayerAttr)
  • 设置DISP video layer属性

    参数 描述
    DispLayer DISP video layer ID
    pstLayerAttr stVidLayerDispWin u16X 0
    u16Y 0
    u16Width 等于屏参中u16Width
    u16Height 等于屏参中u16Height
    stVidLayerSize u16Width 等于屏参中u16Width
    u16Height 等于屏参中u16Height
    ePixFormat E_MI_SYS_PIXEL_FRAME_YUV_SEMIPLANAR_420

    MI_S32 MI_DISP_EnableVideoLayer(MI_DISP_LAYER DispLayer)
    
  • 使能DISP video layer

    参数 描述
    DispLayer DISP video layer ID

4.3. 配置DISP input port

MI_S32 MI_DISP_SetInputPortAttr(MI_DISP_LAYER DispLayer, MI_DISP_INPUTPORT LayerInputPort, const MI_DISP_InputPortAttr_t *pstInputPortAttr)
  • 设置DISP input port属性

    参数 描述
    DispLayer DISP video layer ID
    LayerInputPort DISP input port ID
    pstInputPortAttr stDispWin u16X Input port显示位置的x offset
    u16Y Input port显示位置的y offset
    u16Width Input port显示width(没有scaling,则等于u16SrcWidth)
    u16Height Input port显示height(没有scaling,则等于u16SrcHeight)
    u16SrcWidth Video source width
    u16SrcHeight Video source height

    MI_S32 MI_DISP_EnableInputPort(MI_DISP_LAYER DispLayer, MI_DISP_INPUTPORT LayerInputPort)
    
  • 使能DISP input port

    参数 描述
    DispLayer DISP video layer ID
    LayerInputPort DISP input port ID

4.4. 配置屏参

MI_S32 MI_PANEL_Init(MI_PANEL_LinkType_e eLinkType)
  • 设置PANEL类型

    参数 描述
    eLinkType E_MI_PNL_LINK_TTL E_MI_PNL_LINK_MIPI_DSI
    MI_S32 MI_PANEL_SetPanelParam(MI_PANEL_ParamConfig_t *pstParamCfg)
    
  • 设置屏参

    参数 描述
    pstParamCfg pPanelName 屏的型号
    u8Dither 1:enable Dither
    0:disable Dither
    eLinkType 接口类型
    E_MI_PNL_LINK_TTL
    E_MI_PNL_LINK_MIPI_DSI
    u8InvDCLK Pixel clk极性反转
    u8InvDE DE极性反转
    u8InvHSync Hsync极性反转
    u8InvVSync Vsync极性反转
    u16HSyncWidth 行同步信号脉宽
    u16HSyncBackPorch 行同步信号后肩
    u16VSyncWidth 场同步信号脉宽
    u16VSyncBackPorch 场同步信号后肩
    u16HStart u16HSyncWidth+16HSyncBackPorch
    u16VStart u16VSyncWidth+ u16VSyncBackPorch
    u16Width 行有效像素点数
    u16Height 场有效行数
    u16HTotal u16HSyncWidth+16HSyncBackPorch+HsyncFrontPorch
    u16VTotal u16VSyncWidth+ u16VSyncBackPorch+VsyncFrontPorch
    u16DCLK u16HTotal*u16VTotal*fps
    u16SpreadSpectrumStep 时钟延展幅度调制(详见展频计算表
    u16SpreadSpectrumSpan 时钟延展频率调制(详见展频计算表
    eOutputFormatBitMode 输出pixel format
    u8SwapOdd_RG Swap Channel R
    0:default
    1:select B
    2:select G
    3:select R
    u8SwapEven_RG Swap Channel G
    0:default
    1:select B
    2:select G
    3:select R
    u8SwapOdd_GB Swap Channel B
    0:default
    1:select B
    2:select G
    3:select R
    u8SwapEven_GB Swap Rgb MSB/LSB
    0:disable M/L swap
    1:enable M/L swap
    eCh0 Chn0 lane selection(default:2)
    0:select lane0
    1:select lane1
    2:select lane2
    3:select lane3
    4:select lane4
    Selected lane将作为clk lane输出
    eCh1 Chn1 lane selection(default:4)
    0:select lane0
    1:select lane1
    2:select lane2
    3:select lane3
    4:select lane4
    eCh2 Chn2 lane selection(default:3)
    0:selec1t lane0
    1:select lane1
    2:select lane2
    3:select lane3
    4:select lane4
    eCh3 Chn3 lane selection(default:1)
    0:select lane0
    1:select lane1
    2:select lane2
    3:select lane3v4:select lane4
    eCh4 Chn4 lane selection(default:0)
    0:select lane0
    1:select lane1
    2:select lane2
    3:select lane3
    4:select lane4

    表中未列参数默认填0

    如果是MIPI panel,还需要对MIPI DSI进行配置,TTL panel只配置屏参即可。

    MI_S32 MI_PANEL_SetMipiDsiConfig(MI_PANEL_MipiDsiConfig_t *pstMipiDsiCfg)
    

    参数 描述
    pstMipiDsiCfg u8HsTrail Default: 0x05
    60+4UI ~ MAX
    u8HsPrpr Default: 0x05
    40+4UI ~ 85+6UI
    u8HsZero Default: 0x05
    105+6UI ~ MAX
    u8ClkHsPrpr Default: 0x05
    38ns ~ 95ns
    u8ClkHsExit Default: 0x05
    100ns ~ max
    u8ClkTrail Default: 0x05
    60ns ~ max
    u8ClkZero Default: 0x05
    300ns-CLK_HS_PRPR
    u8ClkHsPost Default: 0x05
    60+52UI ~ max
    u8DaHsExit Default: 0x05
    100ns ~ max
    u8ContDet Default:0
    u8Lpx Default:16
    u8TaGet Default:26
    5LPX
    u8TaSure Default:24
    1LPX ~ 2LPX
    u8TaGo Default:50
    4LPX
    u16Hactive Follow 屏参设定
    u16Hpw
    u16Hbp
    u16Hfp
    u16Vactive
    u16Vpw
    u16Vbp
    u16Vfp
    u16Bllp 0
    u16Fps Default:60
    enLaneNum E_MI_PNL_MIPI_DSI_LANE_1
    E_MI_PNL_MIPI_DSI_LANE_2
    E_MI_PNL_MIPI_DSI_LANE_3
    E_MI_PNL_MIPI_DSI_LANE_4
    enformat E_MI_PNL_MIPI_DSI_RGB565
    E_MI_PNL_MIPI_DSI_RGB666
    E_MI_PNL_MIPI_DSI_LOOSELY_RGB666
    E_MI_PNL_MIPI_DSI_RGB888
    enCtrl E_MI_PNL_MIPI_DSI_CMD_MODE
    E_MI_PNL_MIPI_DSI_SYNC_PULSE
    E_MI_PNL_MIPI_DSI_SYNC_EVENT
    E_MI_PNL_MIPI_DSI_BURST_MODE
    pu8CmdBuf Mipi panel初始化cmd buff指针
    cmd buff格式:
    cmd_buff[]=
    {
    Cmd, parameter cnt, parameter0, parameter1, … ,
    Cmd, parameter cnt, parameter0, parameter1, … ,
    Cmd, parameter cnt, parameter0, parameter1, … ,
    ………
    }
    u32CmdBufSize Cmd buff size = sizeof(cmd_buff)
    u16DataClkSkew Date/clk 相位
    范围:7-15
    u8PolCh0 Chn0极性
    0:default
    1:positive
    2:negative
    u8PolCh1 Chn1极性
    0:default
    1:positive
    2:negative
    u8PolCh2 Chn2极性
    0:default
    1:positive
    2:negative
    u8PolCh3 Chn3极性
    0:default
    1:positive
    2:negative
    u8PolCh4 Chn4极性
    0:default
    1:positive
    2:negative


4.5. 初始化PANEL

一些panel需要cmd来初始化屏驱。MIPI panel的初始化cmd是通过MIPI data lane0来传输,cmd buff填写参考上节说明;TTL panel一般是通过SPI来发送cmd/parameters给屏驱,初始化需要的cmd要参考屏的数据手册,根据屏的初始化时序要求来下相应的初始化命令。

如果是采用SPI初始化的panel,SDK中有提供SPI发送数据的API。

MI_S32 MI_PANEL_GPIO_Init(MI_PANEL_GpioConfig_t *pstGpioCfg)

初始化panel复位、panel背光、panel enable以及SPI使用到的引脚。

参数 描述
pstGpioCfg u16GpioBL Panel背光
u16GpioRST Panel reset
u16GpioSCL SPI
u16GpioSDO
u16GpioCS
u16GpioEN Panel enable
MI_S32 MI_PANEL_SetGpioStatus(MI_U16 u16GpioNum, MI_BOOL bValue)
  • 拉高/低某一个GPIO

    参数 描述
    u16GpioNum Gpio software num
    bValue 0:low
    1:high
    MI_S32 MI_PANEL_SetCmd(MI_U32 u32Value, MI_U8 u8Bits)
    
  • 通过SPI发送数据

    参数 描述
    u32Value 需要发送的数据
    u8Bits 该数据的长度(单位bit)

4.6. video显示

DISP/PANEL初始化完成,送需要显示的video data给DISP,一种方式是直接送YUV data到DISP,第二种方式是DISP绑定其他可以输出YUV data的模块,前提是可以输出YUV data的模块已经初始化完成,并且有数据输出。

第一种方式需要用到的相关API:

MI_S32 MI_SYS_ChnInputPortGetBuf (MI_SYS_ChnPort_t *pstChnPort,MI_SYS_BufConf_t *pstBufConf, MI_SYS_BufInfo_t *pstBufInfo, MI_SYS_BUF_HANDLE *pBufHandle, MI_S32 s32TimeOutMs)
MI_S32 MI_SYS_ChnInputPortPutBuf (MI_SYS_BUF_HANDLE bufHandle,  MI_SYS_BufInfo_t *pstBufInfo, MI_BOOL bDropBuf)

第二种方式需要用到的相关API:

MI_S32 MI_SYS_BindChnPort(MI_SYS_ChnPort_t *pstSrcChnPort, MI_SYS_ChnPort_t *pstDstChnPort,MI_U32 u32SrcFrmrate,  MI_U32 u32DstFrmrate)

使用方法参考MI SYS API相关文档。


5. 参考DEMO

sdk/verify/feature/disp/disp_ut.c

使用方法:

  1. 编译

    • 修改project/release/customer_tailor/nvr_default.mk,添加verify_disp:=enable

    • 修改disp_ut.c,include对应的屏参头文件

    • cd sdk/verify/feature;

    • make disp_clean;make disp

    • cp disp/prog到执行目录

  2. 运行

    ./prog --interface lcd -l ttl -f ./YUV420SP_800_480.yuv -t yuv420 -n 1 -i 800_480 -c 0_0_800_480 -o 0_0_800_480

    --interface //输出接口,点屏用lcd

    -l //panel类型,ttl 或者 mipi

    -f //文件路径

    -t //pixel format

    -n //chn num

    -i //input size

    -c //disp crop parameters

    -o //disp show size


6. 调试方法和常见问题


6.1. 调试手段

  1. procfs

    cat /proc/mi_modules/mi_disp/mi_disp0
    

    图6-1

    DISP procfs主要用来分析数据流是否正常,DISP相关设定是否合理和DISP工作状态。

    • 数据流相关:

      RecvBufCnt:分析DISP是否拿到input buff

      RecvBuf_W:input buff width

      RecvBuf_H:input buff height

      Content_W:input buff有效width

      Content_H:input buff有效height

      RecvBufStride:input buff stride

      PixFmt:input buff pixel format

    • 功能性设定:

      crop_x/crop_y/crop_w/crop_h: input port crop parameters

      show_x/show_y/show_w/show_h: display input port show size

      rotatemode: rotate mode

      CscMatrix/Luma/Contrast/Hue/Saturation/Sharpness: PQ

    • 状态相关:

      DevStatus:DISP device使能状态

      IrqCnt:DISP硬件中断次数

      enable:DISP input port使能状态

    DISP没有正常显示的情况下,首先检查以上三个部分是否正常。

    cat /proc/mi_modules/mi_panel/mi_panel0
    

    图6-2

    PANEL procfs主要用来分析屏参设定是否生效。

  2. register

    跟显示相关需要关注的寄存器:

    bank Addr Description
    101e 0d [bit8-bit11] TTL mode
    0001: SSR201/202
    1100: SSR623
    [bit12-bit13] MIPI TX mode
    01: 4 lane
    1038 54 [bit0-bit3] clk_mop
    [bit0] disable clk
    [bit1] inv clk
    [bit2-bit3] select clk source
    00:320Mhz
    01:384Mhz
    10:288Mhz
    11:clk_miu
    53 [bit0-bit3] clk_disp_432
    [bit0] disable clk
    [bit1] inv clk
    [bit2-bit3] select clk source
    00: 432Mhz
    [bit8-bit11] clk_disp_216
    [bit8] disable clk
    [bit9] inv clk
    [bit10-bit11] select clk source
    00: 216Mhz
    01: 108Mhz
    63 [bit0-bit5] clk_sc_pixel
    [bit0] disable clk
    [bit1] inv clk
    [bit2-bit5] select clk source
    0000:240Mhz
    0001:216Mhz
    0010:192Mhz
    0011:172Mhz
    0100:144Mhz
    0101:123Mhz
    0110:108Mhz
    0111:86Mhz
    1000:72Mhz
    1001:54Mhz
    1010:lpll_clk
    6f [bit0-bit4] clk_mipi_tx_dsi
    [bit0] disable clk
    [bit1] inv clk
    [bit2-bit4] select clk source
    000:lpll_clk
    001:160Mhz
    010:144Mhz
    011:108Mhz
    100:216Mhz
    101:240Mhz
    1128 07 [bit0-bit3] pattern gen
    [bit0] select source of mace
    0: from scaling patgen
    1: from external video source
    [bit1-bit3] select pattern mode
    000: 1-pix gray ramp
    001: 16-pix gray ramp
    010: 32-pix gray ramp
    011: 64-pix gray ramp
    100: 16-pix gray stick
    101: 16-pix colorbar
    110: 32-pix colorbar
    111: 64-pix colorbar
    1129 11 [bit0-bit12] h total
    12 [bit0-bit12] v total
    13 [bit0-bit12] hsync start
    14 [bit0-bit12] hsync end
    15 [bit0-bit12] vsync start
    16 [bit0-bit12] vsync end
    17 [bit0-bit12] H frame de start
    18 [bit0-bit12] H frame de end
    19 [bit0-bit12] V frame de start
    1a [bit0-bit12] V frame de end
    1b [bit0-bit15] no signal color
    [bit0-bit4] B channel
    [bit5-bit9] G channel
    [bit10-bit14] R channel
    [bit15] Forced to show no signal color
    7e [bit0-bit5] rgb swap
    [bit0-bit1] swap for B channel
    [bit2-bit3] swap for G channel
    [bit4-bit5] swap for R channel
    [bit6-bit7] rgb mode
    00:rgb 888
    01:rgb 666
    10:rgb 565-1
    11:rgb 565-2
    [bit8] MSB/LSB swap
    1406 00 [bit0] Gwin0 enable
    10 [bit0] Gwin1 enable
    20 [bit0] Gwin2 enable
    30 [bit0] Gwin3 enable
    40 [bit0] Gwin4 enable
    50 [bit0] Gwin5 enable
    60 [bit0] Gwin6 enable
    70 [bit0] Gwin7 enable
    1407 00 [bit0] Gwin8 enable
    10 [bit0] Gwin9 enable
    20 [bit0] Gwin10 enable
    30 [bit0] Gwin11 enable
    40 [bit0] Gwin12 enable
    50 [bit0] Gwin13 enable
    60 [bit0] Gwin14 enable
    70 [bit0] Gwin15 enable
    1033 4e [bit0-bit15] ssc
    [bit0-bit11] step
    [bit15] enable ssc
    4f [bit0-bit13] ssc span


6.2. 常见问题

  1. 背光可以亮,但是没有画面

    请排查如下问题:

    1. 检查屏参是否满足panel spec要求

    2. 数据流是否正常,是否有input buff输入

    3. DISP device/layer/input port相关设定是否合理

    4. panel init是否成功,需要SPI初始化的TTL panel可以量测SPI信号是否正常,initial cmd是否有正确传输

    5. 检查Hsync/Vsync/DE/Dclk极性是否满足panel spec

    6. MIPI panel检查clk lane/data lane线序和软件设定是否一致

    7. 查看register BK101e addr 0d 是否有切对TTL mode/MIPI mode

    8. 检查clk相关register是否都有打开

    9. MOP gwin是否有打开

    10. pattern gen是否可以正常输出

  2. 分屏现象

    图6-3

    如果是H方向,尝试加大Hsync Front porch和Htotal,Hsync和Hsync back porch保持不变

    如果是V方向,尝试加大Vsync Front porch和Vtotal,Vsync和Vsync back porch保持不变

  3. 色偏

    图6-4 色偏

    图6-5 正常

    1. 检查R/G/B单色是否输出正常,如果是TTL panel,可以关掉3x3 matrix(BK1129_30 bit0=0,BK1129_3c bit0=0),利用BK1129_1b输出RGB单色并量测R/G/B channel每根是否都有正常输出。

    2. 调整VBP,VPW/VFP维持不变

    3. 检查是否需要做R/G/B channel swap或者RGB M/L swap。


7. TTL/MIPI硬件连接

  1. 如下所示,芯片TTL输出默认硬件连接顺序

    Pin Number PADName reg_ttl_mode
    1
    28pin Default
    Pin56 PAD_TTL0 TTL_DOUT[0] R0 G0 B0 R7/G7/B7
    Pin57 PAD_TTL1 TTL_DOUT[1] R1 G1 B1 R6/G6/B6
    Pin58 PAD_TTL2 TTL_DOUT[2] R2 G2 B2 R5/G5/B5
    Pin59 PAD_TTL3 TTL_DOUT[3] R3 G3 B3 R4/G4/B4
    Pin60 PAD_TTL4 TTL_DOUT[4] R4 G4 B4 R3/G3/B3
    Pin61 PAD_TTL5 TTL_DOUT[5] R5 G5 B5 R2/G2/B2
    Pin65 PAD_TTL6 TTL_DOUT[6] R6 G6 B6 R1/G1/B1
    Pin66 PAD_TTL7 TTL_DOUT[7] R7 G7 B7 R0/G0/B0
    Pin67 PAD_TTL8 TTL_DOUT[8] G0 B0 R0
    Pin68 PAD_TTL9 TTL_DOUT[9] G1 B1 R1
    Pin69 PAD_TTL10 TTL_DOUT[10] G2 B2 R2
    Pin70 PAD_TTL11 TTL_DOUT[11] G3 B3 R3
    Pin71 PAD_TTL12 TTL_DOUT[12] G4 B4 R4
    Pin72 PAD_TTL13 TTL_DOUT[13] G5 B5 R5
    Pin73 PAD_TTL14 TTL_DOUT[14] G6 B6 R6
    Pin74 PAD_TTL15 TTL_DOUT[15] G7 B7 R7
    Pin79 PAD_TTL16 TTL_DOUT[16] B0 R0 G0
    Pin80 PAD_TTL17 TTL_DOUT[17] B1 R1 G1
    Pin81 PAD_TTL18 TTL_DOUT[18] B2 R2 G2
    Pin82 PAD_TTL19 TTL_DOUT[19] B3 R3 G3
    Pin83 PAD_TTL20 TTL_DOUT[20] B4 R4 G4
    Pin84 PAD_TTL21 TTL_DOUT[21] B5 R5 G5
    Pin85 PAD_TTL22 TTL_DOUT[22] B6 R6 G6
    Pin86 PAD_TTL23 TTL_DOUT[23] B7 R7 G7
    Pin87 PAD_TTL24 TTL_CK
    Pin88 PAD_TTL25 TTL_HSYNC
    Pin89 PAD_TTL26 TTL_VSYNC
    Pin90 PAD_TTL27 TTL_DE

  2. 如下表所示,芯片默认MIPI硬件连接顺序。

    Pin Location Ball Pin Name Function
    Pin65 PAD_TTL6 MIPI_TX_P_CH0
    Pin66 PAD_TTL7 MIPI_TX_N_CH0
    Pin67 PAD_TTL8 MIPI_TX_P_CH1
    Pin68 PAD_TTL9 MIPI_TX_N_CH1
    Pin69 PAD_TTL10 MIPI_TX_P_CH2
    Pin70 PAD_TTL11 MIPI_TX_N_CH2
    Pin71 PAD_TTL12 MIPI_TX_P_CH3
    Pin72 PAD_TTL13 MIPI_TX_N_CH3
    Pin73 PAD_TTL14 MIPI_TX_P_CH4
    Pin74 PAD_TTL15 MIPI_TX_N_CH4