本地搭建网站二手房网
2026/6/10 17:42:05 网站建设 项目流程
本地搭建网站,二手房网,公司注册官方网站,微信 公司网站 怎么做57.Linux MIPI接口屏幕 对于mipi DSI接口来#xff0c;我们需要学习如何调试 MIPI DSI 接口屏幕 RK3588有两个MIPI接口分别为MIPI0 MIPI1 调试 MIPI 屏幕主要有三部分内容#xff1a; 1)、屏幕背光调试#xff0c;这个是首先要搞定的#xff0c;背光不亮#xff0c;屏幕也…57.Linux MIPI接口屏幕对于mipi DSI接口来我们需要学习如何调试 MIPI DSI 接口屏幕RK3588有两个MIPI接口分别为MIPI0 MIPI1调试 MIPI 屏幕主要有三部分内容1)、屏幕背光调试这个是首先要搞定的背光不亮屏幕也就什么都看不到。这个比较简单属于 PWM 相关知识后面也会讲解如何调试背光。2)、向屏幕发送初始化序列前面已经说了这点需要用到逻辑分析仪。3)、调试屏幕的 DPI 参数最后需要调试 MIPI 屏幕的 DPI 参数也就是 HBP、 HFP、VBP、 VFP 等这些参数。我们后面编写驱动的时候也是按照这三大内容逐步调试的。背光 PWM 节点设置屏幕接口背光控制 IO 连接到了 RK3588 的 GPIO0_C0 引脚上我们需要将 GPIO0_ C0 复用为 PWM1rk3588s-pinctrl.dtsi添加pinctl的信息pwm1{/omit-if-no-ref///添加下面节点pwm1m0_pins:pwm1m0-pins{rockchip,pins/* pwm1_m0 */0RK_PC03pcfg_pull_none;};};GPIO0_C0找到文档中的寄存器配置章节Rockchip RK3588 TRM V1.0-Part2 20220309中的6.27BUS_IOC register Description中全局搜索gpio0c0_sel,只有两处地方使用了PMU2_IOC_GPIO0C_IOMUX_SEL_L以及BUS_IOC_GPIO0C_IOMUX_SEL_L我们设置为PWM1_M0因此 0 RK_PC0 3 pcfg_pull_none;将 GPIO0_C0 引脚设置为 PWM1 功能。 配置完毕默认禁用引脚的上下拉电阻即不启用上拉和下拉。 pinctl就设置完了在rk3588s.dtsi中向pwm1追加内容pinctl的内容pwm1:pwmfd8b0010{compatiblerockchip,rk3588-pwm,rockchip,rk3328-pwm;reg0x00xfd8b00100x00x10;interruptsGIC_SPI344IRQ_TYPE_LEVEL_HIGH;#pwm-cells3;pinctrl-namesactive;pinctrl-0pwm1m0_pins;clockscru CLK_PMU1PWM,cru PCLK_PMU1PWM;clock-namespwm,pclk;statusdisabled;};PWM 和相关的 IO 已经准备好了backlight 节点设置还需要一个节点来将屏幕背光和 pwm1m0_pins 连接起来。这个节点就是 backlight①、节点名称要为“backlight”。②、节点的 compatible 属性值要为“pwm-backlight”因此可以通过在 Linux 内核中搜索“pwm-backlight”来查找 PWM 背光控制驱动程序这个驱动程序文件为drivers/video/backlight/pwm_bl.c感兴趣的可以去看一下这个驱动程序。③、 pwms 属性用于描述背光所使用的 PWM 的通道以及 PWM 频率比如本章我们要使用的 pwm1 pwm 频率设置为 40KHz。那么 pwms 属性就可以设置为pwmspwm10250000一共有 4 个参数第 1 个“pwm1”表示使用 PWM1第 2 个“0”就是使用通道 0也就是 PWM1第 3 个 25000 是 PWM 的周期单位是 ns也就是 25000ns换算成频率就是40KHz最后一个 0 是极性设置可以设置为 PWM_POLARITY_NORMAL(对应的值为 0)或者 PWM_POLARITY_INVERTED(对应的值为 1)第一个是正常极性第二个极性翻转。④、 brightness-levels 属性描述亮度级别范围为 0~255 0 表示 PWM 占空比为 0%也就是亮度最低 255 表示 100%占空比也就是亮度最高。至于设置几级亮度大家可以自行填写此属性。⑤、 default-brightness-level 属性为默认亮度级别。根据上述根据上述 5 点设置 backlight 节点我们分析一下 RK3588 的设备树关于 backlight 节点的配置 配置内容如下backlight{pwmspwm10250000;default-brightness-level255;statusdisabled;};{backlight1:backlight1{compatiblepwm-backlight;pwmspwm150250000;brightness-levels0202021212222232324242525262627272828292930303131323233333434353536363737383839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255;default-brightness-level255;statusdisabled;};};汇总下来设置背光使用 pwm5 PWM 频率为 40KHz。设置 256 级背光(0~255)。设置默认背光等级为 255(最亮)。屏幕背光就设置好了。这是烧写应该就会点亮不亮很有可能就是没有初始化屏幕.接下来看dsi0节点rk3588-atk-devkit.dtsidsi0{statusdisabled;//rockchip,lane-rate 1000;dsi0_panel:panel0{statusokay;compatiblesimple-panel-dsi;reg0;backlightbacklight;reset-delay-ms10;enable-delay-ms10;prepare-delay-ms10;unprepare-delay-ms10;disable-delay-ms60;dsi,flags(MIPI_DSI_MODE_VIDEO|MIPI_DSI_MODE_VIDEO_BURST|MIPI_DSI_MODE_LPM|MIPI_DSI_MODE_EOT_PACKET);dsi,formatMIPI_DSI_FMT_RGB888;dsi,lanes4;panel-init-sequence[230002FE21230002040023000200642300022A00....23000200642300022A00];panel-exit-sequence[0500012805000110];disp_timings0:display-timings{native-modedsi0_timing0;dsi0_timing0:timing0{clock-frequency132000000;hactive1080;vactive1920;hfront-porch15;hsync-len4;hback-porch30;vfront-porch15;vsync-len2;vback-porch15;hsync-active0;vsync-active0;de-active0;pixelclk-active0;};};ports{#address-cells1;#size-cells0;port0{reg0;panel_in_dsi:endpoint{remote-endpointdsi_out_panel;};};};};ports{#address-cells1;#size-cells0;port1{reg1;dsi_out_panel:endpoint{remote-endpointpanel_in_dsi;};};};};部分参数说明MIPI 使用的是 DSI0。 这里的 status “disabled”;表示禁用但是我们在 rk3588-atk-lcds.dtsi 中设置 dsi1启用并重写了 dsi0 里的参数。所以我们在这里看到的参数基本都会被重写。设置 MIPI 速率这里在 RK3588 上已经不启用了因为会根据屏幕配置的时钟参数自动计算大家可以看看前面的计算公式。panel 子节点初始化 MIPI 屏幕的具体参数就在此节点里面。我们重点看一下 panel 子节点下的各个属性。设置屏幕背光使用示例代码中的 backlight 节点。设置 MIPI屏幕一些模式MIPI_DSI_MODE_VIDEO主控采用 video 模式。MIPI_DSI_MODE_VIDEO_BURST使用 video 的 Burst 模式。MIPI_DSI_MODE_LPM支持 LP 模式也就是在 LP 模式下传输初始化序列。MIPI_DSI_MODE_EOT_PACKET禁止 HS 模式下的 EoT 包。屏幕采用 RGB888 格式。使用 4lanes。前面说了在这个 rk3588-evb.dtsi 配置的 panel-init-sequence 和 disp_timings0 都会被重写因为正点原子有几个分辨率的屏幕分别是 5.5 英寸 720x1280MIPI 屏 5.5 英寸1080x1920MIPI 屏幕 10.1 英寸 800x1280MIPI 屏幕所以写在一个 dts 里肯定是不实际的。rk3588-evb.dtsi 里的 dsi0 配置就是模板现在我们要重写这里面的参数以 720P 的 MIPI 屏幕为例。打开 rk3588-atk-lcds.dtsi找到以下代码#ifdefined(ATK_LCD_TYPE_MIPI_TX0_5P5_720X1280)disp_timings0{native-modemipi0_5p5_720x1280_timing;};dsi0_panel{panel-init-sequence[390004B9 FF8394390007BA6303686B B2 C0//15 00 02 36 01(倒向显示)//15 00 02 36 02(正向显示)1500023601...];};mipi0_5p5_720x1280_timing:timing1{clock-frequency65000000;hactive720;vactive1280;hfront-porch48;hsync-len8;hback-porch52;vfront-porch16;vsync-len6;vback-porch15;hsync-active0;vsync-active0;de-active0;pixelclk-active0;};panel-init-sequence描述了要发送给屏幕的初始化序列非常重要内容中第一行39 00 04 B9 FF 83 94按照上一小节的要求填写字节流可以看出真正发送给屏幕初始化序列是“B9 FF 83 94”这个也就是屏幕厂商给到你的初始化序列。其中第一个 0X39 就是图 22.8-1 中的指令 DCS 长写指令是个长数据包。后续我们会用逻辑分析仪抓取波形会发现这个包就是长数据包格式。05 64 01 110X05 对应 DCS 短写指令是个短数据包格式。 0X64 表示这条初始化序列发送以后延时 100ms(0X64)再发送下一条 0X01 说明负载只有 1 个字节 0X11 就是最终要发送出去的负载值。同时我们也来看看重写的 720P 的时序参数在 rk3588-atk-lcd.dtsi 找到以下代码mipi0_5p5_720x1280_timing:timing1{clock-frequency65000000;hactive720;vactive1280;hfront-porch48;hsync-len8;hback-porch52;vfront-porch16;vsync-len6;vback-porch15;hsync-active0;vsync-active0;de-active0;pixelclk-active0;};display-timings0 就是 MIPI 屏幕的 DPI 时序参数也就是 HFP、 HBP 等等这些时序信息根据自己所使用的屏幕实际参数填写。编写完毕后编译设备树、烧写在系统中的体现1.屏幕亮度ls/sys/class/backlight/-l cat/sys/class/backlight/backlight/brightness 查看当前亮度值255echo200/sys/class/backlight/backlight/brightness 设置亮度值2.显示画面先关闭qt界面/etc/init.d/S50systemui stopstoping systemui… done.fbset-fb/dev/fb0 mode800x1280-0#D:0.000MHz,H:0.000kHz,V:0.000Hzgeometry8001280800128032timings0000000accel true rgba8/16,8/8,8/0,0/0endmode还需要先关闭系统自带的图形界面ps aux|grep-Eqt|Xorg|weston# 查找图形进程 root8440.30.951885676012?Sl10:160:12/usr/bin/weston root11360.00.212454422976?Ss10:160:00/usr/libexec/weston-keyboard root11370.00.312721625040?Ss10:160:00/usr/libexec/weston-desktop-shell root25610.00.058521068ttyFIQ0 S11:160:00grep-E qt|Xorg|weston# 终止主进程和子进程PID对应你的查询结果 kill-984411361137接着我们就可以使用LCD那样的操作app来实现对屏幕的操作啦查看43章节的简单示例并在板子上运行就可以看到效果想要显示复杂效果就需要高级的GUI界面啦如安卓、QT、lvgl

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询