qq7643066 发表于 2022-6-11 14:49

[嵌入式linux] rk3568 android11点屏流程

<p>rk3568&nbsp;芯片非常强大,可以支持的屏幕接口有很多,显示接口支持可是非常丰富的,<br style="overflow-wrap:break-word; word-break:break-all; color:#444444;Microsoft Yahei&quot;, Simsun; text-align:-webkit-left; white-space:normal; background-color:#f2f9fd; text-decoration-style:initial; text-decoration-color:initial" />
<ignore_js_op style="overflow-wrap:break-word; word-break:break-all; color:#444444;Microsoft Yahei&quot;, Simsun; text-align:-webkit-left; white-space:normal; background-color:#f2f9fd; text-decoration-style:initial; text-decoration-color:initial"></ignore_js_op><br style="overflow-wrap:break-word; word-break:break-all; color:#444444;Microsoft Yahei&quot;, Simsun; text-align:-webkit-left; white-space:normal; background-color:#f2f9fd; text-decoration-style:initial; text-decoration-color:initial" />
<br style="overflow-wrap:break-word; word-break:break-all; color:#444444;Microsoft Yahei&quot;, Simsun; text-align:-webkit-left; white-space:normal; background-color:#f2f9fd; text-decoration-style:initial; text-decoration-color:initial" />
sunychip-rk3568开发板支持&nbsp;MIPI&nbsp;接口的屏幕,接口如下图所示:<br style="overflow-wrap:break-word; word-break:break-all; color:#444444;Microsoft Yahei&quot;, Simsun; text-align:-webkit-left; white-space:normal; background-color:#f2f9fd; text-decoration-style:initial; text-decoration-color:initial" />
<ignore_js_op style="overflow-wrap:break-word; word-break:break-all; color:#444444;Microsoft Yahei&quot;, Simsun; text-align:-webkit-left; white-space:normal; background-color:#f2f9fd; text-decoration-style:initial; text-decoration-color:initial"></ignore_js_op><br style="overflow-wrap:break-word; word-break:break-all; color:#444444;Microsoft Yahei&quot;, Simsun; text-align:-webkit-left; white-space:normal; background-color:#f2f9fd; text-decoration-style:initial; text-decoration-color:initial" />
&nbsp;</p>

<div align="left" style="text-align:-webkit-left"><strong style="overflow-wrap:break-word; word-break:break-all">1</strong>&nbsp;<strong style="overflow-wrap:break-word; word-break:break-all">屏幕点亮流程</strong></div>

<div align="left" style="text-align:-webkit-left">点亮屏幕基本的流程是一致的,一般是背光使能----&gt;背光点亮----&gt;屏幕使能----&gt;reset 引</div>

<div align="left" style="text-align:-webkit-left">脚按照指定的时序/波形拉高或者拉低----&gt;初始化序列命令发送。</div>

<div align="left" style="text-align:-webkit-left">流程主要是以下几步</div>

<div align="left" style="text-align:-webkit-left">需要向屏幕厂商要一些屏幕关键参数和资料</div>

<div align="left" style="text-align:-webkit-left">进行关键引脚对应</div>

<div align="left" style="text-align:-webkit-left">进行设备树配置</div>

<div align="left" style="text-align:-webkit-left">进行驱动配置</div>

<div align="left" style="text-align:-webkit-left">源码编译,烧写镜像测试</div>

<div align="left" style="text-align:-webkit-left">15.2.1关键引脚对应</div>

<div align="left" style="text-align:-webkit-left">15.2.2屏幕关键参数</div>

<div align="left" style="text-align:-webkit-left">15.2.3屏幕初始化序列改写</div>

<div align="left" style="text-align:-webkit-left"><strong style="overflow-wrap:break-word; word-break:break-all">2</strong><strong style="overflow-wrap:break-word; word-break:break-all">根据屏参和硬件设计填写</strong>&nbsp;<strong style="overflow-wrap:break-word; word-break:break-all">dts</strong></div>

<div align="left" style="text-align:-webkit-left">这一部分是重点,全部之前的工作全为此处进行准备。我们新建一个 dtsi 文件特意放屏</div>

<div align="left" style="text-align:-webkit-left">幕相关的:kernel/arch/arm64/boot/dts/rockchip/topeet_rk3568_lcds.dtsi</div>

