IAP(In-Application Programming)在应用编程,浅显易懂,按照字面意思即是在程序不关闭情况下,对应用进行再次写入程序,对程序的写入需要传输数据,而传输数据的前提是通信,
IAP对代码进行更新可以简要分为以下过程:
- 将项目代码分为两块,第一块不执行功能函数,只是执行通信对代码和命令进行传输,决定对第二部分代码是否进行更新
- 如果需要更新则执行第三步操作,不需要更新则执行第四步操作
- 进行第二部分代码更新
- 执行第二部分代码
第一部分代码可以看成IAP,第二部分代码可以看成APP
IAP和APP分别有两套中断向量表:
- 当在执行IAP时,将app烧写到Flash中在跳转到App中断向量表中可以执行APP程序
- 从APP跳转到IAP时,需要将APP中断向量表修改成IAP中断向量表,然后执行RESET中断处理程序执行流程
一片STM32芯片的Code(代码)区内一般只有一个用户程序。而IAP方案则是将代码区划分为两部分,两部分区域各存放一个程序,一个叫bootloader(引导加载程序),另一个较user application(用户应用程序)。bootloader在出厂时就固定下来了,在需要变更user application时只需要通过触发bootloader对userapplication的擦除和重新写入即可完成用户应用的更换。如图所示
若程序采用IAP,则内置Flash结构如下图
总结:
总的来说STM32的IAP方案实现需要在进行用户程序之前加一段Bootloader程序,BootLoader程序的作用就是:
①什么都不做,直接跳转到用户程序。
②删除原有的用户程序,读取*.bin文件数据并将数据重新写入新的用户程序。
对于用户程序相比普通的编程只需要做三步改动即可
①改变中断向量表。
②改变代码存放的地址空间
③修改生成*.bin文件
ISP(In-System Programming)在系统编程,在离线状态下对芯片进行烧写。
Flash擦除测试流程:利用密匙对Flash进行解锁—>对Flash进行擦除—>对Flash进行写入—>写入完成进行验证—>再次上锁
两者区别:IAP与ISP的是否停机烧录