KDocs 研发资料库
  • 手表穿戴技术应用文档入口汇总
  • JL707N穿戴客述问题FAQ
  • 彩屏仓 硬件开发指南 与 量产作业流程规范
  • 彩屏仓 AC98N和JL701烧录升级注意事项
  • JL707 硬件开发资料
  • JL707 手表硬件设计注意事项 总结
  • 穿戴生产烧录OTA和key文件添加使用说明
  • JL707N-入门到进阶开发指导文档
  • 彩屏仓982相关
  • 彩屏仓耳机介绍
  • 杰理701_707双屏demo介绍
  • 707电子吧唧开发资料
  • GPIO相关
  • UART串口相关
  • SPI相关
  • nandflash相关
  • norflash相关
  • IIC相关
  • PWM相关
  • SD卡相关
  • 定时器TIMER
  • 文件系统接口设计说明文档
  • 音视频录像开发流程
  • rdec编码器
  • 穿戴功耗数据标准
  • 手表蓝牙开发文档
  • 701蓝牙PAN联网demo
  • BLE开发使用说明
  • 701手表2.0.0版本SDK EQ在线调试和离线调试方法 V1.1
  • JL707 手表喇叭输出声音大小评估方法 V1.0
  • JL707 手表音频EQ调试方法 V1.0
  • AC707N 手表通话写卡 软件配置方法
  • 录音功能
  • 701手表2.X.X系列SDK调试EQ配置方法及音频调试技巧V1.1
  • 701手表104版本SDK EQ在线调试和离线调试方法 V1.1
  • mic2dac示例
  • P11 SensorHub相关
  • 手表升级操作文档
  • AC707NGPU
  • DBI模块介绍
  • GPU模块介绍
  • 701N屏幕驱动配置说明
  • 701N_UI编辑工具用户手册
  • 支付宝资料
  • 支付宝硬件接入资料
  • 支付宝乘车码接入资料
  • CAT1 接入文档
  • 701N_WATCH_CAT1开发说明
  • Findmy功能
  • music模式相关
  • 707电池曲线
  • 707N内置FLASH挂载FAT文件系统251112_v1.2
  • AC707N_本地视频播放demo(AVI-MJPEG-PCM)
  • 光波导屏幕调试
  • 耳机研发和生产流程 指南
  • 707-NandFlash 代码和UI资源独立烧录方案
  • 彩屏仓时间同步补丁
  • 彩屏仓抖音点赞移植
  • 707LVGLv8双屏开发
  • 707N蓝牙互传图传demo
  • AVIPCM数据流接入AIVOICE
  • Flash分区操作demo
  • 手表发射问题
  • 701_707 双备份升级DEMO
  • 707_乘车码刷码失败问题_共性

707 LVGL8最小GPU系统实现

📎 原始文档:https://www.kdocs.cn/l/cmKTNLUADv8K 707 LVGL8最小GPU系统实现

前言

本文档描述了LVGL8的补丁更新和使用说明,包括基础触摸和显示,文字和图片显示等功能。支持基本绘制功能和复杂绘图功能,支持2.5D变换、JLANI动画模块(使用PSRAM)。

为了方便代码更新:后续的707 lvgl watch sdk 版本使用git 管理,默认使用aliyun,这里会定期更新修复bug 补丁和发布,请定时查收和验证,首先需要先注册阿里云和申请加入方可访问克隆下载代码,如下为新连接:
https://account-devops.aliyun.com/account/invite?sign=d9f460060cc5237cdc14f2532ae6b0a5&next_url=https%3A%2F%2Fcodeup.aliyun.com%3Forg_id%3D69143f1be6c3e0425dbdae2b
已加入组织可通过云效链接进入获取代码:云效 Codeup · 组织级代码管理平台

内部管理员邀请客户操作:
点击云效 Codeup · 组织级代码管理平台登录,选707lvgl项目,点击邀请按钮,更新最新的邀请链接到本文档上,有效期2天。
image

  • 707LVGL彩屏充电宝版本更新(正式分支:lvgl-powerbank)新国标充电宝.otl