<div align="left" style="text-align:-webkit-left">然后在kernel/arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10.dts 文件中加入这个头文</div>

<div align="left" style="text-align:-webkit-left">件,如下图所示:</div>

<div align="left" style="text-align:-webkit-left"><ignore_js_op style="overflow-wrap:break-word; word-break:break-all"></ignore_js_op></div>

<p>&nbsp;</p>

<div align="left" style="text-align:-webkit-left">另注意,由于 DTS 文件设计到层层包含(DTS 文件可以包含后缀为.dtsi 的文件,作用就</div>

<p>&nbsp;</p>

<div align="left" style="text-align:-webkit-left">像 C 语言中的.h 文件),故建议重要配置及板卡特性配置写到最后一级的 DTS 文件中,防</div>

<div align="left" style="text-align:-webkit-left">止由于在较高层级的 dtsi 配置后手误在后面又进行了配置,导致配置被错误覆盖。</div>

<div align="left" style="text-align:-webkit-left">共需要以下几个重点内容:dsi, route_dsi, backlight, vcc_lcd,dsi_in_vopb,</div>

<div align="left" style="text-align:-webkit-left">dsi_in_vopl,vopb。</div>

<div align="left" style="text-align:-webkit-left"><strong style="overflow-wrap:break-word; word-break:break-all">2.1 dsi</strong><strong style="overflow-wrap:break-word; word-break:break-all">节点</strong></div>

<div align="left" style="text-align:-webkit-left">mipi 屏幕我们使用 dsi1 接口,所以需要在设备树里面查找 dsi 节点,如下图所示:</div>

<div align="left" style="text-align:-webkit-left">kernel/arch/arm64/boot/dts/rockchip/rk3568.dtsi</div>

<p>&nbsp;</p>

<div align="left" style="text-align:-webkit-left">(瑞芯微写好的)</div>

<p>&nbsp;</p>

<div align="left" style="text-align:-webkit-left"><ignore_js_op style="overflow-wrap:break-word; word-break:break-all"></ignore_js_op></div>

<div align="left" style="text-align:-webkit-left">kernel/arch/arm64/boot/dts/rockchip/rk3568.dtsi(瑞芯微写好的)</div>

<p>&nbsp;</p>

<p>&nbsp;</p>

