HMI 智能屏方案

介绍

Ameba 以「一块屏,打开多维交互」为理念,推出全场景 HMI 智能屏解决方案,包括 RTL8730E 等旗舰级 HMI SoC 智能屏家族。这些方案赋能厂商打造直观高效的人机交互体验,满足跨行业多样化智能显示需求。无论是智能家居中控的“一屏控全家”,还是冰箱、烤箱、洗衣机的彩屏升级,亦或医疗监护仪、工业 PLC、儿童早教机的交互革新,Ameba 都能提供从芯片、系统到云端的全栈方案,帮助品牌方实现极具竞争力的“用户友好型”智能终端。

核心特性

  • 多接口兼容:支持 MIPI-DSI、 RGB 和 SPI 显示接口

  • 高级图像处理:内置高性能图形引擎,实现高性能数据可视化

  • 沉浸式显示:支持高清数据可视化呈现

  • 多模态交互:结合触摸屏、物理旋钮和通过麦克风阵列实现的 AI 语音控制

  • 互通互联:集成多协议网关,实现智能设备互操作性

应用场景

  • 智能家居控制面板

  • 家电显示终端 (包括各类大家电和小家电)

  • 医疗健康设备

  • 工业控制终端

  • 教育电子设备

显示屏接口

MIPI-DSI

MIPI-DSI 是高分辨率和高刷新率的 LCD 上常见的高速串行接口。RTL8730E 在硬件接口和图形处理方面具备多项先进特性,支持 MIPI-DSI 接口,能够输出 24 位 RGB888 颜色格式的图像。此外,RTL8730E 集成了 LCD 控制器,可以配置多达 7 种 RGB 格式,最多支持 3 个图层混叠,为图像处理提供卓越性能。同时,RTL8730E 配备了 552 KB 的片上 SRAM,外部存储器可以配备 PSRAM 或者 DDR,这些特性共同确保了高分辨率屏幕的流畅渲染和快速响应。

SPI

SPI 是小型屏幕常用的驱动接口。

图形加速引擎

Todo

软件架构

Ameba 显示架构采用 LVGL 作为 GUI 引擎。LVGL 是目前最流行的免费开源嵌入式图形库,可为各类 MCU、 MPU 和显示类型创建精美用户界面。该架构不仅提供 LVGL 的参考移植实现和多种驱动方案,还集成 Wi-Fi /蓝牙功能、智能语音算法及常用网络协议栈,广泛应用于消费电子和家电领域

../../_images/display_architecture1.svg
应用程序层

应用层作为用户交互入口,包含用户预定义各种应用场景的 app。 例如,智能家居面板产品包含 Launcher,Settings 等应用。Launcher 应用主要负责主屏幕界面和应用启动器。

框架层

由 LVGL 图形库和 lv_drivers 驱动适配层构成,LVGL 提供 GUI 开发基础框架,lv_drivers 为特定显示板提供驱动适配,支持显示控制器与触摸面板

驱动层

包含了各类不同 LCD 面板,触摸等驱动的参考实现。

底层操作层

该层包含了 LCD 控制器,MIPI-DSI 控制器,以及图形加速引擎 PPE 等底层硬件操作接口。

具体实现

Ameba 智能显示解决方案采用 LVGL 作为核心 GUI 引擎。LVGL(轻量级多功能图形库)是一款开源的嵌入式图形库,专为资源受限设备创建现代化用户界面而设计。 当前 SDK 支持的版本是 LVGL v9.1。

更多 LVGL 细节请参考:

LVGL v9.1

配置

在 SDK 中可通过以下步骤启用 LVGL:

  1. 把以下命令加入到 <sdk>/sources/yocto/meta-realtek/meta-sdk/recipes-core/images/ameba-image-core.bb 的最后

IMAGE_INSTALL += "lvgl"

LVGL 的编译文件 <sdk>/sources/yocto/meta-openembedded/meta-oe/recipes-graphics/lvgl/lvgl_9.1.0.bb

  1. 使用以下命令单独编译 LVGL

bitbake lvgl

使用方法

使用 LVGL 核心库需按顺序初始化组件:

  • 调用 lv_init()

  • 配置显示缓冲区。

  • 初始化显示器,实现刷新回调,注册显示器。

  • 通过 LVGL 库绘制 UI 应用。

  • 周期性调用 lv_timer_handler() 处理任务。

示例代码:

int your_app(void) {
   lv_init();

   // 配置显示缓冲区(假设屏幕分辨率为 480x800)
   static lv_disp_draw_buf_t draw_buf;
   static lv_color_t buf[480 * 800 / 10];
   lv_disp_draw_buf_init(&draw_buf, buf, NULL, 480 * 800 / 10);

   // 显示初始化
   static lv_disp_drv_t disp_drv;
   lv_disp_drv_init(&disp_drv);
   disp_drv.draw_buf = &draw_buf;
   disp_drv.flush_cb = my_disp_flush_cb; // 实现此回调
   disp_drv.hor_res = 480;
   disp_drv.ver_res = 800;
   lv_disp_t *disp = lv_disp_drv_register(&disp_drv);

   /* 其他 ... */
   /* ...... */
   while(1) {
      lv_task_handler();
      usleep(1000);
   }
}

外部库

Libdrm 是 Linux 内核中与 DRM 交互的标准库。详见

内核

Kernel 层是整个软件架构的基础,直接与硬件交互,为上层软件提供抽象和服务。具体如下所示。

设备文件

对应硬件接口

应用

/dev/dri/card0

DRM设备

显示屏初始化、像素格式设置、数据传输

/dev/Input/event

输入设备

处理各种输入设备事件,提供读取输入事件的接口