[信息] 关于ISP,IAP,ICP(SWD/JTAG)

[复制链接]
1010|19
木木guainv 发表于 2025-11-11 17:59 | 显示全部楼层 |阅读模式
以STM32F4为例,可在参考手册中查找到自 举模式与 存储器映射与自 举模式/物理重映射

59993690edefc3e4f6.png

93013690edf0447786.png

一、ISP(In-System Programming)
    在系统可编程,指电路板上的空白器件可以编程写入最终用户代码,而不需要从电路板上取下器件,已经编程的器件也可以用 ISP 方式擦除或再编程ISP 的时候需要用到 (bootloader) 自 举程序,自 举程序存储在 STM32 器件的内部自 举 ROM 存储器(系统存储器)中。其主要任务是通过一种可用的串行外设(USART、CAN、USB、I2C 等)将应用程序下载到内部 Flash 中。每种串行接口都定义了相应的通信协议,其中包含兼容的命令集和序列.
    ISP:in system program 在系统中编程,出厂前ST已经将自家的BootLoader写在rom中,此段代码是不可修改的。此引导程序也是我们为什么要用BOOT引脚设置芯片从rom中启动然后下载程序的原因。
    这个BootLoader可以用来接收usart1口(或者其他spi口)的信息,并把自己的应用程序写到flash中。通过ISP——rom中的BootLoader下载程序到flash的三个步骤:
1.设置BOOT启动模式从rom中启动
2.通过BootLoader把程序读进来写到flash
3.设置boot启动模式 从flash启动,复位后,程序正常运行。
如果我们的产品中的程序只有应用程序,则此时0x08000000地址存放的程序就是应用程序。ISP程序、应用程序的关系示意图如下:

86521690edf0d1e7cf.png

嵌入式自 举程序模式用于通过以下串行接口重新编程 Flash:
● USART1(PA9/PA10)
● USART3(PB10/11 和 PC10/11)
● CAN2(PB5/13)
● USB OTG FS(PA11/12) 从设备模式(DFU:器件固件升级)。
·USART 外设以内部 16 MHz 振荡器 (HSI) 频率运行,而 CAN 和 USB OTG FS 则需要相当 于 1 MHz 数倍(4 MHz 到 26 MHz 之间)的外部时钟 (HSE) 频率。 嵌入式自 举程序代码位于系统存储器中,在芯片生产期间由 ST 编程。
二、IAP :(in application program )
    在应用程序中编程,可以通过任何通信方式包括蓝牙internet对flash中的程序进行升级。除了ROM中被ST写了个BootLoader外,用户在flash中也可以自己写一个BootLoader,平时启动以后我们都是在flash中的BootLoader中运行,此方式方便我们把通过各种方式接收到的程序写到flash中。
    IAP程序与ISP程序所做的事情好像是一样的,都是引导加载程序,所以网上有很多文章把IAP程序与ISP程序都称为BootLoader程序,要注意区分。但是,ISP与IAP还是有点区别的。
    STM32内部Flash分为两部分,System Flash和User Flash。上电之后执行哪个Flash里的程序有boot脚来控制。
    System Flash内存放的是ST官方编写的自 举程序(ISP程序),我们是没有办法改变的。
    User Flash是我们可以使用的Flash空间,我们编写的代码就是要烧录到User Flash中。我们可以把User Flash分为两部分,前面一部分空间用于烧写我们编写的IAP程序,后面一部分用于烧写我们编写的应用程序。其中,IAP程序用于更新我们的应用程序。
    ISP程序用于把我们编写的程序更新到0x08000000地址上,如果我们的产品中的程序有IAP程序+应用程序,则此时0x08000000地址存放的程序就是IAP程序。ISP程序、IAP程序、应用程序的关系示意图如下:

16867690edf14c3808.png

三、ICP: (in circuit program )
    在线编程主要有两种,SWD/JTAG协议. STM8使用SWIM。
要注意的是,一般不使用内置SRAM 启动(BOOT1=1 BOOT0=1),因为SRAM 掉电后数据就丢失。多数情况下
SRAM 只是在调试时使用,也可以做其他一些用途。如做故障的局部诊断,写一段小程序加载到SRAM 中诊断板上的其他电路,或用此方法读写板上的Flash 或EEPROM 等。还可以通过这种方法解除内部Flash 的读写保护,当然解除读写保护的同时Flash 的内容也被自动清除,以防止恶意的软件拷贝。
一般BOOT0 和BOOT1 跳线都跳到0(地)。只是在ISP 下载的情况下,BOOT0=1,BOOT1=0 ,下载完成后,把
BOOT0 的跳线接回0,也即BOOT0=0,BOOT1=0 。
————————————————
版权声明:本文为CSDN博主「几个叶子」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44015616/article/details/154300607

