0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

深入解析 RK 平台显示驱动:格式支持、处理流程与实现原理

jf_44130326 来源:Linux1024 作者:Linux1024 2025-12-02 07:10 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

嵌入式领域,显示驱动是连接硬件与视觉体验的核心桥梁。瑞芯微Rockchip)平台的显示驱动以其兼容性强、适配场景广著称,广泛应用于智能终端、物联网设备等领域。本文将从支持的显示格式、驱动处理流程、核心实现原理三个维度,带您深入了解RK平台显示驱动的工作机制。

wKgZPGkuIXWAeuzcAACl0RBSuDk715.png

一、RK显示驱动支持的显示格式

RK平台显示驱动对多种像素格式和总线格式提供了完善支持,覆盖从低带宽到高画质的各类场景,主要包括以下两类:

1.像素格式(BPP

像素格式决定了每个像素的颜色深度,RK驱动支持的主流格式如下:

16bppRGB565(每个像素占2字节,红5位、绿6位、蓝5位),适用于低功耗场景。

24bppRGB888(每个像素占3字节,红、绿、蓝各8位),提供基础高清色彩。

32bppARGB8888(每个像素占4字节,包含8位透明度通道),支持半透明叠加,常用于UI图层显示。

代码中通过display_logo函数明确区分了这三种格式的处理逻辑,例如:

switch (logo->bpp) {case16:  crtc_state->format= ROCKCHIP_FMT_RGB565; break;case24:  crtc_state->format= ROCKCHIP_FMT_RGB888; break;case32:  crtc_state->format= ROCKCHIP_FMT_ARGB8888; break;}

2.媒体总线格式

总线格式定义了像素数据在硬件接口上的传输方式,RK驱动通过rockchip_drm_get_cycles_per_pixel函数支持多种总线格式,核心包括:

单通道并行:如RGB565_1X1616位单通道)、RGB888_1X2424位单通道)。

多通道并行:如RGB888_3X83通道各8位)、RGB888_DUMMY_4X84通道含无效位)。

差分信号:支持MIPI-DSILVDS等高速接口的总线格式(通过rockchip_get_output_if_name函数可见对MIPI0/1LVDS0/1的支持)。

这些格式的适配确保了驱动能与LCDHDMIeDP等不同类型的显示设备通信

二、显示驱动的核心处理流程

RK显示驱动的工作流程可分为初始化显示输出两大阶段,每个阶段包含多个关键步骤,以下是详细解析:

阶段1:驱动初始化(从设备启动到准备显示)

初始化阶段的目标是完成硬件资源配置、时序参数获取和显示链路准备,流程如下:

1.设备树(DTS)解析

驱动通过display_get_timing_from_dts函数从设备树中读取显示时序参数(如分辨率、刷新率、同步信号极性),例如:

水平参数:hactive(有效宽度)、hfront_porch(前廊)、hsync_len(同步长度)。

垂直参数:vactive(有效高度)、vback_porch(后廊)、vsync_len(同步长度)。

若设备树未定义,则使用默认时序(如720p60)。

1.PHY连接器初始化

对于HDMITVE等接口,通过check_public_use_phy识别公共PHY类型(如INNO_HDMI_PHY),并调用get_public_phy完成PHY初始化。

连接器(connector)通过rockchip_connector_pre_initrockchip_connector_init完成硬件引脚、信号极性配置。

1.显示模式验证与修正

display_mode_valid检查当前模式是否符合CRTC(显示控制器)和连接器的硬件能力(如最大分辨率、帧率)。

display_mode_fixup对模式进行微调(如调整时序以匹配硬件限制)。

1.内存缓冲区分配

通过init_display_bufferget_display_buffer分配显示缓存(如帧缓冲区、LUT查找表),确保内存地址对齐(align_size = PAGE_SIZE)。

阶段2:显示输出(从图像加载到屏幕显示)

当初始化完成后,驱动进入显示输出阶段,核心流程如下:

1.图像加载与处理

加载BMP图像:通过load_bmp_logo读取图像文件,支持从资源分区加载,并缓存到logo_cache_list避免重复加载。

格式转换:若图像格式不直接支持(如低于16bpp),则通过bmpdecoder转换为16/32bpp

