rk3588s: linux drm mipi dsi lcd 点屏之设备树配置

rk3588s: linux drm mipi dsi lcd 点屏之设备树配置

设备树文档:
https://elixir.bootlin.com/linux/v6.8-rc5/source/Documentation/devicetree/bindings/display/dsi-controller.yaml
https://elixir.bootlin.com/linux/v6.8-rc5/source/Documentation/devicetree/bindings/display/panel/display-timings.yaml
https://elixir.bootlin.com/linux/v6.8-rc5/source/Documentation/devicetree/bindings/display/panel/panel-timing.yaml

https://blog.youkuaiyun.com/lonely_fireworks/article/details/129362860
Android画面显示流程分析(1)–LCD时序

https://cloud.tencent.com/developer/article/1867373
Linux MIPI DSI LCD设备驱动开发调试细节学习笔记(一)

https://blog.youkuaiyun.com/qq_37858386/article/details/123705548
2022-03-24 RK3566 MIPI屏 调试记录,panel-init-sequence 命令格式介绍

Rockchip_Developer_Guide_DRM_Display_Driver_CN.pdf
Rockchip_Developer_Guide_MIPI_DSI2_CN.pdf
在rockchip rk3588s android 12的源代码的RKDocs目录下有相关pdf。

驱动点屏:
1)屏幕pin引脚定义
2)panel-init-sequence初始化code
如果开启了DSC,(Display Stream Compression)需要配置的slice-width和slic-height大小
和在屏幕初始化code里面配置 pps table,(否则, kernel启动不起来,报Oops: 96000005 PREEMPT SMP)
MIPI_DSI_PICTURE_PARAMETER_SET = 0xa,
pps:PICTURE_PARAMETER_SET
3)屏幕上电时序
4)display timing

概要:clock-frequency和rockchip,lane-rate计算方法:
clock-frequency = (hback-porch + hactive + hfront-porch + hsync-len) * (vback-porch + vactive + vfront-porch + vsync-len) * freq

rockchip,lane-rate = (hback-porch + hactive + hfront-porch + hsync-len) * (vback-porch + vactive + vfront-porch + vsync-len) * freq * 3 * 8 * 10 / dsi,lanes / 9 / (DSC_EN ? 3 : 1) / 1000 Kbps


clock-frequency = (hback-porch + hactive + hfront-porch + hsync-len) * (vback-porch + vactive + vfront-porch + vsync-len) * freq
rockchip,lane-rate = (hback-porch + hactive + hfront-porch + hsync-len) * (vback-porch + vactive + vfront-porch + vsync-len) * freq * 3 * 8 * 10 / dsi,lanes / 9 / (DSC_EN ? 3 : 1)  / 1000  Kbps

显示接口有:HDMI,eDP/DP,MIPI DSI,RGB、BT1120/656,LVDS等等
在android 设备上用的比较多的是MIPI DSI。

不同的显示接口点屏,需要参考相应设备树文档进行配置。
下面以mipi dsi接口连接lcd点屏进行举例。

panel-timing.yaml内容:

在这里插入图片描述

hback-porch (HBP):行信号左边沿无效信号时间范围
hfront-porch (HFP): 行信号右边沿无效信号时间范围
hsync-len (HPW): 行信号电子枪回扫时间 即 水平同步时间 Hsyc
vback-porch(VBP) :帧信号上边沿无效信号时间范围
vfront-porch(VFP):帧信号下边沿无效信号时间范围
vsync-len(VPW):帧信号电子枪回扫时间 即垂直同步时间 Vsync
hactive(HVD):有效像素信号纵向分辨率
vactive(VVD):有效像素信号横向分辨率

如下LCD时序图参考文档:https://blog.youkuaiyun.com/lonely_fireworks/article/details/129362860 LCD时序
在这里插入图片描述

1,计算clock-frequency方法:
htotal: (一行数据)hsync水平同步信号需要的总的像素时钟周期个数
vtotal: (一列数据)vsync垂直同步s信号需要的总的像素时钟周期个数
hsync-len: hsync水平同步信号的低电平(非有效电平)持续的时间,即需要的像素时钟周期个数

clock-frequency: panel clock in Hz

htotal = (hback-porch + hactive + hfront-porch + hsync-len)
vtotal = (vback-porch + vactive + vfront-porch + vsync-len)

clock-frequency = htotal * vtotal * 刷新率
clock-frequency = (hback-porch + hactive + hfront-porch + hsync-len) * (vback-porch + vactive + vfront-porch + vsync-len) * freq