<div align="left" style="text-align:-webkit-left">dsi1: dsi@fe070000 {</div>

<p>&nbsp;</p>

<p>&nbsp;</p>

<div align="left" style="text-align:-webkit-left">compatible = &quot;rockchip,rk3568-mipi-dsi&quot;;</div>

<div align="left" style="text-align:-webkit-left">reg = &lt;0x0 0xfe070000 0x0 0x10000&gt;;</div>

<div align="left" style="text-align:-webkit-left">interrupts = &lt;GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH&gt;;</div>

<div align="left" style="text-align:-webkit-left">clocks = &lt;&amp;cru PCLK_DSITX_1&gt;, &lt;&amp;cru HCLK_VO&gt;, &lt;&amp;video_phy1&gt;;</div>

<div align="left" style="text-align:-webkit-left">clock-names = &quot;pclk&quot;, &quot;hclk&quot;, &quot;hs_clk&quot;;</div>

<div align="left" style="text-align:-webkit-left">resets = &lt;&amp;cru SRST_P_DSITX_1&gt;;</div>

<div align="left" style="text-align:-webkit-left">reset-names = &quot;apb&quot;;</div>

<div align="left" style="text-align:-webkit-left">phys = &lt;&amp;video_phy1&gt;;</div>

<div align="left" style="text-align:-webkit-left">phy-names = &quot;mipi_dphy&quot;;</div>

<div align="left" style="text-align:-webkit-left">power-domains = &lt;&amp;power RK3568_PD_VO&gt;;</div>

<div align="left" style="text-align:-webkit-left">rockchip,grf = &lt;&amp;grf&gt;;</div>

<div align="left" style="text-align:-webkit-left">#address-cells = &lt;1&gt;;</div>

<div align="left" style="text-align:-webkit-left">#size-cells = &lt;0&gt;;</div>

<div align="left" style="text-align:-webkit-left">status = &quot;disabled&quot;;</div>

<div align="left" style="text-align:-webkit-left">ports {</div>

<div align="left" style="text-align:-webkit-left">#address-cells = &lt;1&gt;;</div>

<div align="left" style="text-align:-webkit-left">#size-cells = &lt;0&gt;;</div>

<div align="left" style="text-align:-webkit-left">dsi1_in: port@0&nbsp;{</div>

<div align="left" style="text-align:-webkit-left">reg = &lt;0&gt;;</div>

<div align="left" style="text-align:-webkit-left">#address-cells = &lt;1&gt;;dsi1: dsi@fe070000 {</div>

<div align="left" style="text-align:-webkit-left">compatible = &quot;rockchip,rk3568-mipi-dsi&quot;;</div>

<div align="left" style="text-align:-webkit-left">reg = &lt;0x0 0xfe070000 0x0 0x10000&gt;;</div>

<div align="left" style="text-align:-webkit-left">interrupts = &lt;GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH&gt;;</div>

<div align="left" style="text-align:-webkit-left">clocks = &lt;&amp;cru PCLK_DSITX_1&gt;, &lt;&amp;cru HCLK_VO&gt;, &lt;&amp;video_phy1&gt;;</div>

<div align="left" style="text-align:-webkit-left">clock-names = &quot;pclk&quot;, &quot;hclk&quot;, &quot;hs_clk&quot;;</div>

<div align="left" style="text-align:-webkit-left">resets = &lt;&amp;cru SRST_P_DSITX_1&gt;;</div>

<div align="left" style="text-align:-webkit-left">reset-names = &quot;apb&quot;;</div>

<div align="left" style="text-align:-webkit-left">phys = &lt;&amp;video_phy1&gt;;</div>

<div align="left" style="text-align:-webkit-left">phy-names = &quot;mipi_dphy&quot;;</div>

<div align="left" style="text-align:-webkit-left">power-domains = &lt;&amp;power RK3568_PD_VO&gt;;</div>

<div align="left" style="text-align:-webkit-left">rockchip,grf = &lt;&amp;grf&gt;;</div>

<div align="left" style="text-align:-webkit-left">#address-cells = &lt;1&gt;;</div>

<div align="left" style="text-align:-webkit-left">#size-cells = &lt;0&gt;;</div>

<div align="left" style="text-align:-webkit-left">status = &quot;disabled&quot;;</div>

<div align="left" style="text-align:-webkit-left">ports {</div>

<div align="left" style="text-align:-webkit-left">#address-cells = &lt;1&gt;;</div>

<div align="left" style="text-align:-webkit-left">#size-cells = &lt;0&gt;;</div>

<div align="left" style="text-align:-webkit-left">dsi1_in: port@0&nbsp;{</div>

<div align="left" style="text-align:-webkit-left">reg = &lt;0&gt;;</div>

<div align="left" style="text-align:-webkit-left">#address-cells = &lt;1&gt;;</div>

<div align="left" style="text-align:-webkit-left">#size-cells = &lt;0&gt;;</div>

<div align="left" style="text-align:-webkit-left">dsi1_in_vp0: endpoint@0 {</div>

<div align="left" style="text-align:-webkit-left">reg = &lt;0&gt;;</div>

<div align="left" style="text-align:-webkit-left">remote-endpoint = &lt;&amp;vp0_out_dsi1&gt;;</div>

<div align="left" style="text-align:-webkit-left">status = &quot;disabled&quot;;</div>

<div align="left" style="text-align:-webkit-left">};</div>

<div align="left" style="text-align:-webkit-left">dsi1_in_vp1: endpoint@1 &nbsp;{</div>

<div align="left" style="text-align:-webkit-left">reg = &lt;1&gt;;</div>

<div align="left" style="text-align:-webkit-left">remote-endpoint = &lt;&amp;vp1_out_dsi1&gt;;</div>

<div align="left" style="text-align:-webkit-left">status = &quot;disabled&quot;;</div>

<div align="left" style="text-align:-webkit-left">};</div>

<div align="left" style="text-align:-webkit-left">};</div>

<div align="left" style="text-align:-webkit-left">};</div>

<div align="left" style="text-align:-webkit-left">};</div>

<p>&nbsp;</p>

<div align="left" style="text-align:-webkit-left">#size-cells = &lt;0&gt;;</div>

<p>&nbsp;</p>

<div align="left" style="text-align:-webkit-left">dsi1_in_vp0: endpoint@0 {</div>

<div align="left" style="text-align:-webkit-left">reg = &lt;0&gt;;</div>

<div align="left" style="text-align:-webkit-left">remote-endpoint = &lt;&amp;vp0_out_dsi1&gt;;</div>

<div align="left" style="text-align:-webkit-left">status = &quot;disabled&quot;;</div>

<div align="left" style="text-align:-webkit-left">};</div>

<div align="left" style="text-align:-webkit-left">dsi1_in_vp1: endpoint@1&nbsp;{</div>

<div align="left" style="text-align:-webkit-left">reg = &lt;1&gt;;</div>

<div align="left" style="text-align:-webkit-left">remote-endpoint = &lt;&amp;vp1_out_dsi1&gt;;</div>

<div align="left" style="text-align:-webkit-left">status = &quot;disabled&quot;;</div>

<div align="left" style="text-align:-webkit-left">};</div>

<div align="left" style="text-align:-webkit-left">};</div>

<div align="left" style="text-align:-webkit-left">};</div>

