【启明智显技术分享】工业级HMI芯片-Model系列关于SDCard / Udisk 烧录时显示进度条和数字百分比技术指导

【Model系列芯片】

是启明智显针对工业、行业以及车载产品市场推出的系列HMI芯片,主要应用于工业自动化、智能终端HMI、车载仪表盘、两轮车彩屏仪表、串口屏、智能中控、智能家居、充电桩显示屏、储能显示屏、工业触摸屏等领域。此系列具有高性能、低成本的特点,支持工业宽温、2D加速、PNG解码、JPEG编解码引擎及屏幕高达60FPS的刷新,RS485\CAN\串口\网口等丰富灵活的接口以及SDK软硬件开源。主流芯片型号有Model3C、Model3A、Model3及Model4等,其中,Model3C更是以其个位数价格结合工业级品质,在市场中受到了广泛的追捧。

烧录时进度条提示技术指导

在烧录过程中,为了缓解用户因不清楚烧录进度而产生的焦虑,我们特别增加了进度条显示功能。以下将详细介绍这一功能的技术指导:

ZX 平台支持 SDCard / Udisk 烧录时显示进度条和数字百分比。进度条和数字百分比通过 CPU 进行绘制。 进度条默认居中,显示蓝绿两种颜色。数字百分比通过 fb console 实现,fb console 默认支持 32x32 点阵字体,ASCII 32 - 127。

使能配置

在 zx-rtt-sdk 根目录下执行 scons –menuconfig, 进入 BootLoader 工程配置界面

使能 SDCard/Udisk 烧录
Baremetal APP options  --->
    Bootloader options  --->
        Upgrading  --->
            [*] Upgrading by SD Card
 使能 Display Engine
Board options  --->
    [*] Using Display Engine (DE)
        Display Parameter  --->

配置显示子系统参数,详情参考 参数配置 章节,屏幕参数需要与项目工程保持一致(背光除外)

备注
  • BootLoader 工程需要 GPIO 控制背光,不支持 PWM 调节亮度,其余屏幕参数需要与项目工程保持一致

  • framebuffer format 支持 argb8888 和 rgb565, 配置项 select framebuffer format (rgb565)  ---> , 推荐 rgb565 格式 ,内存占用小

使能烧录进度条命令

烧录进度条支持三种场景

  • 同时显示进度条和 fb console

  • 只显示进度条

  • 只显示 fb console

Baremetal APP options  --->
    Bootloader options  --->
        Commands  --->
            [*] boot progress bar
            (0)   progress bar rotate degress (0/90/270) (NEW)
            [ ]     only fb console (NEW)
自定义配置

自定义配置支持修改进度条颜色、进度条宽高、进度条位置、fb console 字体颜色、fb console 字体大小。

自定义配置需要修改 SDK 源代码,源码路径:

application/baremetal/bootloader/cmd/progress_bar.c
 进度条颜色

修改宏定义

#define BAR_BACKGROUND_COLOR        0x00, 0xA2, 0xE9    // r, g, b
#define BAR_FILL_COLOR              0x18, 0xD4, 0x0A
进度条宽高

进度条高度宏定义,以 pixel 为单位

#define BAR_HEIGHT                  35

进度条宽度宏定义,进度条宽度自适应 LCD 分辨率,默认为 LCD 宽度的 5/6,配置不同的比例调整进度条宽度

#define WIDTH_SPLIT_NUMERATOR       5
#define WIDTH_SPLIT_DENOMINATOR     6
进度条位置

修改进度条绘制逻辑,默认居中显示

void aicfb_draw_bar(unsigned int value)
{
    ...
    bar_x     = (info.width - width) / 2;   // 居中显示
    bar_y     = (info.height - height) / 2;
    ...
}
fb console 字体颜色

fb console 支持 16 种颜色,通过宏定义指定

enum color_idx {
    CONSOLE_BLACK = 0,
    CONSOLE_RED,
    CONSOLE_GREEN,
    CONSOLE_BROWN,
    CONSOLE_BLUE,
    CONSOLE_MAGENTA,
    CONSOLE_CYAN,
    CONSOLE_LIGHT_GRAY,
    CONSOLE_GRAY,
    CONSOLE_LIGHT_RED,
    CONSOLE_LIGTH_GREEN,
    CONSOLE_YELLOW,
    CONSOLE_LIGHT_BLUE,
    CONSOLE_LIGHT_MAGENTA,
    CONSOLE_LIGHT_CYAN,
    CONSOLE_WHITE,
    CONSOLE_COLOR_COUNT
};
字体颜色宏定义
#define CONSOLE_COLOR_FG            CONSOLE_LIGHT_GRAY
#define CONSOLE_COLOR_BG            CONSOLE_BLACK
fb console 显示位置

