显示
概述
Ameba 显示架构采用 LVGL 作为 GUI 引擎。LVGL 是目前最流行的免费开源嵌入式图形库,可为任何 MCU、MPU 和显示类型创建精美用户界面。该架构不仅提供 LVGL 的参考移植方案和多种参考驱动程序,还提供了强大的 Wi-Fi/Bluetooth 通信能力,内置智能语音算法模块,各种通用的网络协议帧等等,广泛应用于消费电子和家电领域。
核心组件
组件
显示(display)的核心功能组件主要有:
GUI 渲染: LVGL 提供丰富的 UI 组件(按钮、滑块、列表等)。
通信能力: 集成 Wi-Fi、Bluetooth、USB 等协议栈。
多媒体支持: 音频播放(Audio)、图像解码(JPEG/PNG)。
智能交互: 语音识别(AI Voice)、触摸控制(Touch Driver)。
应用场景
主要应用场景有:
消费电子(智能家居、可穿戴设备)。
工业 HMI(人机界面)。
物联网终端(网关、传感器节点)。
应用层
应用层的作用是用户交互入口,包含预定义应用场景。
模块名称 |
功能描述 |
---|---|
Launcher |
主屏幕界面,应用启动器。 |
Settings |
系统设置(显示、网络、声音等)。 |
Music |
音频播放器。 |
Speech |
语音助手交互界面。 |
LVGL 库
LVGL 引擎
LVGL (轻便而多功能的图形库)负责图形渲染、事件处理、动画效果。
实现
LVGL 在 SDK 中的实现如下所示。
模块 |
位置 |
---|---|
LVGL 8.3 |
{sdk}/component/ui/LVGL/lvgl-8.3/lvgl |
LVGL 8.3 driver |
{sdk}/component/ui/LVGL/lvgl-8.3/lv_drivers |
LVGL 9.2 |
{sdk}/component/ui/LVGL/lvgl-9.2/lvgl |
LVGL 9.2 driver |
{sdk}/component/ui/LVGL/lvgl-9.2/lv_drivers |
配置
在我们的 SDK 中,要配置打开 LVGL 选项。
在
打开 Enable LVGL Graphics Library 。
目前 SDK 支持的 LVGL 版本,可以在编译时进行选择。
在
中根据需要选择版本。
驱动接口
要使用 LVGL 核心库,必须先对其进行初始化并配置所需组件。初始化的顺序如下所示。
调用
lv_init()
。使用
lv_hal_init(int32_t w, int32_t h)()
来初始化显示驱动与输入驱动。使用 LVGL 核心库绘制你的用户界面应用。
每隔若干毫秒调用
lv_timer_handler()
来处理 LVGL 相关任务。
示例如下。
int your_app(void) {
lv_init();
lv_hal_init(480, 800);
/* Something else ... */
/* ...... */
while(1) {
lv_task_handler();
usleep(1000);
}
}
外围组件
框架中提供的各种外围组件的说明如下。
组件名称 |
依赖库 |
功能 |
---|---|---|
libjpeg/libpng |
图像解码库 |
jpeg和png格式的图像加载 |
zlib |
压缩库 |
文件压缩与解压 |
Wi-Fi/LwIP |
网络协议栈 |
无线网络连接与通信 |
Bluetooth |
蓝牙协议栈 |
近距离通信与数据传输 |
Audio |
音频驱动 |
播放控制、音量调节 |
VFS |
文件系统抽象层 |
支持多种存储介质 |
USB |
USB 协议 |
外设连接 |
驱动层
功能
驱动层主要负责硬件抽象与控制,具体如下。
驱动类型 |
对应硬件 |
接口功能 |
---|---|---|
Touch Driver |
电容、电阻触摸屏 |
触摸坐标采集、手势识别 |
Panel Driver |
LCD/OLED显示屏 |
显示模式配置、背光控制 |
Key Driver |
按键 |
按键状态检测、中断处理 |
实现
驱动对应的实现如下。
驱动 |
位置 |
---|---|
display for v8.3 |
{sdk}/component/ui/LVGL/lvgl-8.3/lv_drivers/amebadplus/src/display.c |
display for v9.2 |
{sdk}/component/ui/LVGL/lvgl-9.2/lv_drivers/amebadplus/src/display.c |
驱动 |
位置 |
---|---|
display for v8.3 |
{sdk}/component/ui/LVGL/lvgl-8.3/lv_drivers/amebalite/src/display.c |
display for v9.2 |
{sdk}/component/ui/LVGL/lvgl-9.2/lv_drivers/amebalite/src/display.c |
驱动 |
位置 |
---|---|
display for v8.3 |
{sdk}/component/ui/LVGL/lvgl-8.3/lv_drivers/amebalite/src/display.c |
display for v9.2 |
{sdk}/component/ui/LVGL/lvgl-9.2/lv_drivers/amebalite/src/display.c |
驱动 |
位置 |
---|---|
display for v8.3 |
{sdk}/component/ui/LVGL/lvgl-8.3/lv_drivers/amebalite/src/display.c |
display for v9.2 |
{sdk}/component/ui/LVGL/lvgl-9.2/lv_drivers/amebalite/src/display.c |
驱动 |
位置 |
---|---|
display for v8.3 |
{sdk}/component/ui/LVGL/lvgl-8.3/lv_drivers/amebasmart/src/display.c |
touch for v8.3 |
{sdk}/component/ui/LVGL/lvgl-8.3/lv_drivers/amebasmart/src/touch.c |
display for v9.2 |
{sdk}/component/ui/LVGL/lvgl-9.2/lv_drivers/amebasmart/src/display.c |
touch for v9.2 |
{sdk}/component/ui/LVGL/lvgl-9.2/lv_drivers/amebasmart/src/touch.c |
硬件接口层
硬件接口层主要负责底层硬件操作库,具体如下所示。
库名称 |
对应硬件接口 |
应用 |
---|---|---|
ameba_lcd |
LCD控制器 |
显示屏初始化、像素格式设置 |
ameba_mipi |
MIPI接口协议栈 |
高速数据传输 |
ameba_spi |
SPI总线 |
外设通信 |
ameba_i2c |
I2C总线 |
低速设备控制 |
ameba_ppe |
硬件加速引擎 |
图形渲染加速、DMA传输 |