在开发阶段,通常采用ICP或者ISP的方式更新单片机软件,例如在stm32系列MCU上不仅可以更新程序,而且还能够调试实时观测内存数据、外设状态和全局变量以及单步运行、设置断点等。
但是当产品发布以后,这种单片机或者微控系统被嵌入某个对象系统中,很难采用ICP方式进行单片机程序更新;因此需要一种仅通过uart、can、eth等通信接口就可以实现单片机程序更新的技术,IAP便是其中一种;
IAP全称In Application programmer即在应用编程。IAP技术将程序存储器分为若干区域,其中一种是IAP+APP区域,APP用来存储正常工作的程序,IAP用来存储通过通信接口修改APP区域的程序;
本文还是以stm32为例,介绍一下和IAP有关知识。
栈指针SP:程序运行必须的条件,SP必须指向一个合法的地址空间,stm32有两个sp,msp和psp,如果不使用rtos,默认使用msp,使用rtos的朋友们注意跳转前先切换到对应的sp,否则系统可能崩溃;复位后sp值是程序存储器第一个字;
复位地址:单片机复位后需要复位地址,它便是程序存储器的第二个字;
在stm32上程序存储器一般是指Flash,在标准库或者HAL库中有对Flash的驱动程序,主要使用擦除函数,读存储器函数,写存储器函数;
Flash分区:假设程序存储器大小为48KB
0x08000000-0x08003FFF:16KB IAP区域
0x08004000-0x0800FFFF:48KB APP区域
根据需要可以添加其他分区,例如系统参数区域,系统标志区域,以及保留区域等
相关文章