Android MIPI转LVDS显示屏调试--- bootloader阶段显示(4)
《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.,也就是說推薦先調(diào)試kernel,但我們還是先介紹lk。
我們的顯示屏是video mode
?
2. 創(chuàng)建panel(顯示屏)頭文件
到device\qcom\common\display\tools目錄下,找到此目錄下類似的xml文件,比如panel_nt35596_1080p_video.xml,基于此文件改為和我們顯示屏的,比如改為panel_lm215w_lvds_1080p_video.xml,此xml文件里的內(nèi)容細(xì)節(jié)這里不介紹了。
Xml可生成對應(yīng)的.h和.dtsi文件,生成的方法如下:
perl parser.pl panel_lm215w_lvds_1080p_video.xml panel
但是在生成頭文件的時候,沒有生成panel_config結(jié)構(gòu)體的mode_gpio_state和slave_panel_node_id對應(yīng)的值,也沒有生成lane_configuration結(jié)構(gòu)體下force_clk_lane_hs成員的值。見下圖紅色部分,只能是我們手動增加,或是修改parser.pl文件來生成對應(yīng)的
在parser.pl和xml中增加ModeGPIOState和SlavePanelNodeID(這兩個名稱是我自己命名的),這樣用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ù)來填寫
下面只介紹幾項
2.1? PanelTimings
An array of length 12 that specifies the PHY timing settings for the panel.
填寫好參數(shù)后,見excel表格的DSI PHY timing setting子表格
執(zhí)行CTRL+J and CTRL+K后重新計算生成相關(guān)的,如下
PanelTimings對應(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
?
這兩個值對應(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è)計的SN65DSI84沒有用到reset,我以之前項目用的顯示屏panel規(guī)格書說明下
這是panel reset引腳的時序圖,所以
<ResetSequence>
?????? <PinState1>1</PinState1>
?????? <PulseWidth1>20</PulseWidth1>
?????? <PinState2>0</PinState2>
?????? <PulseWidth2>2</PulseWidth2>
?????? <PinState3>1</PinState3>
?????? <PulseWidth3>20</PulseWidth3>
?????? <EnableBit>2</EnableBit>
??? </ResetSequence>
這些值我還沒有改,需要根據(jù)實際panel來填寫,具體需要幾個階段,根據(jù)panel的規(guī)格書來定,比如這里是3個階段
這里的EnableBit是用于表示reset GPIO作為輸入還是輸出的,輸入對應(yīng)0,輸出對應(yīng)2,這個時序在target_panel_reset()中會用到
?
2.4? 頭文件結(jié)構(gòu)體lane_configuration的force_clk_lane_hs
這個表示是否強(qiáng)制DSK CLK工作在HS(高速)模式,一般情況下command panel此值為0,表示工作在LP(low power)模式;video panel此值為1,表示工作在HS模式。
因為我們硬件設(shè)計,SN65DSI84采用的是DSI CLK作為時鐘源,SN65DSI84的DSI Lane合并時需要在HS模式,所以我們這里force_clk_lane_hs=1,如果為0則黑屏
?
aboot_init()--->sn65dsi84_Init()+target_display_init()--->gcdb_display_init()--->oem_panel_select()--->init_panel_data()
?
下面重點說明下我們修改涉及的部分:
3.1? sn65dsi84_Init()
這里主要是對SN65DSI84初始化,主要的內(nèi)容如下:
3.1.1? 涉及到的GPIO控制
3.1.2? 通過I2C對SN65DSI84寫寄存器,初始化
這涉及到I2C讀寫,有兩種實現(xiàn)方式:
(1)GPIO模擬I2C
這里我省略到一部分寄存器,中間實際是有其他寄存器的。
?
(2)采用CPU的I2C總線協(xié)議
Lk下Msm8937對應(yīng)的目錄是msm8952,查看了源代碼,lk階段8952沒有使用i2c,但msm8916下有配置i2c和使用i2c的地方,比如oem_panel.c下:
那我們基于8916的用法來在8952下添加的,需要根據(jù)采用的I2C對應(yīng)的GPIO口來確定是哪個BLSP和QUP,比如我們采用SDA---GPIO6,SCL---GPIO7,最后確定是對應(yīng)BLSP1和QUP_ID_1,詳細(xì)見鏈接
https://blog.csdn.net/LoongEmbedded/article/details/83070030
3.2? oem_panel_select()
確保panel_id的值為我們增加的顯示屏對應(yīng)的,這里還調(diào)用init_sn65dsi84()來對SN65DSI84上電控制和通過I2C寫初始化參數(shù)。
?
3.3? init_panel_data()
把xml文件生成的mipi dsi相關(guān)參數(shù)來初始化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)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android内置第三方输入法
- 下一篇: android7.1.2 user版本打