10. 片内Flash和片外Flash&片内flash的Boot作用

1. Flash分为片内Flash和片外Flash,下面主要介绍片内flash:
    1.1 片内Flash要存放:
        一. 程序代码区
            1. 启动文件startup_stm32f429xx.s(复位中断向量表、堆栈初始化、中断服务函数入口,存在Flash起始地址0x08000000)
            2. 内核驱动代码,HAL库底层、ADC/SPI/LTDC/FMC、串口、中断处理逻辑。
            3. 业务逻辑代码:Model/Presenter、测温算法、控制逻辑、触摸、LCD刷新函数。
            4.TouchGFX自动生成的GUI代码(包括字体点阵、图片资源、界面控件等)
        二. 常量/只读数据区 const
            1.字库、图片、数组常量(固定只读,放Flash中不占用RAM)
        三. 中断向量表(固定Flash头部,存放所有外设中断,HardFault、SysTick入口地址,程序运行上电首先读取。)
        四. 用户自定义区(用户手动划分一段Flash删去存放掉电不丢失参数)(温度阈值、屏幕亮度、配置参数等)

注意:主流STM32(F1/F4/F0/F7/H7/L4)的片内Flash起始地址统一为0x08000000,复位后CPU自动从0x08000000读取栈顶,0x08000004读取复位中断入口。
STLink、cubeProgrammer烧录程序默认从0x08000000写入。其中STM32F429IGT6的片内Flash为1MB,也就是0x08000000~0x080FFFFF

2. 在实际项目中,片内Flash的空间(1MB)大多数是不够的,这就要用到片外flash,这时候片内flash一般就只放1个Boot(大约几十K),Boot的功能有两个:1.初始化片外flash,2.用于外设升级,比如用USB升级。
除此之外片内flash的boot还有以下几点功能:
    2.1 硬件底层初始化(包含片外flash的初始化)
        2.1.1 最小系统初始化:时钟、看门狗、串口/USB、复位、SDRAM;
        2.1.2 初始化外部存储(外部Flash),完成外部存储的读写、擦除、ID校验;
        2.1.3 初始化通信外设:USB OTG、网口、串口、CAN;
    2.2 固件升级服务(如USB升级)(支持多通道升级如USB、串口、以太网、SD卡)
        2.2.1 升级流程:
            a. 接收分片固件包,写入片外flash升级分区,CRC/MD5校验固件。
            b. 双备份分区机制(升级失败自动回滚旧版本)
            c. 版本号管理
    2.3 固件校验与跳转App
        2.3.1 读取片外Flash中App分区的校验标记,栈地址,复位中断向量;
        2.3.2 校验App合法性(标志位、CRC、硬件匹配码),如果合法则关闭Boot占用外设、切换中断向量表,跳转到片外Flash的App运行。
        2.3.3 如果校验失败或升级失败则停留在Boot,等待重新升级,这样不会死机。
    2.4 一键烧录、恢复出厂功能:产线一键烧录App到片外Flash,清楚配置分区,恢复出厂固件。

3. 片外Flash
    3.1 存放新接收的升级固件,升级后覆盖App分区
    3.2 存放资源(图片、字体等)
    3.3 存放App主程序
    3.4 用户自定义配置(屏幕亮度、掉电配置等)

 

posted @ 2026-07-16 19:29  Vak  阅读(14)  评论(0)    收藏  举报
zhanghz production