707-powerbank-sz-lvgl-powerbank-project-2026.07.24

升级SDK到707v200patch272版本
从彩屏仓项目同步了一些共性改动
目前具备基本的按键响应、灭屏低功耗、简单UI显示(尚未从充电IC取数据,后续会安排对UI的进一步重构优化,目前仅作开发参考)、SW6306的IIC协议以及数据打印、基本APP协议

707-powerbank-sz-lvgl-powerbank-project-2026.07.21

更新PowerBank协议,优化power_bank_det.c文件写法,可以正常连接APP

707-powerbank-sz-lvgl-powerbank-project-2026.07.09

基于707彩屏充电宝开发板对lvgl-release做基础适配

  • 彩屏耳机仓LVGL(JL-Guibuilder)版本更新(正式分支:lvgl-chargebox)707lvgl(Flash-2MByte)彩屏仓开发入门指导.otl

707-chargebox-sz-lvgl-release-project-2026.05.09-19.29

  1. 2M彩屏仓sdk大版本更新到707v200patch2.7.1
  2. 整理部分文件封库逻辑
  3. 整理近期优化改动(卡片页面滑动优化、文字默认2BP等等)
  4. 为确保首次clone下来能正常编译烧录,请在GuiBuilder工具点击清理后再次打包,并且在vscode运行clean任务后再进行编译。
  5. 在使用jlstudio更新sdk版本时,请注意不要修改lvgl_v8.a 该库更新由深圳办事处维护。 imageimage
  • WATCH标准(第三方工具)版本更新(正式分支:lvgl-release)

707-watch-stander-sz-lvgl-release-project-2026.04.30-14.42

  1. 升级到2.7.1版本
  2. 修复L1格式zalloc与psram模式冲突
  3. 添加页面跳转特效DEMO,支持跟手和非跟手模式
  4. 修复原生bin和jl bin冲突

707-watch-stander-sz-lvgl-release-project-2026.04.07-18.47

1.修复psram内存泄漏
2.添加完整表盘与页面滑动DEMO

707-watch-stander-sz-lvgl-release-project-2026.04.07-17.09

  • 添加页面框架DEMO watch_c_slide_demo

707-watch-stander-sz-lvgl-release-project-2026.04.02-19.40

  1. 解决lv阻塞bt问题以及ani不刷新问题
  2. 添加TTF矢量字体功能(要开PSRAM)
  3. 添加LUA5.3+市场表盘DEMO,参考LVGL表盘-beta版.otl(建议带PSRAM,仅是开源示例,不强制要求使用)
  4. 添加imgfont单独支持图片文字,仅支持图片显示,不支持混合显示
  5. JL资源添加P:盘符兼容
  6. 添加图片视频记录字符串路径(lv_img_t->filename)
  7. 取消lv_jlres接口使用
  8. 修复全局OPA渐变闪烁
  9. 添加PC端模拟lvgl,参考LVGL表盘-beta版.otl(仅是开源示例,不强制要求使用)
  10. 添加进出休眠控制avi、jpg、ani的自动加载释放

707-watch-stander-sz-lvgl-release-project-2026.01.28-14.36

  • 修复无声avi的播放问题

707-watch-stander-sz-lvgl-release-project-2026.01.28-12.20

  • avi添加支持音频

707-watch-stander-sz-lvgl-release-project-2026.01.23-17.08

  • 增加休眠控制测试LVGL_SLEEP_TEST
  • 添加ani_play_ctrl视频播放控制接口

707-watch-stander-sz-lvgl-release-project-2026.01.21-09.45

  • 优化长文本帧率
  • 优化切换PSRAM内存占用大问题

707-watch-stander-sz-lvgl-release-project-2025.12.11-20.20

  • 添加外部字库