修改 fb console 逻辑,默认居中显示

void aicfb_draw_bar(unsigned int value)
{
    ...
    console_x = info.width / 2;     // 居中显示
    console_y = bar_y + BAR_HEIGHT + 5;
    ...
}

 

fb console 字体大小

字体数据源

fb console 字体大小修改需要提供新的字体点阵数据源,数据源保存路径:

application/baremetal/bootloader/include/video_font_data.h

可通过点阵字库工具导出点阵数据,推荐第三方开源工具 点阵字库生成工具

将数据源复制到数组中,并修改数据类型,默认数据类型为 uint32_t 。

static uint32_t video_fontdata[VIDEO_FONT_SIZE] = {
    ...
    ...
};
修改字体属性
#define VIDEO_FONT_CHARS    96  // 支持的字符个数
#define VIDEO_FONT_WIDTH    32  // 字体宽度,以 pixel 为单位
#define VIDEO_FONT_HEIGHT   32  // 字体高度,以 pixel 为单位
修改 fb console 逻辑

节选部分代码,需要重新指定数据索引,数据类型和掩码

static void aicfb_console_putc(struct aicfb_screeninfo *info,
     unsigned int x, unsigned int y, char ch)
{
    int pbytes = info->bits_per_pixel / 8;
    int i, row;
    void *line;

    line = (unsigned char *)(info->framebuffer + y * info->stride + x * pbytes);

    for (row = 0; row < VIDEO_FONT_HEIGHT; row++) {
        unsigned int idx = (ch - 32) * VIDEO_FONT_HEIGHT + row; // 根据新数据源重新索引
        uint32_t bits = video_fontdata[idx];    // 修改数据类型

        switch (info->format) {
        case MPP_FMT_RGB_565:
        {
            uint16_t *dst = line;

            for (i = 0; i < VIDEO_FONT_WIDTH; i++) {
                *dst++ = (bits & 0x80000000) ? colour_fg : colour_bg; // 根据数据类型修改掩码 0x80000000
                bits <<= 1;
            }
            break;
        }
        case MPP_FMT_ARGB_8888:
        {
            uint32_t *dst = line;

            for (i = 0; i < VIDEO_FONT_WIDTH; i++) {
                *dst++ = (bits & 0x80000000) ? colour_fg : colour_bg; // 根据数据类型修改掩码 0x80000000
                bits <<= 1;
            }
            break;
        }
    }
}
 常见问题
1. menuconfig 配置中未出现 BootLoader options 选项
Bootloader options  --->

当前未处于 BootLoader 工程,需要切换到 BootLoader 工程

2. 重编 BootLoader 工程后配置未生效

BootLoader 工程编译后需要再次编译项目工程

3. 烧录过程未显示 fb console

检查 zx-rtt-sdk 版本,v1.0.4 及以上版本支持 fb console

4. 烧录过程屏幕不亮
  • BootLoader 工程需要 GPIO 控制背光,不支持 PWM 调节亮度

  • 检查 display 参数配置,确认 BootLoader 工程与项目工程配置一致(背光除外)

5. 串口输出 alloc fb0 failed

BootLoader 内存不足

  • 推荐 RGB565 格式,减少内存占用

  • 修改 BootLoader 工程的 ld 链接文件,增大内存 heap

以 ZXM3A7D0_bootloader 工程为例,其 ld 链接文件路径为:

application/baremetal/bootloader/ldscript/m3a_bootloader_gcc.ld.S

调整内存 heap

MEMORY
{
    /* The last 256KB for bootloader */
    SRAM_SW     : ORIGIN = 0x30040000, LENGTH = 0x8000
    PSRAM_BOOT_SW : ORIGIN = 0x40400100, LENGTH = 0x200000
}

备注

部分工程支持 menuconfig 配置内存 heap,注意是否存在宏定义

6. 调整内存 heap 起始地址后无法烧录

未调整 BootLoader 加载/启动地址,BootLoader 无法正确运行。

以 ZXM3A7D0_bootloader 工程为例,调整 BootLoader 加载/启动地址

//target/m3a/ZXM3A7D0/pack/image_cfg.json

"bootloader.aic": {
            ...
            "loader": {
                ...
                "load address ext": "0x40400000",
                "entry point ext":  "0x40400100",
            },
            ...
7. fb console 字体显示偏瘦或颜色不对
  • fb console 数据类型与数据源不匹配。

    当前 fb console 框架支持宽度为 8/16/32/64 的字体 ,对应的数据类型分别为 uint8_t/uint16_t/uint32_t/uint64_t

  • 数据掩码与数据类型不匹配

    数据类型 uint8_t/uint16_t/uint32_t/uint64_t 对应的数据掩码分别为 0x80/0x8000/0x80000000/0x8000000000000000

通过引入进度条显示功能,我们为用户提供了一个更加友好、高效的烧录体验。在未来的发展中,我们将继续优化这一功能,并探索更多创新的技术解决方案,以不断提升用户满意度和体验。

更多技术信息,请关注我们!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/720450.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

01studio的miropython哥伦布407开发板真实管脚

抹黑的管脚都不能用&#xff01;绿色是sd卡占用&#xff0c;红色的是串口占用&#xff0c;还有其他的只能看原理图了 管脚都引出来了&#xff0c;不能用&#xff0c;引出来干嘛呢&#xff1f;纯瞎耽误功夫 谨慎使用吧。

C++ 62 之 冒泡排序

#include <iostream> // #include <string> #include <cstring>using namespace std;// 冒泡排序:函数模板 template<typename T> void mySort(T arr[], int len){ // size参数是数组的个数&#xff0c;一定是int型的for (size_t i 0; i < len -1;…

玩转编程的终极挑战,C++究竟有多难?

C是一门非常强大和灵活的编程语言&#xff0c;它可以实现面向对象、泛型、元编程等多种编程范式&#xff0c;可以开发高性能的系统软件、游戏、图形、网络等各种应用。但是&#xff0c;C也是一门非常复杂和难学的语言&#xff0c;很多初学者在学习C的过程中会遇到很多困难和挫折…

mysql下载安装教程(图文详细版)

如果一次没成功的话&#xff0c;就删掉重安&#xff08;前提是清理干净&#xff09;&#xff08;up就下了好几次&#xff0c;在错误中找到答案&#xff09; navicat(可视化工具)在其他文章里 一、mysql下载 进入官网地址https://www.mysql.com/downloads/ 然后就开始下载了&…

C++ 48 之 继承的基本语法

#include <iostream> #include <string> using namespace std;// 定义一个基类&#xff0c;把公共的部分写在这里&#xff0c;以后让别的类继承即可 class BasePage{ public:void header(){cout << "公共的头部"<< endl;}void footer(){cout…

如何恢复iPhone iCloud云盘资料删除?给出建议

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

【尚庭公寓SpringBoot + Vue 项目实战】后台岗位管理(十六)

【尚庭公寓SpringBoot Vue 项目实战】后台岗位管理&#xff08;十六&#xff09; 文章目录 【尚庭公寓SpringBoot Vue 项目实战】后台岗位管理&#xff08;十六&#xff09;1、业务说明2、逻辑模型介绍3、接口开发3.1、分页查询岗位信息3.2、保存或更新岗位信息3.3、根据ID删…

Flutter 小技巧之面试题里有意思的异步问题

很久没更新小技巧系列了&#xff0c;本次简单介绍一下 Flutter 面试里我认为比较有意思的异步基础知识点。 首先我们简单看一段代码&#xff0c;如下代码所示&#xff0c;是一个循环定时器任务&#xff0c;这段代码里&#xff1a; testFunc 循环每 1 秒执行一次 asyncWorkasy…

PAT B1008. 数组元素循环右移问题

题目描述 一个数组A中存有N(N>O)个整数&#xff0c;在不允许使用另外数组的前提下&#xff0c;将每个整数循环向右移M(M≥0)个位置,即将A中的数据由( …)变换为(……)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,则应如何设计移动的方法?输…

[vue3]掌握pinia

pinia Pinna是vue的最新状态管理工具, 用来替代vuex 官网: Pinia | The intuitive store for Vue.js 优势 更简洁的API, 去掉了mutaion与Vue3配套的组合式API风格去掉了modules, 每个store都是独立的模块更好的TS支持, 提供可靠的类型推断 安装 命令: npm i piniamain.js挂…

国内docker镜像加速

自己注册一个阿里云或者华为云的账户&#xff0c;搜索镜像 点击开通&#xff0c;再点击镜像加速器&#xff0c;可以看到自己的加速器地址&#xff0c;然后替换就可以了。再去pull即可成功&#xff0c;但是响应还是要慢一点

【多模态】39、HRVDA | 基于高分辨率输入的高效文档助手(CVPR2024)

论文&#xff1a;HRVDA: High-Resolution Visual Document Assistant 代码&#xff1a;暂无 出处&#xff1a;中国科学技术大学 | 腾讯优图 贡献点&#xff1a; 作者提出了高分辨率视觉文档助手 HRVDA&#xff0c;能直接处理高分辨率图像输入作者提出了内容过滤机制和指令过…

Altair 人工智能技术助力MABE预测消费者行为,实现设备性能优化

主要看点 行业&#xff1a; 家电行业 挑战&#xff1a; 企业面临的挑战是如何利用已收集的大量数据&#xff0c;深入了解消费者在产品使用过程中对某些保鲜程序的影响。 Altair 解决方案&#xff1a; Altair采用了Altair RapidMiner人工智能平台来解决问题&#xff0c;特别是…

C++ 60 之 虚析构和纯虚析构

#include <iostream> #include <string> #include <cstring> using namespace std;class Animal13{ public:Animal13(){cout << "Animal的默认构造函数" << endl;}virtual void speak(){cout << "动物叫" << en…

CP AUTOSAR标准之MemoryDriver(AUTOSAR_CP_SWS_MemoryDriver)

1 简介和功能概述 该规范描述了AUTOSAR基础软件模块内存驱动程序(Mem)的功能、API和配置。   内存驱动程序提供访问不同类型内存设备的基本服务,如读取、写入、擦除和空白检查。   尽管闪存仍然是最常见的非易失性存储器技术,但内存驱动程序规范考虑了所有相关的内存设备…

【价值主张画布】以产品思维,将自己打造成“爆款”

经营自己等于经营公司&#xff1a; 1.客户细分&#xff1a;我能帮助谁&#xff1f;谁是我们最重要的客户&#xff1f; 2. 客户关系&#xff1a;怎样和对方打交道&#xff1f;一次交付还是持续交付&#xff1f; 3.渠道通路&#xff1a;怎样宣传自己和服务&#xff1f; 4. 价值主…

身份证二要素API在Java、Python、PHP中的使用教程

随着信息时代的迅猛发展&#xff0c;数字化已经深刻影响了我们生活的各个方面。从社交互动到金融交易&#xff0c;人们越来越多地依赖在线平台和数字服务。然而&#xff0c;随之而来的是身份验证和数据安全方面的挑战。在这个信息泛滥的时代&#xff0c;确保每个在线身份的真实…

丹麦海外媒体报道:媒体投放发稿助力企业在海外扭转战局

大舍传媒 丹麦海外媒体报道中&#xff0c;大舍传媒作为一家专业的媒体投放公司&#xff0c;正发挥着重要作用&#xff0c;帮助企业在海外扭转战局。作为丹麦领先的媒体投放机构&#xff0c;他们为企业提供了全方位的品牌传播服务&#xff0c;帮助企业在海外市场取得成功。 大舍…

Unity制作透明材质直接方法——6.15山大软院项目实训

之前没有在unity里面接触过材质的问题&#xff0c;一般都是在maya或这是其他建模软件里面直接得到编辑好材质的模型&#xff0c;然后将他导入Unity里面&#xff0c;然后现在碰到了需要自己在Unity制作透明材质的情况&#xff0c;所以先搜索了一下有没有现成的方法&#xff0c;很…

Linux时间子系统5:timekeeper、timecountercyclecounter

1. 前言 前面我们介绍了用户态获取时间的接口clock_gettime&#xff0c;时钟的种类posix_clocks以及时钟源clocksource。那么我们思考这样一个问题&#xff0c;无论clock_gettime或者posix_clock定义的时间都是相对于某个起始点的时间&#xff0c;即相对于Linux Epoch的秒数&am…