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

一、RK显示驱动支持的显示格式
RK平台显示驱动对多种像素格式和总线格式提供了完善支持,覆盖从低带宽到高画质的各类场景,主要包括以下两类:
1.像素格式(BPP)
像素格式决定了每个像素的颜色深度,RK驱动支持的主流格式如下:
•16bpp:RGB565(每个像素占2字节,红5位、绿6位、蓝5位),适用于低功耗场景。
•24bpp:RGB888(每个像素占3字节,红、绿、蓝各8位),提供基础高清色彩。
•32bpp:ARGB8888(每个像素占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_1X16(16位单通道)、RGB888_1X24(24位单通道)。
•多通道并行:如RGB888_3X8(3通道各8位)、RGB888_DUMMY_4X8(4通道含无效位)。
•差分信号:支持MIPI-DSI、LVDS等高速接口的总线格式(通过rockchip_get_output_if_name函数可见对MIPI0/1、LVDS0/1的支持)。
这些格式的适配确保了驱动能与LCD、HDMI、eDP等不同类型的显示设备通信。
二、显示驱动的核心处理流程
RK显示驱动的工作流程可分为初始化和显示输出两大阶段,每个阶段包含多个关键步骤,以下是详细解析:
阶段1:驱动初始化(从设备启动到准备显示)
初始化阶段的目标是完成硬件资源配置、时序参数获取和显示链路准备,流程如下:
1.设备树(DTS)解析
驱动通过display_get_timing_from_dts函数从设备树中读取显示时序参数(如分辨率、刷新率、同步信号极性),例如:
◦水平参数:hactive(有效宽度)、hfront_porch(前廊)、hsync_len(同步长度)。
◦垂直参数:vactive(有效高度)、vback_porch(后廊)、vsync_len(同步长度)。
若设备树未定义,则使用默认时序(如720p60)。
1.PHY与连接器初始化
◦对于HDMI、TVE等接口,通过check_public_use_phy识别公共PHY类型(如INNO_HDMI_PHY),并调用get_public_phy完成PHY初始化。
◦连接器(connector)通过rockchip_connector_pre_init和rockchip_connector_init完成硬件引脚、信号极性配置。
1.显示模式验证与修正
◦display_mode_valid检查当前模式是否符合CRTC(显示控制器)和连接器的硬件能力(如最大分辨率、帧率)。
◦display_mode_fixup对模式进行微调(如调整时序以匹配硬件限制)。
1.内存缓冲区分配
通过init_display_buffer和get_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显示驱动基于DRM(Direct Rendering Manager)框架设计,通过多个核心模块协同工作,关键模块如下:
1.核心数据结构
•display_state:全局状态结构体,包含CRTC状态(crtc_state)、连接器状态(conn_state)、图像信息(logo)等,是驱动流程的核心载体。
•rockchip_crtc:CRTC(显示控制器)结构体,封装了硬件寄存器操作函数(crtc_funcs),负责时序生成和数据传输。
•rockchip_connector:连接器结构体,管理物理接口(如HDMI、MIPI),包含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显示驱动工作流程

四、总结
RK平台显示驱动通过灵活的格式支持、模块化的流程设计和完善的硬件适配,实现了对多类型显示设备的高效驱动。其核心优势在于:
1.兼容性:支持RGB、MIPI、HDMI等多接口,覆盖从低功耗到高清场景。
2.可扩展性:通过设备树和模块化设计,便于适配新面板和硬件平台。
3.性能优化:通过缓存管理、时序优化确保图像显示流畅。
对于开发者而言,理解驱动的格式支持和流程设计,有助于快速定位显示问题(如分辨率异常、花屏),并根据需求定制显示功能(如多图层叠加、动态分辨率切换)。
审核编辑 黄宇
-
显示驱动
+关注
关注
1文章
76浏览量
15486
发布评论请先 登录
基于米尔RK3576的环视实时性方案解析
RK3576驱动高端显控系统升级:多屏拼控与AI视觉融合解决方案
VVIC 平台商品详情接口高效调用方案:从签名验证到数据解析全流程
CS创世SD NAND在北京君正平台和瑞芯微RK平台的应用
360环视技术推荐的硬件平台:支持多摄像头与三屏异显的理想选择
RK3128 Android 7.1 进入深度休眠流程分析
异形拼接处理器支持哪些显示技术?
基于RK3568 + FPGA国产平台的多通道AD实时采集显示方案分享
RK616多媒体处理芯片特性解析
RK618多媒体处理芯片特性概览
RK3288处理器详细解析
RK3562J正式支持NPU,性价比再提升!

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