可以分为3种:
-
ISP(In-System Programming)
在系统编程,使用引导程序(Bootloader)加上外围UART/SPI等接口进行烧录。
-
ICP (In-circuit programmer)
在电路编程,使用SWD/JTAG接口。
-
IAP(In-Application Programming)
指MCU可以在系统中获取新代码并对自己重新编程,即用程序来改变程序。
1、ISP(串口烧录)
特点:
-
BOOT0 = 1,BOOT1 = 0
-
启动地址:0x1FFF0000
-
使用串口下载程序
-
系统存储器(System memory)启动方式运行内置的Bootloader,将程序写入主存储区
-
重启后,需要再将BOOT0拉低,从主存储区启动程序
2、ICP(JTAG口烧录)
特点:
-
BOOT0 = 0,BOOT1 = x
-
启动地址:0x08000000
-
使用JTAG或者SWD模式下载程序
-
主闪存存储器(Flash memory)启动方式,将程序在主存储区写入
-
重启后也直接从这启动程序
3、IAP(升级/跳转程序)
IAP的原理与上面两种有较大区别,这种方式将主存储区又分成了两个区域(根据实际需要由开发者自行分配),0800 0000起始处的这部分,存储一个开发者自己设计的Bootloader程序,另一部分存储真正需要运行的APP程序。
单片机的Bootloader程序,其主要作用就是给单片机升级。在单片机启动时,首先从Bootloader程序启动,一般情况不需要升级,就会立即从Bootloader程序跳转到存储区另一部分的APP程序开始运行。
假如Bootloader程序时,需要进行升级(比如APP程序运行时,接收到升级指令,可以在flash中的特定位置设置一个标志,然后触发重启,重启后进入Bootloader程序,Bootloader程序根据标志位就能判断是否需要升级),则会通过某种方式(比如通过WIFI接收升级包,或借助另一块单片机接收升级包,Bootloader再通过串口或SPI等方式从另一块单片机获取升级包数据)先将接收到的程序写入存储区中存储APP程序的那个位置,写入完成后再跳转到该位置,即实现了程序的升级