日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

Android MIPI转LVDS显示屏调试--- bootloader阶段显示(4)

發(fā)布時(shí)間:2025/4/16 Android 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android MIPI转LVDS显示屏调试--- bootloader阶段显示(4) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

《80_NU323_3_Multimedia_Driver_Development_and_Bringup_Guide___Display.pdf》提到Once Kernel bringup is done, perform the following steps for little kernel (LK) bringup.,也就是說(shuō)推薦先調(diào)試kernel,但我們還是先介紹lk。

  • 顯示屏是command還是video mode
  • 我們的顯示屏是video mode

    ?

    2. 創(chuàng)建panel(顯示屏)頭文件

    到device\qcom\common\display\tools目錄下,找到此目錄下類(lèi)似的xml文件,比如panel_nt35596_1080p_video.xml,基于此文件改為和我們顯示屏的,比如改為panel_lm215w_lvds_1080p_video.xml,此xml文件里的內(nèi)容細(xì)節(jié)這里不介紹了。

    Xml可生成對(duì)應(yīng)的.h和.dtsi文件,生成的方法如下:

    perl parser.pl panel_lm215w_lvds_1080p_video.xml panel

    但是在生成頭文件的時(shí)候,沒(méi)有生成panel_config結(jié)構(gòu)體的mode_gpio_state和slave_panel_node_id對(duì)應(yīng)的值,也沒(méi)有生成lane_configuration結(jié)構(gòu)體下force_clk_lane_hs成員的值。見(jiàn)下圖紅色部分,只能是我們手動(dòng)增加,或是修改parser.pl文件來(lái)生成對(duì)應(yīng)的

    在parser.pl和xml中增加ModeGPIOState和SlavePanelNodeID(這兩個(gè)名稱(chēng)是我自己命名的),這樣用perl parser.pl panel_lm215w_lvds_1080p_video.xml panel生成的頭文件就可以了。

    Xml文件的配置,詳細(xì)參考文檔

    《80_NU323_3_Multimedia_Driver_Development_and_Bringup_Guide___Display.pdf》,xml中一些參數(shù)的生成需要用到《80-NH713-1_G_DSI_Timing_Parameters.xlsm》,比如我們要根據(jù)panel的參數(shù)來(lái)填寫(xiě)

    下面只介紹幾項(xiàng)

    2.1? PanelTimings

    An array of length 12 that specifies the PHY timing settings for the panel.

    填寫(xiě)好參數(shù)后,見(jiàn)excel表格的DSI PHY timing setting子表格

    執(zhí)行CTRL+J and CTRL+K后重新計(jì)算生成相關(guān)的,如下

    PanelTimings對(duì)應(yīng)DSI PHY registers的值,如下:

    <PanelTimings>"0xD6, 0x32, 0x22, 0x00, 0x62, 0x66, 0x26, 0x36, 0x28, 0x03, 0x04, 0x00"

    ?

    2.2? TclkPost和TClkPre

    (1)TClkPost

    DSI timing control clock post value

    (2)TclkPre

    DSI timing control clock pre value

    ?

    這兩個(gè)值對(duì)應(yīng)T_CLK_POST和T_CLK_PRE,

    </PanelTimings>

    ??? <DSIMDPTrigger>0</DSIMDPTrigger>

    ??? <DSIDMATrigger>4</DSIDMATrigger>

    ??? <TClkPost>0x03</TClkPost>

    ??? <TClkPre>0x28</TClkPre>

    ?

    2.3? ResetSequence

    Reset sequence using ResetGPIO with pulse width.這是顯示屏使用的reset引腳的控制時(shí)序圖,我們本次設(shè)計(jì)的SN65DSI84沒(méi)有用到reset,我以之前項(xiàng)目用的顯示屏panel規(guī)格書(shū)說(shuō)明下

    這是panel reset引腳的時(shí)序圖,所以

    <ResetSequence>

    ?????? <PinState1>1</PinState1>

    ?????? <PulseWidth1>20</PulseWidth1>

    ?????? <PinState2>0</PinState2>

    ?????? <PulseWidth2>2</PulseWidth2>

    ?????? <PinState3>1</PinState3>

    ?????? <PulseWidth3>20</PulseWidth3>

    ?????? <EnableBit>2</EnableBit>

    ??? </ResetSequence>

    這些值我還沒(méi)有改,需要根據(jù)實(shí)際panel來(lái)填寫(xiě),具體需要幾個(gè)階段,根據(jù)panel的規(guī)格書(shū)來(lái)定,比如這里是3個(gè)階段

    這里的EnableBit是用于表示reset GPIO作為輸入還是輸出的,輸入對(duì)應(yīng)0,輸出對(duì)應(yīng)2,這個(gè)時(shí)序在target_panel_reset()中會(huì)用到

    ?

    2.4? 頭文件結(jié)構(gòu)體lane_configuration的force_clk_lane_hs

    這個(gè)表示是否強(qiáng)制DSK CLK工作在HS(高速)模式,一般情況下command panel此值為0,表示工作在LP(low power)模式;video panel此值為1,表示工作在HS模式。

    因?yàn)槲覀冇布O(shè)計(jì),SN65DSI84采用的是DSI CLK作為時(shí)鐘源,SN65DSI84的DSI Lane合并時(shí)需要在HS模式,所以我們這里force_clk_lane_hs=1,如果為0則黑屏

    ?

  • 初始化流程
  • aboot_init()--->sn65dsi84_Init()+target_display_init()--->gcdb_display_init()--->oem_panel_select()--->init_panel_data()

    ?

    下面重點(diǎn)說(shuō)明下我們修改涉及的部分:

    3.1? sn65dsi84_Init()

    這里主要是對(duì)SN65DSI84初始化,主要的內(nèi)容如下:

    3.1.1? 涉及到的GPIO控制

    3.1.2? 通過(guò)I2C對(duì)SN65DSI84寫(xiě)寄存器,初始化

    這涉及到I2C讀寫(xiě),有兩種實(shí)現(xiàn)方式:

    (1)GPIO模擬I2C

    這里我省略到一部分寄存器,中間實(shí)際是有其他寄存器的。

    ?

    (2)采用CPU的I2C總線協(xié)議

    Lk下Msm8937對(duì)應(yīng)的目錄是msm8952,查看了源代碼,lk階段8952沒(méi)有使用i2c,但msm8916下有配置i2c和使用i2c的地方,比如oem_panel.c下:

    那我們基于8916的用法來(lái)在8952下添加的,需要根據(jù)采用的I2C對(duì)應(yīng)的GPIO口來(lái)確定是哪個(gè)BLSP和QUP,比如我們采用SDA---GPIO6,SCL---GPIO7,最后確定是對(duì)應(yīng)BLSP1和QUP_ID_1,詳細(xì)見(jiàn)鏈接

    https://blog.csdn.net/LoongEmbedded/article/details/83070030

    3.2? oem_panel_select()

    確保panel_id的值為我們?cè)黾拥娘@示屏對(duì)應(yīng)的,這里還調(diào)用init_sn65dsi84()來(lái)對(duì)SN65DSI84上電控制和通過(guò)I2C寫(xiě)初始化參數(shù)。

    ?

    3.3? init_panel_data()

    把xml文件生成的mipi dsi相關(guān)參數(shù)來(lái)初始化panelstruct結(jié)構(gòu)體

    ?

    參考鏈接:

    toshiba TC358764 mipi 轉(zhuǎn)LVDS屏調(diào)試

    https://blog.csdn.net/u013786805/article/details/21630325

    高通spi 屏幕 -lk代碼分析

    https://www.douban.com/note/669497080/

    總結(jié)

    以上是生活随笔為你收集整理的Android MIPI转LVDS显示屏调试--- bootloader阶段显示(4)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。