迅为国产RK3568开发板Android移植 LCD 屏幕
<p>rk3568 芯片非常强大,可以支持的屏幕接口有很多,显示接口支持可是非常丰富的,</p><p> <img src="https://img2022.cnblogs.com/blog/559586/202204/559586-20220413104119152-995309126.jpg"></p>
<p> </p>
<p> </p>
<p>iTOP-rk3568 <span style="font-family: 宋体">开发板支持</span> MIPI <span style="font-family: 宋体">接口的屏幕,接口如下图所示:</span></p>
<p> </p>
<p> <img src="https://img2022.cnblogs.com/blog/559586/202204/559586-20220413104128077-1876608938.jpg"></p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p><strong><span style="font-family: Arial">1</span></strong><strong> </strong><strong><span style="font-family: 黑体">屏幕点亮流程</span> </strong></p>
<p>点亮屏幕基本的流程是一致的,一般是背光使能---->背光点亮---->屏幕使能---->reset <span style="font-family: 宋体">引</span></p>
<p>脚按照指定的时序/波形拉高或者拉低----><span style="font-family: 宋体">初始化序列命令发送。</span></p>
<p><span style="font-family: 宋体">流程主要是以下几步</span></p>
<p>l</p>
<p><span style="font-family: 宋体">需要向屏幕厂商要一些屏幕关键参数和资料</span></p>
<p>l</p>
<p><span style="font-family: 宋体">进行关键引脚对应</span></p>
<p>l</p>
<p><span style="font-family: 宋体">进行设备树配置</span></p>
<p>l</p>
<p><span style="font-family: 宋体">进行驱动配置</span></p>
<p>l</p>
<p><span style="font-family: 宋体">源码编译,烧写镜像测试</span></p>
<p> </p>
<p class="p">15.2.1<span style="font-family: 宋体">关键引脚对应</span></p>
<p class="p"> </p>
<p class="p">15.2.2<span style="font-family: 宋体">屏幕关键参数</span></p>
<p class="p">15.2.3<span style="font-family: 宋体">屏幕初始化序列改写</span></p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p><strong><span style="font-family: Arial">2</span></strong><strong><span style="font-family: 黑体">根据屏参和硬件设计填写</span> </strong><strong>dts </strong></p>
<p><span style="font-family: 宋体">这一部分是重点,全部之前的工作全为此处进行准备。我们新建一个</span> dtsi <span style="font-family: 宋体">文件特意放屏</span></p>
<p>幕相关的:kernel/arch/arm64/boot/dts/rockchip/topeet_rk3568_lcds.dtsi</p>
<p><span style="font-family: 宋体">然后在</span> kernel/arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10.dts <span style="font-family: 宋体">文件中加入这个头文</span></p>
<p><span style="font-family: 宋体">件,如下图所示:</span></p>
<p> </p>
<p> </p>
<p><img src="https://img2022.cnblogs.com/blog/559586/202204/559586-20220413104351166-1807195089.jpg"></p>
<p> </p>
<p> </p>
<p> </p>
<p><span style="font-family: 宋体">另注意,由于</span> DTS 文件设计到层层包含(DTS 文件可以包含后缀为.dtsi <span style="font-family: 宋体">的文件,作用就</span></p>
<p><span style="font-family: 宋体">像</span> C 语言中的.h <span style="font-family: 宋体">文件),故建议重要配置及板卡特性配置写到最后一级的</span> DTS <span style="font-family: 宋体">文件中,防</span></p>
<p><span style="font-family: 宋体">止由于在较高层级的</span> dtsi <span style="font-family: 宋体">配置后手误在后面又进行了配置,导致配置被错误覆盖。</span></p>
<p>共需要以下几个重点内容:dsi, route_dsi, backlight, vcc_lcd, dsi_in_vopb,</p>
<p>dsi_in_vopl,vopb<span style="font-family: 宋体">。</span></p>
<p> </p>
<p class="p"><strong><span style="font-family: Calibri">2.1</span></strong><strong> dsi<span style="font-family: 宋体">节点</span></strong></p>
<p class="p"> </p>
<p>mipi <span style="font-family: 宋体">屏幕我们使用</span> dsi1 <span style="font-family: 宋体">接口,所以需要在设备树里面查找</span> dsi <span style="font-family: 宋体">节点,如下图所示:</span></p>
<p>kernel/arch/arm64/boot/dts/rockchip/rk3568.dtsi</p>
<p>(瑞芯微写好的)</p>
<p class="p"> </p>
<p class="p"> </p>
<p class="p"> <img src="https://img2022.cnblogs.com/blog/559586/202204/559586-20220413104402921-1980381128.jpg"></p>
<p> </p>
<p class="p"> </p>
<p> </p>
<p class="p"> </p>
<p class="p"> </p>
<p class="p"> </p>
<p class="p"> </p>
<p class="p"> </p>
<p>kernel/arch/arm64/boot/dts/rockchip/rk3568.dtsi <span style="font-family: 宋体">(瑞芯微写好的)</span></p>
<p>dsi1: dsi@fe070000 {</p>
<p>compatible = "rockchip,rk3568-mipi-dsi";</p>
<p>reg = <0x0 0xfe070000 0x0 0x10000>;</p>
<p>interrupts = <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>;</p>
<p>clocks = <&cru PCLK_DSITX_1>, <&cru HCLK_VO>, <&video_phy1>;</p>
<p>clock-names = "pclk", "hclk", "hs_clk";</p>
<p>resets = <&cru SRST_P_DSITX_1>;</p>
<p>reset-names = "apb";</p>
<p>phys = <&video_phy1>;</p>
<p>phy-names = "mipi_dphy";</p>
<p>power-domains = <&power RK3568_PD_VO>;</p>
<p>rockchip,grf = <&grf>;</p>
<p>#address-cells = <1>;</p>
<p>#size-cells = <0>;</p>
<p>status = "disabled";</p>
<p>ports {</p>
<p>#address-cells = <1>;</p>
<p>#size-cells = <0>;</p>
<p>dsi1_in: port@0 {</p>
<p>reg = <0>;</p>
<p>#address-cells = <1>;</p>
<p>#size-cells = <0>;</p>
<p>dsi1_in_vp0: endpoint@0 {</p>
<p>reg = <0>;</p>
<p>remote-endpoint = <&vp0_out_dsi1>;</p>
<p>status = "disabled";</p>
<p>};</p>
<p>dsi1_in_vp1: endpoint@1 {</p>
<p>reg = <1>;</p>
<p>remote-endpoint = <&vp1_out_dsi1>;</p>
<p>status = "disabled";</p>
<p>};</p>
<p>};</p>
<p>};</p>
<p>};</p>
<p><span style="font-family: 宋体">默认的源码中是配置了</span> dsi1 <span style="font-family: 宋体">节点的,是适配的瑞芯微的屏幕。现在我们要适配迅为的</span></p>
<p>MIPI 7 <span style="font-family: 宋体">寸屏,所以我们在修改之前,要删掉瑞芯微之前适配的屏幕节点。在下图的设备树中</span></p>
<p>找到&dsi1 <span style="font-family: 宋体">以及和</span> dsi1 相关的注释掉。</p>
<p> </p>
<p> <img src="https://img2022.cnblogs.com/blog/559586/202204/559586-20220413104417314-1641221675.jpg"></p>
<p> </p>
<p> </p>
<p> </p>
<p class="p"> </p>
<p class="p"> </p>
<p class="p"> </p>
<p><span style="font-family: 宋体">好,现在接下来便可以在</span> topeet_rk3568_lcds.dtsi <span style="font-family: 宋体">中配置迅为的屏幕了。配置如下:</span></p>
<p>&dsi1 {</p>
<p>status = "okay";</p>
<p>dsi1_panel: panel@0 {</p>
<p>status = "okay";</p>
<p>compatible = "simple-panel-dsi";</p>
<p>reg = <0>;</p>
<p>//<span style="font-family: 宋体">供电电压是</span> 3.3V</p>
<p>power-supply = <&vcc3v3_lcd1_n>;</p>
<p>//<span style="font-family: 宋体">设置背光</span></p>
<p>backlight = <&backlight>;</p>
<p>//reset-gpios <span style="font-family: 宋体">表示屏幕</span> reset <span style="font-family: 宋体">引脚,拉低,具体的拉高或者拉低要根据内</span></p>
<p><span style="font-family: 宋体">核配置和时序要求来进行对应的修改</span></p>
<p>reset-gpios = <&gpio3 RK_PC7 GPIO_ACTIVE_LOW>;</p>
<p>//enable-gpios = <&gpio3 RK_PC6 GPIO_ACTIVE_HIGH>;</p>
<p>//下述配置中有一些延时,reset-delay-ms <span style="font-family: 宋体">是在屏幕初始化过程中,第一次</span></p>
<p><span style="font-family: 宋体">操作</span> reset 引脚之前的延时。init-delay-ms<span style="font-family: 宋体">,是在屏幕初始化过程中,第一次操作</span> reset <span style="font-family: 宋体">引脚</span></p>
<p><span style="font-family: 宋体">之后的延时。</span></p>
<p>reset-delay-ms = <60>;</p>
<p>enable-delay-ms = <60>;//<35>; //<60>;</p>
<p>prepare-delay-ms = <60>;//<6>; //<60>;</p>
<p>unprepare-delay-ms = <60>;//<0>; //<60>;</p>
<p>disable-delay-ms = <60>;//<20>; //<60>;</p>
<p>dsi,flags = <(MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |</p>
<p>MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_EOT_PACKET)>;</p>
<p>dsi,format = <MIPI_DSI_FMT_RGB888>;</p>
<p>//dsi,lanes = <4>;<span style="font-family: 宋体">是配置当前</span> mipi <span style="font-family: 宋体">是几通道的,需根据屏幕实际情况配置。</span></p>
<p>dsi,lanes = <4>;</p>
<p>// panel-init-sequence 填写刚刚改写好的初始化序列</p>
<p class="p"> </p>
<p>panel-init-sequence = [</p>
<p>39 00 03 E0 AB BA</p>
<p>39 00 03 E1 BA AB</p>
<p>.................</p>
<p>05 C8 01 11</p>
<p>05 14 01 29</p>
<p>];</p>
<p>//panel-exit-sequence <span style="font-family: 宋体">填写</span> display off <span style="font-family: 宋体">序列,一般为两条,也需要厂家提供。</span></p>
<p>panel-exit-sequence = [</p>
<p>05 05 01 28</p>
<p>05 78 01 10</p>
<p>];</p>
<p>//这一部分也很重要,是屏幕的一些参数。hactive <span style="font-family: 宋体">和</span> vactive <span style="font-family: 宋体">就是水平数值的像素,也就是</span></p>
<p><span style="font-family: 宋体">屏</span> <span style="font-family: 宋体">幕</span> <span style="font-family: 宋体">分</span> <span style="font-family: 宋体">辨</span> <span style="font-family: 宋体">率</span> <span style="font-family: 宋体">了</span> <span style="font-family: 宋体">。</span> hback-porch,hfront-porch,vback-porch,vfront-porch <span style="font-family: 宋体">按</span> <span style="font-family: 宋体">顺</span> <span style="font-family: 宋体">序</span> <span style="font-family: 宋体">简</span> <span style="font-family: 宋体">写</span> <span style="font-family: 宋体">为</span></p>
<p>HBP,HFP,VBP,VFP,<span style="font-family: 宋体">这个跟厂家讨要后,根据简写字母对应即可。这个在之前的章节中已经讲解</span></p>
<p><span style="font-family: 宋体">过了。</span></p>
<p>disp_timings0: display-timings {</p>
<p>native-mode = <&dsi1_timing0>;</p>
<p>dsi1_timing0: timing0 {</p>
<p>//clock-frequency <span style="font-family: 宋体">像素时钟频率</span></p>
<p>//<span style="font-family: 宋体">像素时钟频率</span> = (</p>
<p>hactive+hbp+hfp+hsync-len)x (vactive+vbp+vfp+vsync-len)xfps</p>
<p>// <span style="font-family: 宋体">然后保留两位有效数字(不要四舍五入),后面数据直接填</span> 0 <span style="font-family: 宋体">即可。</span></p>
<p>clock-frequency = <72000000>;</p>
<p>//<span style="font-family: 宋体">以下的这些参数在数据手册中,我们已经查找到了。</span></p>
<p>hactive = <800>;</p>
<p>vactive = <1280>;</p>
<p>hfront-porch = <48>; //20</p>
<p>hsync-len = <20>;</p>
<p>hback-porch = <48>; //20</p>
<p>vfront-porch = <16>; //10</p>
<p>vsync-len = <6>; //10</p>
<p>vback-porch = <15>; //4</p>
<p>hsync-active = <0>;</p>
<p>vsync-active = <0>;</p>
<p>de-active = <0>;</p>
<p>pixelclk-active = <0>;</p>
<p>};</p>
<p>};</p>
<p>//<span style="font-family: 宋体">配置</span> ports</p>
<p>ports {</p>
<p>#address-cells = <1>;</p>
<p>#size-cells = <0>;</p>
<p>port@0 {</p>
<p>reg = <0>;</p>
<p>panel_in_dsi1: endpoint {</p>
<p>remote-endpoint = <&dsi1_out_panel>;</p>
<p>};</p>
<p>};</p>
<p>};</p>
<p>};</p>
<p>ports {</p>
<p>#address-cells = <1>;</p>
<p>#size-cells = <0>;</p>
<p>port@1 {</p>
<p>reg = <1>;</p>
<p>dsi1_out_panel: endpoint {</p>
<p>remote-endpoint = <&panel_in_dsi1>;</p>
<p>};</p>
<p>};</p>
<p>};</p>
<p>};</p>
<p><span style="font-family: 宋体">我们使用</span> dsi1 <span style="font-family: 宋体">绑定到</span> vp1 <span style="font-family: 宋体">上,所以</span> dsi1_in_vp0 <span style="font-family: 宋体">节点为</span> disabled,dsi1_in_vp1 <span style="font-family: 宋体">节点为</span> okay</p>
<p><span style="font-family: 宋体">当</span> dsi1 使能的时候,video_phy1 要使能,video_phy0 <span style="font-family: 宋体">要关闭。设备树</span> topeet_rk3568_lcds.dtsi</p>
<p>中添加如下图所示:</p>
<p class="p"> </p>
<p class="p"> </p>
<p> </p>
<p class="p"> </p>
<p class="p"> </p>
<p class="p"> <img src="https://img2022.cnblogs.com/blog/559586/202204/559586-20220413104434556-1796550208.jpg"></p>
<p> </p>
<p class="p"> </p>
<p class="p"> </p>
<p class="p"> </p>
<p><strong><span style="font-family: Calibri">2.2</span></strong><strong> Backlight </strong></p>
<p><span style="font-family: 宋体">背光常用的有三种情况:</span></p>
<p><span style="font-family: 宋体">一是</span> <span style="font-family: 宋体">常开。</span></p>
<p><span style="font-family: 宋体">二是</span> <span style="font-family: 宋体">背光</span> IC <span style="font-family: 宋体">使能后,输入</span> PWM <span style="font-family: 宋体">信号调光。</span></p>
<p><span style="font-family: 宋体">三是</span> <span style="font-family: 宋体">背光</span> IC <span style="font-family: 宋体">使能后,通过</span> FB 获得反馈自动进行调光。</p>
<p><span style="font-family: 宋体">设备树里面配置背光。首先根据原理图,我们知道使用的是</span> pwm5,</p>
<p>kernel/arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi <span style="font-family: 宋体">文件里面</span> backlight1 <span style="font-family: 宋体">节点如下所示:</span></p>
<p>backlight1: backlight1 {</p>
<p>compatible = "pwm-backlight";</p>
<p>pwms = <&pwm5 0 25000 0>;</p>
<p>brightness-levels = <</p>
<p>0 20 20 21 21 22 22 23</p>
<p>23 24 24 25 25 26 26 27</p>
<p>27 28 28 29 29 30 30 31</p>
<p>.................................................</p>
<p>>;</p>
<p>default-brightness-level = <200>;</p>
<p>};</p>
<p>kernel/arch/arm64/boot/dts/rockchip/topeet_rk3568_lcds.dtsi <span style="font-family: 宋体">设备树中添加背光节点</span></p>
<p>&backlight {</p>
<p>status = "okay";</p>
<p>pwm = <&pwm5 0 25000 0>;</p>
<p>};</p>
<p>pwms = <&pwm5 0 25000 0>; <span style="font-family: 宋体">配置</span> pwm,<span style="font-family: 宋体">使用</span> pwm5,25000 是周期,pwm <span style="font-family: 宋体">为正极性。</span></p>
<p>brightness-levels <span style="font-family: 宋体">属性:配置背光亮度数组,一般以值</span> 255 <span style="font-family: 宋体">为一个</span> scale<span style="font-family: 宋体">,当</span> pwm <span style="font-family: 宋体">设置为正</span></p>
<p><span style="font-family: 宋体">极时,从</span> 0~255 <span style="font-family: 宋体">表示背光为正极,占空比从</span> 0%~100%变化,,255~0 <span style="font-family: 宋体">为负极性,占空比从</span></p>
<p>100%~0%<span style="font-family: 宋体">变化,当</span> pwm <span style="font-family: 宋体">设置为负极性时,反之。</span></p>
<p>default-brightness-level <span style="font-family: 宋体">属性,时开机时默认背光亮度,范围是</span> 0~255</p>
<p><strong><span style="font-family: Calibri">2.3</span></strong><strong> logo </strong><strong><span style="font-family: 宋体">显示</span> </strong></p>
<p><span style="font-family: 宋体">设备树</span> kernel/scripts/dtc/include-prefixes/arm64/rockchip/rk3568.dtsi <span style="font-family: 宋体">中节点如下:</span></p>
<p> </p>
<p> </p>
<p> <img src="https://img2022.cnblogs.com/blog/559586/202204/559586-20220413104445136-936283639.jpg"></p>
<p><img src="https://img2022.cnblogs.com/blog/559586/202204/559586-20220413104457659-958328459.jpg"></p>
<p><img src="https://img2022.cnblogs.com/blog/559586/202204/559586-20220413104505742-341629345.jpg"></p>
<p><img src="https://img2022.cnblogs.com/blog/559586/202204/559586-20220413104512473-1204873564.jpg"></p>
<p> </p>
<p class="p"> </p>
<p><span style="font-family: 宋体">所以我们要使用</span> route_dsi1 显示通路<span style="font-family: 宋体">,绑定到</span> vp1 <span style="font-family: 宋体">上,修改</span></p>
<p>kernel/scripts/dtc/include-prefixes/arm64/rockchip/topeet_rk3568_lcds.dtsi <span style="font-family: 宋体">文件,添加如下所</span></p>
<p>示:</p>
<p> </p>
<p> <img src="https://img2022.cnblogs.com/blog/559586/202204/559586-20220413104520814-1846690103.jpg"></p>
<p> </p>
<p> </p>
<p> </p>
<p><strong><span style="font-family: Arial">3</span></strong><strong> Config </strong><strong><span style="font-family: 黑体">配置</span> </strong></p>
<p>RK3568 SDK <span style="font-family: 宋体">下</span> kernel/arch/arm64/configs/*_defconfig <span style="font-family: 宋体">已经把</span> LCD <span style="font-family: 宋体">相关的配置设置好了,</span></p>
<p><span style="font-family: 宋体">如果自己做了修改,修改</span> kernel/arch/arm64/configs/rockchip_defconfig <span style="font-family: 宋体">配置文件,增加如下</span></p>
<p><span style="font-family: 宋体">所示:</span></p>
<p>CONFIG_DRM_ROCKCHIP=y</p>
<p>CONFIG_ROCKCHIP_DW_MIPI_DSI=y</p>
<p>CONFIG_DRM_PANEL_SIMPLE=y</p>
<p> </p>
<p> </p>
<p><strong><span style="font-family: Arial">4</span></strong><strong><span style="font-family: 黑体">烧写验证</span> </strong></p>
<p><strong>4.1</strong><strong><span style="font-family: 宋体">测试显示</span> </strong></p>
<p><span style="font-family: 宋体">重新编译</span> android <span style="font-family: 宋体">源码,烧写镜像,发现</span> mipi <span style="font-family: 宋体">屏幕显示正常。如下图所示:</span></p>
<p> </p>
<p> <img src="https://img2022.cnblogs.com/blog/559586/202204/559586-20220413104529677-2134472227.jpg"></p>
<p> </p>
<p> </p>
<p> </p>
<p><strong><span style="font-family: Calibri">4</span></strong><strong>.2 </strong><strong><span style="font-family: 宋体">背光亮度调节测试</span> </strong></p>
<p>目前还没有配置屏幕触摸,我们可以在开发板上插上鼠标,进入”设置”APP<span style="font-family: 宋体">,依次点击</span></p>
<p>“显示”,“亮度”,拖动滑条可以调节亮度。</p>
<p>也可以使用命令行来设置屏幕亮度,<span style="font-family: 宋体">数值可以在</span> 0~250 <span style="font-family: 宋体">中设置,数字越大,亮度越高。</span></p>
<p>echo 100 > /sys/class/backlight/backlight/brightness</p>
<p> </p><br><br>
来源:https://www.cnblogs.com/topeet/p/16139211.html
頁:
[1]