旋转处理:rockchip_logo_rotate支持90°/180°/270°旋转,通过内存拷贝重排像素数据。

1.平面(Plane)配置

display_set_plane配置CRTC的显示平面,包括:

源区域(src_rect):图像的显示范围(如部分缩放)。

目标区域(crtc_rect):屏幕上的显示位置(如居中、全屏)。

数据地址:帧缓冲区的物理地址(dma_addr)。

1.显示使能

display_enable触发CRTC和连接器的使能:

CRTC:通过crtc_funcs->enable启动时序发生器,输出同步信号。

连接器/面板:通过rockchip_connector_enable打开背光、初始化面板。

最终图像通过MIPI/LVDS/HDMI等接口传输到显示设备,完成显示。

三、显示驱动的实现原理:核心模块与交互

RK显示驱动基于DRMDirect Rendering Manager)框架设计,通过多个核心模块协同工作,关键模块如下:

1.核心数据结构

display_state:全局状态结构体,包含CRTC状态(crtc_state)、连接器状态(conn_state)、图像信息(logo)等,是驱动流程的核心载体。

rockchip_crtcCRTC(显示控制器)结构体,封装了硬件寄存器操作函数(crtc_funcs),负责时序生成和数据传输。

rockchip_connector:连接器结构体,管理物理接口(如HDMIMIPI),包含EDID读取、热插拔检测等功能。

rockchip_panel:面板驱动结构体,适配具体的LCD/OLED面板,提供初始化、时序配置接口。

2.模块交互逻辑

CRTC与连接器CRTC生成的像素数据通过连接器传输到显示设备,display_state作为中间载体传递时序和格式信息。

PHY与接口PHY(如HDMI PHY)负责信号电平转换,连接器通过connector_phy_init绑定PHY驱动,确保高速信号传输质量。

内存管理:显示缓存通过get_display_buffer从预分配的内存池(MEMORY_POOL_SIZE)中分配,避免动态内存碎片。

3.流程图:RK显示驱动工作流程

wKgZPGkuIXWAdprgAAJG38797c0976.png

四、总结

RK平台显示驱动通过灵活的格式支持、模块化的流程设计和完善的硬件适配,实现了对多类型显示设备的高效驱动。其核心优势在于:

1.兼容性:支持RGBMIPIHDMI等多接口,覆盖从低功耗到高清场景。

2.可扩展性:通过设备树和模块化设计,便于适配新面板和硬件平台。

3.性能优化:通过缓存管理、时序优化确保图像显示流畅。

对于开发者而言,理解驱动的格式支持和流程设计,有助于快速定位显示问题(如分辨率异常、花屏),并根据需求定制显示功能(如多图层叠加、动态分辨率切换)。