80087690edd8a61920.png
60251690edd90a87e4.png
42840690edd96a0a90.png
24968690edd9cc6986.png
20287690edda204832.png
41320690edda86f835.png
21569690eddae7793a.png
25097690eddc756268.png
6532690eddd19328a.png
10059690eddd9b9c77.png
7945690edde057f1f.png
24755690edde845bba.png
80240690eddee00350.png
53721690eddf8064a1.png
40124690eddfedb77a.png
45392690ede03edbe1.png
47311690ede14829ed.png
72747690ede3466f12.png
8574690ede3e9fa66.png
10952690ede4651359.png
86468690ede5c825c3.png
40056690ede649470d.png
73688690ede6ca6c09.png
15021690edecd6d898.png
94630690eded4b4a1b.png
79261690ededb13478.png
28338690edee0ab64c.png
kmzuaz 发表于 2025-11-14 21:42 | 显示全部楼层
STM32 的 ISP、IAP、ICP(SWD/JTAG) 是三种核心的 固件烧录 / 升级方式
ingramward 发表于 2025-11-14 22:00 | 显示全部楼层
用 ST-Link 通过 SWD 下载与调试程序?
biechedan 发表于 2025-11-15 15:35 | 显示全部楼层
STM32的ISP、IAP、ICP是三种不同的烧录/编程方式,其中ICP可通过SWD或JTAG协议实现
deliahouse887 发表于 2025-11-15 16:25 | 显示全部楼层
ISP 是 STM32 内置的 “系统存储区烧录模式”—— 芯片出厂时已在 “系统存储区” 固化了官方 Bootloader,通过 Boot 引脚触发该模式后,可通过 USART/I2C/SPI 接口烧录固件。
updownq 发表于 2025-11-15 17:08 | 显示全部楼层
通常加入密码验证、签名验证等安全机制, 只有合法和未被篡改的新固件才能被写入。
modesty3jonah 发表于 2025-11-16 19:44 | 显示全部楼层
调试引脚不可复用为其他功能,否则会导致调试失败
backlugin 发表于 2025-11-17 15:06 | 显示全部楼层
产品运行时,Bootloader 可通过任意接口接收新固件,擦除 Application 区并写入新固件,实现 “不拆机、不切换 Boot 引脚” 的升级。
mollylawrence 发表于 2025-11-17 17:14 | 显示全部楼层
ISP/IAP过程中需保证供电稳定,否则可能导致Flash写入失败
jackcat 发表于 2025-11-17 17:42 | 显示全部楼层
SWD接口通常需要连接SWDIO、SWCLK、GND等引脚,JTAG接口则需要连接更多的引脚。
mattlincoln 发表于 2025-11-17 19:24 | 显示全部楼层
STM32 内置 JTAG/SWD 调试模块,通过专用引脚与调试器连接
lzmm 发表于 2025-11-17 22:34 | 显示全部楼层
ICP/ISP 是 “外部工具主导” 的烧录
jtracy3 发表于 2025-11-18 19:53 | 显示全部楼层
ICP在开发阶段具有显著优势,其强大的调试功能可以大大提高开发效率。
ISP/IAP则更侧重于量产和现场应用,提供了更便捷的固件更新方式。
nomomy 发表于 2025-11-18 20:36 | 显示全部楼层
IAP 是 “用户程序自升级”—— 在 STM32 Flash 中划分两个区域:Bootloader 区和 Application 区。
plsbackup 发表于 2025-11-18 21:30 | 显示全部楼层
在BootLoader中加入版本校验,避免错误固件导致永久失效
lzbf 发表于 2025-11-19 09:16 | 显示全部楼层
ST 官方工具 STM32CubeProgrammer
updownq 发表于 2025-11-19 09:37 | 显示全部楼层
ISP 是 “板级有线量产烧录”,ICP 是 “开发 / 调试阶段在线烧录”,IAP 是 “产品运行中远程 / 本地升级”。
louliana 发表于 2025-11-19 11:12 | 显示全部楼层
如何设计 IAP 升级逻辑?              
zerorobert 发表于 2025-11-19 14:18 | 显示全部楼层
ISP需要设置BOOT0为高电平,BOOT1为低电平,让芯片从系统存储器启动。
geraldbetty 发表于 2025-11-19 17:00 | 显示全部楼层
如何实现 STM32 的 UART ISP 烧录?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

195

主题

4389

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部