在嵌入式領域,顯示驅動是連接硬件與視覺體驗的核心橋梁。瑞芯微(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文章
79瀏覽量
15552
發布評論請先 登錄
深入解析U-Boot image.c:RK平臺鏡像處理核心邏輯
RK817/RK809音頻Codec停止播放雜音問題:內核驅動修復與技術解析
RK806中斷處理流程深度解析:從架構到調試實戰
RK平臺UART開發!從驅動配置到測試全流程
RK平臺Linux IOMMU開發:從原理到實戰
深入解析RK平臺編譯核心:build.sh的知識點、調試技巧與開發價值
YOLO5目標檢測方案-基于米爾RK3576開發板
RK3506 MIPI轉HDMI顯示開發實戰:從硬件到驅動全解析
深入解析?RK?平臺顯示驅動:格式支持、處理流程與實現原理
評論