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

本文主要是介绍【启明智显技术分享】工业级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; // 根据数据类型修改掩码 0x80000000bits <<= 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; // 根据数据类型修改掩码 0x80000000bits <<= 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 = 0x8000PSRAM_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

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

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

这篇关于【启明智显技术分享】工业级HMI芯片-Model系列关于SDCard / Udisk 烧录时显示进度条和数字百分比技术指导的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1072953

相关文章

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

Pydantic中model_validator的实现

《Pydantic中model_validator的实现》本文主要介绍了Pydantic中model_validator的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录引言基础知识创建 Pydantic 模型使用 model_validator 装饰器高级用法mo

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

GORM中Model和Table的区别及使用

《GORM中Model和Table的区别及使用》Model和Table是两种与数据库表交互的核心方法,但它们的用途和行为存在著差异,本文主要介绍了GORM中Model和Table的区别及使用,具有一... 目录1. Model 的作用与特点1.1 核心用途1.2 行为特点1.3 示例China编程代码2. Tab

使用PyTorch实现手写数字识别功能

《使用PyTorch实现手写数字识别功能》在人工智能的世界里,计算机视觉是最具魅力的领域之一,通过PyTorch这一强大的深度学习框架,我们将在经典的MNIST数据集上,见证一个神经网络从零开始学会识... 目录当计算机学会“看”数字搭建开发环境MNIST数据集解析1. 认识手写数字数据库2. 数据预处理的

java字符串数字补齐位数详解

《java字符串数字补齐位数详解》:本文主要介绍java字符串数字补齐位数,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java字符串数字补齐位数一、使用String.format()方法二、Apache Commons Lang库方法三、Java 11+的St

Python解析器安装指南分享(Mac/Windows/Linux)

《Python解析器安装指南分享(Mac/Windows/Linux)》:本文主要介绍Python解析器安装指南(Mac/Windows/Linux),具有很好的参考价值,希望对大家有所帮助,如有... 目NMNkN录1js. 安装包下载1.1 python 下载官网2.核心安装方式3. MACOS 系统安

Linux虚拟机不显示IP地址的解决方法(亲测有效)

《Linux虚拟机不显示IP地址的解决方法(亲测有效)》本文主要介绍了通过VMware新装的Linux系统没有IP地址的解决方法,主要步骤包括:关闭虚拟机、打开VM虚拟网络编辑器、还原VMnet8或修... 目录前言步骤0.问题情况1.关闭虚拟机2.China编程打开VM虚拟网络编辑器3.1 方法一:点击还原VM