前段时间有朋友在群里聊到单片机烧录程序什么情况要切换BOOT0、BOOT1?自己设计板子,不知道如何选择。
这种情况就是对单片机的启动条件分不清。
ISP(在系统编程)
ISP方式利用单片机出厂内置的Bootloader,从系统存储区域启动,通过UART/SPI等串行接口接收外部固件,再写入主存储区。主要步骤如下:
- 将BOOT0拉高(1),BOOT1拉低(0),MCU复位进入内置Bootloader。
- 通过串口工具(如STC-ISP、FlyMcu)发送.hex/.bin文件至单片机。
- Bootloader接收并写入主Flash(0x0800 0000起)。
- 烧录完成后,将BOOT0拉低(0),复位后从主Flash运行用户程序。
ISP方式免拆板;适合批量远程或现场在线升级;烧录速率受串口波特率限制;仅支持预置协议。
ICP(在电路编程)
ICP方式通过JTAG或SWD调试接口,使用专用烧录器(如J-Link、ST-Link)直接访问并擦写主Flash,无需Bootloader。主要步骤如下:
- 将BOOT0拉低(0),MCU复位进入主存储启动模式。
- PC端IDE(Keil)或辅助软件(J-Flash)连接调试器。
- 一键下载:擦除→烧录→校验→启动。
ICP方式速度快;可单步调试;烧录灵活;但是需外置下载器;产品现场不便使用;成本较高。
IAP(在应用编程)
IAP在主存储区预留两段:一段为开发者自定义Bootloader,另一段为用户APP。
MCU启动先运行Bootloader,根据条件(按键/标志/网络)判断是否需从外部获取新固件并写入APP区域。主要步骤如下:
- MCU复位,先执行自定义Bootloader。
- 检查升级标志,无需升级则跳转至APP,否则启动升级流程(如通过UART/Wi-Fi下载新固件)。
- Bootloader将新固件写入APP区后跳转执行。
IAP方式灵活;可实现无线远程升级;无需外部工具;但是设计和实现复杂;占用Flash空间。