707-watch-stander-sz-lvgl-release-project-2025.11.27-14.31

  • 升级SDK到2.5.0补丁
  • 停止跟踪部分文件

707-watch-stander-sz-lvgl-release-project-11.25-19.30

  • 修复GB2312编码编译问题
  • 修复绘图闪烁问题
  • 增加编译自动打包资源
  • 不推屏加延时挂起避免阻塞

707-watch-stander-sz-lvgl-release-project-11.21-16.17

  • 添加支持nand、sd res资源解析
  • 修复ani库编译内存申请错误问题
  • 修复视频切换内存泄露
  • 修复切换同名视频线程冲突死机
  • 视频资源错误文件跳过
  • 增加矩形填充变换

707-watch-stander-sz-lvgl-release-project-1117

  • 增加支持obj变换,即lv_obj_set_style_transform_xxx接口支持
  • 修复gpu库不兼容开psram问题
  • 改2bpp降低文字内存消耗
  • 修复圆环出现裂痕问题

707-watch-stander-sz-lvgl-release-project-1016

707-watch-stander-sz-lvgl-release-project-1016.zip

  • 新增加控件变换实现
  • 新增资源压缩打包工具与解析
  • 开放GPU任务链配置
  • 合并添加INDEXED_1BIT
  • 临时关闭AVI音频
  • 添加画线
  • 添加二维码显示示例
  • A1\2\4不转tile方式

707-watch-stander-sz-lvgl-release-project-0928

707-watch-stander-sz-lvgl-release-project-0928.7z
- 新增加 2.5D 实现 - 新增加 jpeg 图片显示 - 新增加 arc复杂绘图 - 新增加res打包,id方式访问 - 优化 lru 缓存问题 - 优化avi、ani格式资源 - 优化7074+nandflash 支持

707-watch-stander-sz-lvgl-release-project-0915(2025.9.19)

1.修复编译问题

707-watch-stander-sz-lvgl-release-project-0904(2025.9.4):

  1. 合并到最新的标准版手表SDK,并附带可视化工具的git信息
  2. 新增支持ani视频(360x360平均15FPS不含音频,必须要psram)
  3. 新增支持avi视频 (466x466极限30FPS带音频,超过240*240建议用psram,sram内存非常紧张)
  4. 部分复杂绘图补充(部分复杂圆角绘制回退到软件渲染)
  5. 增加lvgl 内存池psram支持
  6. 补充色块填充

视频播放调用规则如下,avi、ani共用接口
image AVI转换指令参考:
ffmpeg -i test.mp4 -vf "scale=320:384:force_original_aspect_ratio=decrease,pad=320:384:(ow-iw)/2:(oh-ih)/2,fps=23" -c:v mjpeg -q:v 8 -c:a pcm_s16le -ar 16000 -ac 1 -f avi Atest.avi
AVI视频播放功能开发说明.otl
7074A7S+nandflash配置:
image

~~lite_SDK DEMO(lite版本后续不再更新) ~~

~~关psram版本:707_watch_lite_sdk_add_lvgl8_demo_release_20250805_101358-lvgl.zip ()~~​

SDK下载开发板常见报错处理方法:
1.若显示不正常:请根据开发板屏幕型号更换正确的屏幕驱动,如TCFG_LCD_SPI_ST77916_ENABLE或TCFG_LCD_SPI_GC9B71_ENABLE
image

2.若ASSERT-FAILD: buf_len == use_len错误:请修改LCD_BLOCK_H与CONFIG_LCD_BUF_STATIC_RAM_LEN配置一致
image 3.若报错:ASSERT-FAILD: rect->left + rect->width<=this->led w left:0 width:320 led w:240 rets:c0189de,为lvgl框架的分辨率与屏幕驱动分辨率不一致,请按照以下修改.
image

4.使用ani高压缩动画必需使用带psram的芯片,如7074A7S

