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 用户自定义配置(屏幕亮度、掉电配置等)

浙公网安备 33010602011771号