2,D-PHY下计算rockchip,lane-rate方法:
rockchip,lane-rate = htotal * vtotal * 刷新率 * 3(RGB) * 8(bit位) / dsi,lanes(lane数)/ 0.9
或者:
rockchip,lane-rate = htotal * vtotal * 刷新率 * 3(RGB) * 8(bit位) * 10 / dsi,lanes(lane数)/ 9

3(RGB):是每一个 pixel 有 RGB 3 个分量;
0.9:是考虑 mipi 时序的传输效率;

如果开启了DSC(Display Stream Compression),使能DSC后,链路带宽可以降到原始带宽数据的三分之一或二分之一。
DSC使能后rockchip,lane-rate需要除以3或2,一般用3,计算方法:
rockchip,lane-rate = htotal * vtotal * 刷新率 * 3(RGB) * 8(bit位) * 10 / dsi,lanes(lane数)/ 9 / 3

总结:
rockchip,lane-rate 单位可以是Kbps/Mbps

rockchip,lane-rate = htotal * vtotal * freq * 3 * 8 * 10 / dsi,lanes(lane数)/ 9 / (DSC_EN ? 3 : 1) bps
最终在除以1000或1024把 bps转为Kbps:
rockchip,lane-rate = htotal * vtotal * freq * 3 * 8 * 10 / dsi,lanes / 9 / (DSC_EN ? 3 : 1) / 1000 Kbps

rockchip,lane-rate = (hback-porch + hactive + hfront-porch + hsync-len) * (vback-porch + vactive + vfront-porch + vsync-len) * freq * 3 * 8 * 10 / dsi,lanes / 9 / (DSC_EN ? 3 : 1) / 1000 Kbps

例子:
clock-frequency = <57153600>; // 计算:默认andoid手机屏幕fps = 60, (5 + 5 + 720 + 5) * (2 + 1 + 1280 + 13) * 60 = (735 * 1296) * 60 = 57153600

例子:
clock-frequency = <57153600>;  // 计算:默认andoid手机屏幕fps = 60,  (5 + 5 + 720 + 5) * (2 + 1 + 1280 + 13) * 60 = (735 * 1296) * 60 = 57153600
examples:
  - |
    dsi {
   
   
        #address-cells = <1>;
        #size-cells = <0>;

        panel@0 {
   
   
            compatible = "samsung,s6e8aa0";
            reg = 
07-13
RK3588 是 Rockchip 推出的一款高性能应用处理器,适用于多种复杂的应用场景,包括但不限于多媒体处理、嵌载式系统开发等。针对 RK3588 的开发指南和驱动支持,可以从以下几个方面进行探讨: ### 开发指南 对于 RK3588 的开发,官方提供了详细的开发指南,涵盖了从硬件设计到软件配置的各个方面。例如,在 DP (DisplayPort) 模块的软件配置及调试方法上,文档详细描述了如何利用 DisplayPort 1.4 特性,包括 Main Link 的 1/2/4 lanes 配置、1Mbps AUX 通道的支持、以及高达 8.1/5.4/2.7/1.62 Gbps/lane 的传输速率[^1]。 ### 驱动支持 RK3588 支持广泛的外设接口,因此其驱动支持也相当广泛。以 AD9833 DDS 芯片为例,开发者可以找到或编写适用于 ARM Linux 平台的内核驱动,实现对 AD9833 的控制,包括切换波形类型(方波、三角波、正弦波)、设置频率字等功能[^2]。此外,对于 SATA 接口的支持也非常关键,通过正确的设备树配置,可以确保 SATA 接口正常工作,如启用 sata1 接口所需的设备树配置[^3]。 ### 使用教程 关于 RK3588 的使用教程,通常会涉及到具体的开发环境搭建、编译流程、烧录方法等内容。虽然这里没有直接提供这些信息,但根据 RK3588 的特性和常见的 ARM 架构处理器的使用经验,可以推测出基本步骤包括安装必要的开发工具链、获取并配置 SDK、编写或修改设备树以适应特定的硬件需求、编译内核和用户空间程序、以及最终将固件烧录到目标设备中。 ### 示例代码 为了更好地理解和应用 RK3588 的某些特性,下面提供了一个简单的 Python 脚本示例,用于演示如何与 AD9833 进行通信,假设已经正确配置好了 SPI 接口: ```python import spidev spi = spidev.SpiDev() spi.open(0, 0) # 假设使用的是 SPI0.0 spi.max_speed_hz = 1000000 # 设置 SPI 速度为 1MHz def write_to_ad9833(data): """ 向 AD9833 写入数据 :param data: 要写入的数据列表 """ spi.xfer2(data) # 示例:发送一个频率设置命令 frequency_word = [0x12, 0x34, 0x56, 0x78] # 假定的频率字节 write_to_ad9833(frequency_word) ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值