MCU字库升级方案

字库处理存储方法

flag区

固定在后256k起始地址,即0x08040000

c 复制代码
typedef __packed struct
{
    uint32_t exist_flag;
    uint32_t fontlib_addr;
    uint32_t fontlib_len;
    uint8_t md5[16];
} font_upgrade_flags_t;
__attribute__((at(FONT_LIB_FLAG_ADDR))) volatile const font_upgrade_flags_t font_flags = {
    .exist_flag = FONT_LIB_EXIST_FLAGS,
    .fontlib_addr = FONT_LIB_START_ADDR,
};

字库版本(与固件一致)

作为一个变量,存在于字库的开头,即 0x08040800

c 复制代码
__attribute__((at(FONT_LIB_START_ADDR))) volatile const uint32_t font_lib_version =
                                                        (DEVICE_VERSION_A_PRJ_NUM << 24) |
                                                        (DEVICE_VERSION_B_PRJ_STAGE << 16) |
                                                        (DEVICE_VERSION_C_MAJOR << 8) |
                                                        (DEVICE_VERSION_D_MINOR << 0);

字库数据bitmap

存放于".fontconst"的section,通过attribute给所有需要的bitmap加上属性

存放于字库版本之后,即0x08040804后都是字库数据

c 复制代码
#define LV_ATTRIBUTE_LARGE_CONST __attribute__((section(".fontconst")))

校验

开机判断:

升级过程最后会将flag区的字库存在标记置位,开机初始化阶段会进行判断,如果存在

标记位不在

标记区内的地址不合法

长度不合法

线程不运行,异常停止

合法校验:

复制代码
升级过程最后会将整个字库的MD5计算值保存到标记区,开机会进行一次计算校验
开机初始化阶段不判断MD5校验是否通过(如果打开会影响keil下载调试效率,最后也可打开)

当大包升级中心或上位机查询字库版本时,如MD5校验不通过,则status=1

通过升级ID兼容方案 和升级协议进行

相关推荐
lhbweilai2 分钟前
STM32 时钟源&时钟树(hal库)
stm32·单片机·嵌入式硬件
lhbweilai13 小时前
STM32 ADC模拟数字转换(hal库)
stm32·单片机·嵌入式硬件
坏柠13 小时前
通信协议入门:单片机怎样把一个数字发送出去?
单片机·嵌入式硬件
小僧景贤14 小时前
STM32 工程文件深度解析(Keil‑MDK + STM32CubeIDE)
stm32·单片机·stm32cubeide
国科安芯15 小时前
低轨卫星姿态与轨道控制系统中高可靠MCU的选型研究——基于AS32S601的抗辐照性能试验数据分析
分布式·科技·单片机·嵌入式硬件·系统架构
小羊先生car16 小时前
RTOS-F429-HAL-Freertos内存管理(2026/8/5)
c语言·单片机·rtos
zcmodeltech18 小时前
工业生产线沙盘模型多段灯带时序控制系统设计:基于STM32与Modbus RTU的连铸-热轧-镀锌全流程联动方案
stm32·单片机·嵌入式硬件·物联网·制造·嵌入式实时数据库·多分类
小僧景贤20 小时前
STM32F407 时钟系统超详解
stm32·单片机·嵌入式硬件
西城微科方案开发20 小时前
胎压计方案开发
单片机·嵌入式硬件
国科安芯20 小时前
卫星星务计算机数据管理中SEU容错机制的技术实现研究——以AS32S601存储器ECC架构为例
网络·单片机·算法·fpga开发·架构·云计算·risc-v