审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 显示驱动
    +关注

    关注

    1

    文章

    76

    浏览量

    15486
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    基于米尔RK3576的环视实时性方案解析

    、Mali-G52 GPU及高达6TOPS算力的NPU。本文旨在通过实际测试数据,从功能实现、实时性能与AI拓展潜力三大核心维度,为客户提供一份关于该平台在360环视应用中能力的真实参考。 二、系统流程
    发表于 11-28 16:57

    RK3576驱动高端显控系统升级:多屏拼控与AI视觉融合解决方案

    。 八路高清视频输入:支持 8 路 1080P 摄像头信号采集,轻松实现多画面拼接、AI 识别、视频分析等复合任务。 AI 与视频并行处理:NPU 与 GPU 协同工作,即便在多画面播放与 AI 推理
    发表于 11-21 17:51

    VVIC 平台商品详情接口高效调用方案:从签名验证到数据解析流程

    本文详解VVIC平台商品详情接口调用全流程,涵盖参数配置、签名生成、异常处理与数据解析,提供可复用的Python代码及避坑指南,助力开发者高效实现
    的头像 发表于 09-23 10:28 417次阅读

    CS创世SD NAND在北京君正平台和瑞芯微RK平台的应用

    介绍、对SD NAND进行读写操作的三大方式、SD的驱动框架介绍以及SD NAND启动,前三个板块没有瑞芯微和君正平台之分,只要是跑linux系统,差别不大,第四块以RK平台为例,第五
    发表于 08-22 17:01

    360环视技术推荐的硬件平台支持多摄像头与三屏异显的理想选择

    硬件平台选型360环视的落地并不简单。它不仅需要多个高清摄像头的数据输入,还需要稳定的图像处理能力、强大的AI推理能力,以及足够多的视频输出接口支持显示需求。很多开发者在选型时会遇到一
    发表于 07-30 17:32

    RK3128 Android 7.1 进入深度休眠流程分析

    RK3128 Android 7.1 进入深度休眠流程分析RK3128是瑞芯微电子推出的一款低功耗四核Cortex-A7处理器,运行Android 7.1系统时进入深度休眠(Deep
    发表于 07-22 10:45

    揭秘瑞芯微算力协处理器,RK3576/RK3588强大算力搭档

    瑞芯微算力协处理器-Gongga1(简称“贡嘎”),是瑞芯微针对旗舰芯片平台RK3576/RK3588等SoC平台配套的算力
    的头像 发表于 07-17 10:00 859次阅读
    揭秘瑞芯微算力协<b class='flag-5'>处理</b>器,<b class='flag-5'>RK</b>3576/<b class='flag-5'>RK</b>3588强大算力搭档

    异形拼接处理支持哪些显示技术?

    异形拼接处理器是专门用于实现异形拼接屏功能的设备,它支持多种显示技术,以满足不同场景下的展示需求。以下是对异形拼接处理器所
    的头像 发表于 04-01 09:48 558次阅读

    基于RK3568 + FPGA国产平台的多通道AD实时采集显示方案分享

    在工业控制与数据采集领域,高精度的AD采集和实时显示至关重要。今天,我们就来基于瑞芯微RK3568J+FPGA国产平台深入探讨以下,它是如何实现
    的头像 发表于 03-28 10:11 1238次阅读
    基于<b class='flag-5'>RK</b>3568 + FPGA国产<b class='flag-5'>平台</b>的多通道AD实时采集<b class='flag-5'>显示</b>方案分享

    RK616多媒体处理芯片特性解析

    体验。 在输入接口方面,RK616支持两个24位RGB输入,能够接收高质量的视频信号,确保图像处理的精准度和清晰度。这一特性使得RK616在图像处理
    的头像 发表于 02-11 17:32 1451次阅读

    RK618多媒体处理芯片特性概览

    的视频信号,满足用户对高清画质的需求。这一特性使得RK618在图像处理显示控制等领域具有广泛的应用前景。 在输出接口上,RK618同样表现出色。它配备了双LVDS输出,
    的头像 发表于 02-11 17:26 2000次阅读

    RK3288处理器详细解析

    一、核心特性概览 RK3288是一款集高性能与低功耗于一体的处理器,专为满足现代多媒体和嵌入式设备的需求而设计。其核心特性包括四核Cortex-A17 CPU、Mali-T764 GPU以及丰富
    的头像 发表于 02-10 17:16 4183次阅读

    RK3562J正式支持NPU,性价比再提升!

    RK3562J是瑞芯微最新推出的一款超高性价比工业处理器,四核Cortex-A53@1.8GHz + Cortex-M0@200MHz异构多核架构,并支持十路UART、两路CAN、两路网口、三种
    的头像 发表于 01-23 16:00 1210次阅读
    <b class='flag-5'>RK</b>3562J正式<b class='flag-5'>支持</b>NPU,性价比再提升!

    迅为RK3568开发板篇OpenHarmony实操HDF驱动控制LED-接口函数

    )。 流程:记录日志,表示驱动释放成功。 HdfLedDriverBind:绑定解析函数 参数:deviceObject(设备对象)。 流程:将 LED
    发表于 01-20 10:36

    RK3588与RK3576区别解析

    ,145G FLOPS;RK3588为Mali-G610 MP4,图形性能更强。 视频编解码:RK3576支持 8K@30fps 解码等;RK3588部分
    的头像 发表于 12-17 14:03 3455次阅读
    <b class='flag-5'>RK</b>3588与<b class='flag-5'>RK</b>3576区别<b class='flag-5'>解析</b>