<p>&nbsp;</p>

<div align="left" style="text-align:-webkit-left">};</div>

<p>&nbsp;</p>

<div align="left" style="text-align:-webkit-left">默认的源码中是配置了 dsi1 节点的,是适配的瑞芯微的屏幕。现在我们要适配迅为的</div>

<div align="left" style="text-align:-webkit-left">MIPI 7 寸屏,所以我们在修改之前,要删掉瑞芯微之前适配的屏幕节点。在下图的设备树中</div>

<div align="left" style="text-align:-webkit-left">找到&amp;dsi1 以及和 dsi1 相关的注释掉。</div>

<div align="left" style="text-align:-webkit-left"><ignore_js_op style="overflow-wrap:break-word; word-break:break-all"></ignore_js_op></div>

<p>&nbsp;</p>

<div align="left" style="text-align:-webkit-left">我们使用 dsi1 绑定到 vp1 上,所以 dsi1_in_vp0 节点为 disabled,dsi1_in_vp1 节点为 okay</div>

<p>&nbsp;</p>

<div align="left" style="text-align:-webkit-left">当 dsi1 使能的时候,video_phy1 要使能,video_phy0 要关闭。设备树 topeet_rk3568_lcds.dtsi</div>

<p>&nbsp;</p>

<div align="left" style="text-align:-webkit-left">中添加如下图所示:</div>

<p>&nbsp;</p>

<div align="left" style="text-align:-webkit-left"><ignore_js_op style="overflow-wrap:break-word; word-break:break-all"></ignore_js_op></div>

<p>&nbsp;</p>

<div align="left" style="text-align:-webkit-left"><strong style="overflow-wrap:break-word; word-break:break-all">2.2 Backlight</strong></div>

<p>&nbsp;</p>

<div align="left" style="text-align:-webkit-left">背光常用的有三种情况:</div>

<div align="left" style="text-align:-webkit-left">一是 常开。</div>

<div align="left" style="text-align:-webkit-left">二是 背光 IC 使能后,输入 PWM 信号调光。</div>

<div align="left" style="text-align:-webkit-left">三是 背光 IC 使能后,通过 FB 获得反馈自动进行调光。</div>

<p>&nbsp;</p>

<div align="left" style="text-align:-webkit-left">设备树里面配置背光。首先根据原理图,我们知道使用的是 pwm5,</div>

<p>&nbsp;</p>

<p>&nbsp;</p>

<div align="left" style="text-align:-webkit-left">pwms = &lt;&amp;pwm5 0 25000 0&gt;; 配置 pwm,使用 pwm5,25000 是周期,pwm 为正极性。</div>

<p>&nbsp;</p>

<div align="left" style="text-align:-webkit-left">brightness-levels 属性:配置背光亮度数组,一般以值 255 为一个 scale,当 pwm 设置为正</div>

<div align="left" style="text-align:-webkit-left">极时,从 0~255 表示背光为正极,占空比从 0%~100%变化,,255~0 为负极性,占空比从</div>

<div align="left" style="text-align:-webkit-left">100%~0%变化,当 pwm 设置为负极性时,反之。</div>

<div align="left" style="text-align:-webkit-left">default-brightness-level 属性,时开机时默认背光亮度,范围是 0~255</div>

<div align="left" style="text-align:-webkit-left"><strong style="overflow-wrap:break-word; word-break:break-all">2.3 **</strong>&nbsp;<strong style="overflow-wrap:break-word; word-break:break-all">显示</strong></div>