LVGL官方资源

  • LVGL官方网站: https://lvgl.io/
  • LVGL GitHub仓库: https://github.com/lvgl/lvgl
  • LVGL文档: https://docs.lvgl.io/
  • PC模拟器仓库: https://github.com/lvgl/lv_port_pc_simulator
  1. 开发板环境配置 确认屏幕是不是77916,不是的话要更换屏幕驱动
    开发版区别:
    7070顶板:要将TCFG_7074_EX_NORFLASH_CONFIG置为0
    7074顶板:要将TCFG_7074_EX_NORFLASH_CONFIG置为1(git默认)
  2. LVGL入口 搜索关键词:
    NEW_LVGL_V8_DEMO
    LVGL的入口位于 app_main.c文件中,具体路径为:apps/watch/app_main.c 。该文件包含以下关键内容:
  • GPU启动
  • LVGL线程入口
  • 推屏处理 触摸坐标获取功能由 cst816d.c文件实现,路径为:apps/common/device/touch_panel/cst816d/cst816d.c。
  1. Flash资源划分 搜索关键词:
    NEW_LVGL_V8_DEMO
    Flash资源的代码划分区域定义在 board_ac707n_demo_cfg.h文件中,路径为:apps/watch/board/br35/board_ac707n_demo/board_ac707n_demo_cfg.h。
  2. 编译与资源占用 当前开启的LVGL demo和example编译后,代码总占用约2.5M。用户可以根据需求关闭部分功能以减少资源占用。
  3. VSCode模拟器工程 lv_port_pc_vscode文件夹是一个可以在VSCode环境中运行的LVGL模拟器工程,依赖CMake和SDL。具体安装依赖库的方法请参考官方 lv_port_pc_vscode GitHub仓库。初次编译时,请清除 build文件夹以避免报错。 https://github.com/lvgl/lv_port_pc_simulator
  4. LVGL源码与示例 所有LVGL源码和示例位于 lv_port_pc_vscode文件夹中。
  5. UI初始化示例 ui_init()是一个表盘demo示例,由SquareLine生成。SquareLine内存占用较大,用户需控制页面加载数量。理论上Guigider也可以直接导入运行(需选择纯数组资源)。
  6. LVGL配置 lv_conf.h文件中的关键配置:
  • #define DIS_HOR_RES 320 和 #define DIS_VER_RES 384 定义了屏幕尺寸,需与屏驱动同步。
  • #define LV_USE_CUSTOM_GPU 用于引入JL GPU,关闭则为纯软件绘制。

性能对比

页面类型软件渲染 (FPS/内存)硬件加速 (FPS/内存)性能提升
模拟钟表22FPS / 77K41FPS / 77K+86%
数字钟表27FPS / 77K41FPS / 71K+52%
天气动画24FPS / 81K41FPS / 75K+71%
天气列表26FPS / 66K41FPS / 58K+58%
电话页25FPS / 78K41FPS / 75K+64%
  1. JLANI动画模块 LV_USE_JLANI是JL高压缩视频格式,需同时开启 LV_USE_CUSTOM_GPU。相关库位于 lib_gpu文件夹中。

使用方法

参考 jlani.h文件,类似于 lv_gif的使用方法:

lv_obj_t * ani = lv_jlani_create(ui_watch_digital);
lv_jlani_set_src(ani, "mnt/sdfile/EXT_RESERVED/RESFS/che.ani");

完整JLANI动画示例

/**
 * 创建并显示JLANI动画
 */
void create_jlani_animation(lv_obj_t *parent)
{
    // 创建JLANI对象
    lv_obj_t *ani = lv_jlani_create(parent);
  
    // 设置对象大小和位置
    lv_obj_set_size(ani, 200, 200);
    lv_obj_align(ani, LV_ALIGN_CENTER, 0, 0);
  
    // 加载ANI文件
    lv_jlani_set_src(ani, "mnt/sdfile/EXT_RESERVED/RESFS/animation.ani");
  
    // 设置动画循环播放
    lv_obj_add_flag(ani, LV_OBJ_FLAG_CLICKABLE);
  
    // 添加事件处理
    lv_obj_add_event_cb(ani, jlani_event_cb, LV_EVENT_CLICKED, NULL);
}

