Realtek HoneyGUI (2)

一、概述

        Realtek HoneyGUI 是瑞昱(Realtek)专门为嵌入式系统(如 RTL8762D/RTL8772/RTL8773 等系列芯片)设计的一套轻量级图形框架。它的 LCD 驱动架构采用典型的分层设计,目的是为了解耦图形算法与具体的屏幕硬件

二、HoneyGUI 驱动框架层级

   HoneyGUI 的 LCD 驱动通常分为三个层次:

   (1) 应用接口层 (Framework/App Layer):

负责触发刷新(如上个代码中的 rtl_gui_lcd_update())。

管理 FrameBuffer(帧缓冲)和区域更新逻辑。

   (2) LCD 控制器驱动层 (LCDC Driver - 内核层):

负责配置芯片内部的 LCD 控制器(SPI、QSPI、I8080、RGB 或 DSI 接口)。

负责 DMA 搬运数据,实现“内存 -> LCD”的高速传输,不占用 CPU。

    (3) LCD 颗粒/IC 驱动层 (LCD Panel/IC Driver - 设备层):

针对具体的屏幕驱动芯片(如 ST7789, SH8601, COPE08 等)。

包含初始化序列(Init Code)、设置显示窗口、睡眠/唤醒等指令。

三、核心工作流程

HoneyGUI 刷屏的完整路径如下:

        GUI 任务处理消息 -> 获取 Flash 中的图片资源 -> 渲染到内存 Buffer -> 调用底层的更新接口 -> DMA 发送数据到屏幕。

A. Tearing Effect (TE) 信号处理

在穿戴设备中,为了防止画面撕裂,驱动框架高度依赖 TE 信号。

硬件触发:LCD IC 发出一个高电平/低电平脉冲,告诉 MCU:现在屏幕正处于“垂直空白区”,可以发数据了。

软件同步:HoneyGUI 接收到 TE 中断后,才启动 DMA 传输。这样可以确保显示的画面完整且无闪烁。

B. 刷新机制:局部刷新 (Partial Update)

HoneyGUI 不会每次都刷新整张屏幕。

它会计算出“脏区域”(Dirty Region),即发生变化的矩形区域。

驱动调用 lcd_set_window(x, y, w, h) 命令给 LCD IC。

仅将该矩形区域的像素通过 DMA 发送出去。

四、 关键代码组件

在 Realtek 的工程中,你通常会看到以下核心文件:

(1) rtl_lcdc_edpi.c / rtl_lcdc_dbic.c

这是 SOC 内部控制器驱动。

rtl_lcdc_init(): 初始化控制器频率、极性、接口类型(4线SPI或QSPI)。

rtl_lcdc_transfer_data(): 启动 DMA 搬运。

(2) sh8601.c (示例)

这是 具体的屏幕 IC 驱动。包含一个结构体,定义了屏幕的规格:

code

C

/* 典型的 LCD 驱动结构体 */

const LCD_DRV_T sh8601_drv = {

    .init       = sh8601_init,           // 屏幕初始化序列

    .set_window = sh8601_set_window,    // 设置坐标范围

    .enter_sleep = sh8601_enter_sleep,  // 进睡眠

    .exit_sleep  = sh8601_exit_sleep,   // 唤醒

};

(3) gui_lcd_callback.c

这是 GUI 与驱动的粘合层(你代码中包含过这个头文件)。它实现了 HoneyGUI 需要的回调函数:

user_lcd_update_cb(): 当 HoneyGUI 完成内存绘图后,会调用这个函数,由它去触发底层的 LCDC 发送。

五、 HoneyGUI 驱动框架的特点

资源管理与外部 Flash:

HoneyGUI 驱动框架与存储驱动紧密结合。因为穿戴设备内存小,UI 图片通常存在外部 Flash。驱动框架支持 PSRAM 缓存 或 直接从 Flash 读取并推送到 LCD 的技术。

多缓冲机制 (Buffering):

单缓冲 (Single Buffer): 配合 TE 信号,节省内存。

双缓冲 (Double Buffer): 一个在渲染,一个在 DMA 传输,实现最高帧率。

压缩格式支持:

Realtek 的驱动框架通常支持硬件解压(如 RLE 压缩)。DMA 在搬运图片的同时进行解压,极大地减少了对 Flash 带宽的占用。

六、 如何在该框架下添加一个新屏幕

如果你要更换一个新的 LCD 屏幕,步骤通常如下:

修改引脚配置 (Pad Config):在 board.c 中配置 SPI/QSPI 引脚和复位引脚。

编写 IC 驱动:新建一个 .c 文件,填入厂家提供的初始化序列(Init Code)。

注册驱动:在 LCD 控制器层通过 ID 读取或宏定义,将你的新 .c 挂载到驱动链表里。

配置分辨率和色深:在 rtl_gui_config.h 中设置屏幕宽度、高度(如 454x454)和颜色格式(RGB565 或 ARGB8888)。

总结

        HoneyGUI 的 LCD 驱动框架是一个高度自动化的体系。开发者只需关注屏幕初始化和窗口设置,剩下的数据搬运、时序同步和渲染调度都由框架内部的 LCDC 控制器和 GUI Task 自动完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值