<div align="left" style="text-align:-webkit-left">设备树kernel/scripts/dtc/include-prefixes/arm64/rockchip/rk3568.dtsi 中节点如下:</div>

<div align="left" style="text-align:-webkit-left"><ignore_js_op style="overflow-wrap:break-word; word-break:break-all"></ignore_js_op></div>

<div align="left" style="text-align:-webkit-left"><ignore_js_op style="overflow-wrap:break-word; word-break:break-all"></ignore_js_op></div>

<div align="left" style="text-align:-webkit-left"><ignore_js_op style="overflow-wrap:break-word; word-break:break-all"></ignore_js_op></div>

<p>&nbsp;</p>

<div align="left" style="text-align:-webkit-left">所以我们要使用 route_dsi1 显示通路,绑定到 vp1 上,修改</div>

<p>&nbsp;</p>

<div align="left" style="text-align:-webkit-left">kernel/scripts/dtc/include-prefixes/arm64/rockchip/topeet_rk3568_lcds.dtsi文件,添加如下所</div>

<div align="left" style="text-align:-webkit-left">示:</div>

<p>&nbsp;</p>

<div align="left" style="text-align:-webkit-left"><strong style="overflow-wrap:break-word; word-break:break-all">3 Config</strong>&nbsp;<strong style="overflow-wrap:break-word; word-break:break-all">配置</strong></div>

<p>&nbsp;</p>

<div align="left" style="text-align:-webkit-left">RK3568 SDK 下 kernel/arch/arm64/configs/*_defconfig 已经把 LCD 相关的配置设置好了,</div>

<div align="left" style="text-align:-webkit-left">如果自己做了修改,修改kernel/arch/arm64/configs/rockchip_defconfig 配置文件,增加如下</div>

<div align="left" style="text-align:-webkit-left">所示:</div>

<div align="left" style="text-align:-webkit-left">CONFIG_DRM_ROCKCHIP=y</div>

<div align="left" style="text-align:-webkit-left">CONFIG_ROCKCHIP_DW_MIPI_DSI=y</div>

<div align="left" style="text-align:-webkit-left">CONFIG_DRM_PANEL_SIMPLE=y</div>

<div align="left" style="text-align:-webkit-left"><strong style="overflow-wrap:break-word; word-break:break-all">4</strong><strong style="overflow-wrap:break-word; word-break:break-all">烧写验证</strong></div>

<div align="left" style="text-align:-webkit-left"><strong style="overflow-wrap:break-word; word-break:break-all">4.1</strong><strong style="overflow-wrap:break-word; word-break:break-all">测试显示</strong></div>

<div align="left" style="text-align:-webkit-left">重新编译 android 源码,烧写镜像,发现 mipi 屏幕显示正常。如下图所示:</div>

<div align="left" style="text-align:-webkit-left"><ignore_js_op style="overflow-wrap:break-word; word-break:break-all"></ignore_js_op></div>

<div align="left" style="text-align:-webkit-left"><strong style="overflow-wrap:break-word; word-break:break-all">4.2</strong>&nbsp;<strong style="overflow-wrap:break-word; word-break:break-all">背光亮度调节测试</strong></div>

<div align="left" style="text-align:-webkit-left">目前还没有配置屏幕触摸,我们可以在开发板上插上鼠标,进入&rdquo;设置&rdquo;APP,依次点击</div>

<div align="left" style="text-align:-webkit-left">&ldquo;显示&rdquo;,&ldquo;亮度&rdquo;,拖动滑条可以调节亮度。</div>

<div align="left" style="text-align:-webkit-left">也可以使用命令行来设置屏幕亮度,数值可以在 0~250 中设置,数字越大,亮度越高。</div>

<p>&nbsp;</p>

<div align="left" style="text-align:-webkit-left">echo 100 &gt;/sys/class/backlight/backlight/brightness</div>

<p>&nbsp;</p>

lugl4313820 发表于 2022-6-13 08:38

现在嵌入式看来越来越普及之势呀,希望楼主多出好作品,谢谢分享!

芯片老兵 发表于 2022-6-14 13:55

<p>这个板子接口较多,是智能盒子上用的吗,3568也是RK比较新的平台了。</p>
页: [1]
查看完整版本: [嵌入式linux] rk3568 android11点屏流程