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

RK 平台显示驱动对多种像素格式和总线格式提供了完善支持,覆盖从低带宽到高画质的各类场景,主要包括以下两类:
像素格式决定了每个像素的颜色深度,RK 驱动支持的主流格式如下:
•16bpp:RGB565(每个像素占 2 字节,红 5 位、绿 6 位、蓝 5 位),适用于低功耗场景。
•24bpp:RGB888(每个像素占 3 字节,红、绿、蓝各 8 位),提供基础高清色彩。
•32bpp:ARGB8888(每个像素占 4 字节,包含 8 位透明度通道),支持半透明叠加,常用于 UI 图层显示。
代码中通过display_logo函数明确区分了这三种格式的处理逻辑,例如:
switch (logo->bpp) {case 16:crtc_state->format = ROCKCHIP_FMT_RGB565;break;case 24:crtc_state->format = ROCKCHIP_FMT_RGB888;break;case 32:crtc_state->format = ROCKCHIP_FMT_ARGB8888;break;}
总线格式定义了像素数据在硬件接口上的传输方式,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.设备树(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)。
当初始化完成后,驱动进入显示输出阶段,核心流程如下:
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)框架设计,通过多个核心模块协同工作,关键模块如下:
•display_state:全局状态结构体,包含 CRTC 状态(crtc_state)、连接器状态(conn_state)、图像信息(logo)等,是驱动流程的核心载体。
•rockchip_crtc:CRTC(显示控制器)结构体,封装了硬件寄存器操作函数(crtc_funcs),负责时序生成和数据传输。
•rockchip_connector:连接器结构体,管理物理接口(如 HDMI、MIPI),包含 EDID 读取、热插拔检测等功能。
•rockchip_panel:面板驱动结构体,适配具体的 LCD/OLED 面板,提供初始化、时序配置接口。
•CRTC 与连接器:CRTC 生成的像素数据通过连接器传输到显示设备,display_state作为中间载体传递时序和格式信息。
•PHY 与接口:PHY(如 HDMI PHY)负责信号电平转换,连接器通过connector_phy_init绑定 PHY 驱动,确保高速信号传输质量。
•内存管理:显示缓存通过get_display_buffer从预分配的内存池(MEMORY_POOL_SIZE)中分配,避免动态内存碎片。

RK 平台显示驱动通过灵活的格式支持、模块化的流程设计和完善的硬件适配,实现了对多类型显示设备的高效驱动。其核心优势在于:
1.兼容性:支持 RGB、MIPI、HDMI 等多接口,覆盖从低功耗到高清场景。
2.可扩展性:通过设备树和模块化设计,便于适配新面板和硬件平台。
3.性能优化:通过缓存管理、时序优化确保图像显示流畅。
对于开发者而言,理解驱动的格式支持和流程设计,有助于快速定位显示问题(如分辨率异常、花屏),并根据需求定制显示功能(如多图层叠加、动态分辨率切换)。
审核编辑 黄宇
全部0条评论
快来发表一下你的评论吧 !