一、IAP简介
IAP就相当于一个用户自定义的bootloader,这样一来,芯片上就有两个bootloader,一个是芯片出厂前固化的(关于这个bootloader究竟在哪儿,我暂时还不清楚)。另一个是用户自定义的,用户可以在程序运行的过程中对内部flash部分的区域进行烧写,主要用于产品发布后,固件程序进行更新升级。因此设计固件程序时需要编写两个项目代码:第一个是bootloader程序,主要通过外设通信(UART、USB、ETH、SD卡等)来接收程序或数据,这段程序通过JLINK或者ISP烧入;第二个称为APP程序。这段程序根据地址的不同,可以放在SRAM段和FLASH段。若放在FLASH段,一般从最低地址区开始存放BootLoader,接着是APP 程序。若放在SRAM段,则将SRAM分为三部分,第一部分给Bootloader使用,第二部分给APP程序使用,第三部分用作为APP程序的内存。
图1.1 STM32内存地址映射
二、IAP程序流程
------------------------------------------------------------------------------------------------------------------------
BOOT1 | BOOT0 | 启动方式
X | 0 | 从STM32内置flash启动,JTAG或者SWD固化程序位置
1 | 1 | 从STM32内置SRAM启动,由于SRAM没有程序存储能力,这个模式一般用于程序debug
0 | 1 | 从STM32内置ROM启动,使用串口借