/**
 * JLANI事件回调函数
 */
static void jlani_event_cb(lv_event_t *e)
{
    lv_obj_t *obj = lv_event_get_target(e);
    lv_event_code_t code = lv_event_get_code(e);
  
    if (code == LV_EVENT_CLICKED) {
        // 点击时重新开始动画
        lv_jlani_restart(obj);
    }
}

JLANI文件格式说明

ANI文件是一种高压缩比的动画格式,具有以下特点:

  • 高压缩率,比GIF小3-5倍
  • 支持循环播放设置 可以使用JL提供的转换工具将GIF、APNG或视频文件转换为ANI格式。
  1. ANI工具使用说明
  2. 程序使用方式
方式一:双击运行(GUI模式)

直接双击 move_pic_converter.exe 启动图形界面,可以:

  • 选择输入文件
  • 设置输出路径
  • 调整分辨率和帧率
  • 查看转换日志 image
方式二:命令行模式

使用命令行参数运行程序,支持以下参数:

.\move_pic_converter.exe -h  # 查看帮助信息
.\move_pic_converter.exe -i input.mp4 -o output --size 240x240 --fps 20  # 完整示例

参数说明:

  • -i, --input:输入文件路径(必需)
  • -o, --output:输出文件路径(可选)
  • --size:输出分辨率(默认:240x240)
  • --fps:输出帧率(默认:20)
PS E:\Release> .\move_pic_converter.exe -h
usage: move_pic_converter.exe [-h] -i INPUT [-o OUTPUT] [--size SIZE] [--fps FPS]

动图转换打包工具 - 完整的动图处理解决方案

功能说明:
1. 将输入动图转换为指定格式和分辨率
2. 自动生成动图索引文件
3. 将动图和索引打包为单个.ani文件

注意事项:
- 输入文件必须存在且可访问
- 如果目标文件已存在将被覆盖

options:
  -h, --help            show this help message and exit
  -i INPUT, --input INPUT
                        输入动图文件路径(必需参数)
  -o OUTPUT, --output OUTPUT
                        输出文件路径(可选参数)
  --size SIZE           输出动图分辨率(默认: 240x240)
  --fps FPS             输出动图帧率(默认: 20)
  1. 注意事项
  • 推荐的分辨率和帧率组合:
    • 240x240 @20FPS(标准模式)
    • 320x240 @20FPS(宽屏模式)
    • 320x384 @15FPS(竖屏模式)
    • 360x360 @15FPS(圆屏模式带圆形遮罩)
  1. GPU相关配置
  2. GPU初始化完整示例
/**
 * 初始化GPU和LVGL显示系统
 */
void init_gpu_and_display(void)
{
    // 初始化GPU
    szjl_gpu_init();
  
    // 配置GPU缓存
    // 参数1: 总缓冲大小 (12KB)
    // 参数2: 每个字的平均大小 (128字节)
    szjl_set_gpu_cache(12*1024, 128);
  
    // 初始化LVGL
    lv_init();
  
    // 初始化显示缓冲区
    // 注意: 传入NULL参数让GPU管理内存
    static lv_disp_draw_buf_t disp_buf;
    lv_disp_draw_buf_init(&disp_buf, NULL, NULL, DIS_HOR_RES * DIS_VER_RES);
  
    // 初始化显示驱动
    static lv_disp_drv_t disp_drv;
    lv_disp_drv_init(&disp_drv);
  
    // 配置显示驱动参数
    disp_drv.draw_buf = &disp_buf;
    disp_drv.flush_cb = szjl_gpu_disp_flush;  // 使用GPU推屏接口
    disp_drv.hor_res = DIS_HOR_RES;
    disp_drv.ver_res = DIS_VER_RES;
    disp_drv.full_refresh = 0;  // 使用局部刷新
  
    // 注册显示设备
    lv_disp_t *disp = lv_disp_drv_register(&disp_drv);
  
    // 设置默认屏幕
    lv_disp_set_default(disp);
}
  1. 文字缓冲大小
