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 /蓝牙功能、智能语音算法及常用网络协议栈,广泛应用于消费电子和家电领域
- 应用程序层
应用层作为用户交互入口,包含用户预定义各种应用场景的 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 细节请参考:
配置
在 SDK 中可通过以下步骤启用 LVGL:
把以下命令加入到
<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
使用以下命令单独编译 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 |
输入设备 |
处理各种输入设备事件,提供读取输入事件的接口 |