烧录进度条
概述
ArtInChip 平台支持 SDCard / Udisk 烧录时显示进度条和数字百分比。进度条和数字百分比通过 CPU 进行绘制。进度条默认居中,显示蓝绿两种颜色。数字百分比通过 fb console 实现,fb console 默认支持 32x32 点阵字体,ASCII 32 - 127。
使能配置
在 Luban-Lite 根目录下执行 scons --menuconfig
,进入 BootLoader
工程配置界面
使能 SDCard/Udisk 烧录
Bootloader options --->
Upgrading --->
[*] Upgrading by SD Card
[*] Upgrading by UDISK
2
3
4
使能 Display Engine
Board options --->
[*] Using Display Engine (DE)
Display Parameter --->
2
3
配置显示子系统参数,详情参考 参数配置 章节,屏幕参数需要与项目工程保持一致(背光除外)
注解 BootLoader 工程需要 GPIO 控制背光,不支持 PWM 调节亮度,其余屏幕参数需要与项目工程保持一致
framebuffer format 支持 argb8888 和 rgb565, 配置项 select framebuffer format (rgb565) --->, 推荐 rgb565 格式,内存占用小
使能烧录进度条命令 烧录进度条支持三种场景:
- 同时显示进度条和 fb console
- 只显示进度条
- 只显示 fb console
Bootloader options --->
Commands --->
[*] boot progress bar
[*] fb console support (NEW)
[ ] only fb console (NEW)
2
3
4
5
自定义配置
自定义配置支持修改进度条颜色、进度条宽高、进度条位置、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
2
进度条宽高
进度条高度宏定义,以 pixel 为单位:
#define BAR_HEIGHT 35
进度条宽度宏定义,进度条宽度自适应 LCD 分辨率,默认为 LCD 宽度的 5/6,配置不同的比例调整进度条宽度:
#define WIDTH_SPLIT_NUMERATOR 5
#define WIDTH_SPLIT_DENOMINATOR 6
2
进度条位置
修改进度条绘制逻辑,默认居中显示:
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
};
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
字体颜色宏定义:
#define CONSOLE_COLOR_FG CONSOLE_LIGHT_GRAY
#define CONSOLE_COLOR_BG CONSOLE_BLACK
2
fb console 显示位置
修改 fb console 逻辑,默认居中显示:
void aicfb_draw_bar(unsigned int value)
{
...
console_x = info.width / 2; // 居中显示
console_y = bar_y + BAR_HEIGHT + 5;
...
}
2
3
4
5
6
7
fb console 字体大小
字体数据源: fb console 字体大小修改需要提供新的字体点阵数据源,数据源保存路径:
application/baremetal/bootloader/include/video_font_data.h
可通过点阵字库工具导出点阵数据,推荐第三方开源工具 点阵字库生成工具。将数据源复制到数组中,并修改数据类型,默认数据类型为 uint32_t
。
static uint32_t video_fontdata[VIDEO_FONT_SIZE] = {
...
...
};
2
3
4
修改字体属性:
#define VIDEO_FONT_CHARS 96 // 支持的字符个数
#define VIDEO_FONT_WIDTH 32 // 字体宽度,以 pixel 为单位
#define VIDEO_FONT_HEIGHT 32 // 字体高度,以 pixel 为单位
2
3
**修改 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;
}
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
常见问题
- menuconfig 配置中未出现 BootLoader options 选项
Bootloader options --->
当前未处于 BootLoader 工程,需要切换到 BootLoader 工程
重编 BootLoader 工程后配置未生效
BootLoader 工程编译后需要再次编译项目工程烧录过程未显示 fb console
检查 Luban-Lite SDK 版本,v1.0.4 及以上版本支持 fb console烧录过程屏幕不亮
- BootLoader 工程需要 GPIO 控制背光,不支持 PWM 调节亮度
- 检查 display 参数配置,确认 BootLoader 工程与项目工程配置一致(背光除外)
串口输出 alloc fb0 failed
BootLoader 内存不足- 推荐 RGB565 格式,减少内存占用
- 修改 BootLoader 工程的 ld 链接文件,增大内存 heap
以 d12 demo68-nor BootLoader 工程为例,其 ld 链接文件路径为:
application/baremetal/bootloader/ldscript/d12x_bootloader_gcc.ld.S
调整内存 heap
MEMORY {
/* The last 256KB for bootloader */
SRAM_SW : ORIGIN = 0x30040000, LENGTH = 0x8000
PSRAM_BOOT_SW : ORIGIN = 0x40200100, LENGTH = 0x200000
}
2
3
4
5
注解
部分工程支持 menuconfig 配置内存 heap,注意是否存在宏定义。
调整内存 heap 起始地址后无法烧录
未调整 BootLoader 加载/启动地址,BootLoader 无法正确运行。以 d12 demo68-nor 工程为例,调整 BootLoader 加载/启动地址:
target/d12x/demo68-nor/pack/image_cfg.json
"bootloader.aic": {
"loader": {
...
"load address ext": "0x40200000",
"entry point ext": "0x40200100",
},
...
},
2
3
4
5
6
7
8
9
10
11
- 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
- fb console 数据类型与数据源不匹配。