extern void szjl_set_gpu_cache(int f, int a);
szjl_set_gpu_cache(12*1024, 128);
  • 第一个参数是总缓冲大小。
  • 第二个参数是每个字的平均大小(长 * 宽 * bpp / 8)。
  1. GPU推屏接口
extern void szjl_gpu_disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p);
szjl_gpu_disp_flush(disp_drv, area, color_p);

最终通过 lv_send_task_to_gpu(上层可见)传送。
4. 分块内存管理

lv_disp_draw_buf_init(&disp_buf1, NULL, NULL, DIS_HOR_RES * DIS_VER_RES);

分块内存由GPU管理,即屏驱动的分块高度配置 LCD_BLOCK_H,不使用原生LVGL缓冲。
12. GPU移植 直接移植 LV_USE_CUSTOM_GPU包含的内容以及 lib_gpu中的 .a库。

  1. GPU移植步骤详解
  2. 配置LVGL
    • 在 lv_conf.h中启用自定义GPU:
#define LV_USE_CUSTOM_GPU 1
- 如需使用JLANI动画,同时启用:
#define LV_USE_JLANI 1
  1. 添加GPU库文件
    • 将 lib_gpu文件夹中的 .a库文件添加到项目中
    • 根据目标平台选择对应的库文件
  2. 修改显示驱动
    • 使用GPU推屏接口替换原有的刷新回调:
disp_drv.flush_cb = szjl_gpu_disp_flush;
  1. 初始化GPU
    • 在LVGL初始化前调用GPU初始化函数:
szjl_gpu_init();
- 配置GPU缓存:
szjl_set_gpu_cache(12*1024, 128);
  1. 配置显示缓冲区
    • 使用GPU管理的分块内存:
lv_disp_draw_buf_init(&disp_buf, NULL, NULL, DIS_HOR_RES * DIS_VER_RES);
  1. 移植注意事项
  • GPU库与特定硬件平台相关,确保选择正确的库文件
  • 根据实际屏幕分辨率调整 DIS_HOR_RES和 DIS_VER_RES
  • 根据系统内存情况调整GPU缓存大小 直接移植 LV_USE_CUSTOM_GPU包含的内容以及 lib_gpu中的 .a库。
  1. 正在进行的功能完善
  2. 矩形填充
  3. 复杂绘图
  4. 位图压缩
  5. JPEG支持
  6. MJPEG支持
  7. 功能开发路线图
功能状态说明
矩形填充开发中支持纯色和渐变填充
复杂绘图规划中包括圆角、圆形、弧线等
位图压缩开发中支持RLE和自定义压缩算法
JPEG支持规划中硬件加速JPEG解码
MJPEG支持规划中视频播放支持
  1. 总结 本文档提供了LVGL8最小GPU系统实现的关键信息,包括入口、触摸、Flash资源划分、性能对比、JLANI动画模块和GPU配置等。用户可根据需求调整配置,并参考示例代码进行开发。
  2. 关键性能指标
  • 渲染速度:GPU加速后平均提升60-70%
  1. 适用场景
  • 资源受限的嵌入式设备
  • 需要流畅UI体验的可穿戴设备
  • 电池供电的便携设备
  1. 参考资源
  • LVGL官方文档
  • LVGL GitHub仓库
  • LVGL论坛
  1. 技术支持
  2. 如有问题,请联系杰理技术支持团队:
  3. 本文档提供了LVGL8最小GPU系统实现的关键信息,包括入口、触摸、Flash资源划分、性能对比、JLANI动画模块和GPU配置等。用户可根据需求调整配置,并参考示例代码进行开发。