在这里就不讲IAP升级原理了,直接讲方法及步骤。
一、把Flash分为三个区域:
(1)bootloader(引导)区:存放引导程序
(2)应用功能区:存放应用程序
(3)升级功能区:存放升级程序
三个区域划分的大小要根据所使用单片机FLASH大小和自己三个程序大小来划分。一般来说,引导程序所占空间较小;应用程序和升级程序大小差不多 ,根据自己的实际情况划分区域。
二、以STM32F4XX为例讲解。
Flash大小为1M,地址范围0x08000000--0x080FFFFF
(1)引导区存储大小:0x10000,即64K,应用范围:0x08000000--0x08010000(根据自己情况设置)
部分引导程序:
程序从0x08000000开始运行引导程序,检测到有升级标志位,擦除应用区的程序,然后再从升级功能区把升级程序读出写到应用程序区。
(2)应用区存储大小:0x70000,即448K,应用范围0x08010000--0x08080000(根据自己情况设置)
应用出现初始化时,需要设置向量表偏移地址,即应用区的起始地址减去引导区大小。
应用程序部分程序:
//设置中断向量表偏移,该函数是为配合IAP,当不使用IAP时需注释该句并修改设置
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x00010000);
我升级程序使用的U盘升级,也可以是其他方式的升级。把升级程序拷贝到U盘。程序检测到U盘里面有升级文件(一般是.bin文件),擦除升级功能区,从U盘把文件数据拷贝到升级区。并在特定位置设置一个升级标志位,程序继续按照老程序运行。当设备重启时,从引导区开始执行引导程序,检测是否有升级标志位,若有,程序擦除应用区程序,再把升级区程序搬到应用区。。这样引导程序运行完,开始运行应用区程序,这样就是运行新的程序了。
(3)升级功能区:剩下的为升级功能区,应用范围0x08080000--0x080FFFFF。存放待升级程序。
详细的引导程序,可以去我的资源里下载。。。