stm32单片机程序烧写方式ISP和IAP区别

在线编程目前有两种实现方法:在系统编程(ISP)和在应用编程(IAP)。

ISP一般是通过单片机专用的串行编程接口对单片机内部的Flash存储器进行编程,而IAP技术是从结构上将Flash存储器映射为两个存储体,当运行一个存储体上的用户程序时,可对另一个存储体重新编程,之后将控制从一个存储体转向另一个。

ISP的实现一般需要很少的外部电路辅助实现,而IAP的实现更加灵活,通常可利用单片机的串口接到计算机的RS232口,通过专门设计的固件程序来编程内部存储器。

1、字义区别:

ISP:In-System Programming          在系统编程

IAP:In Application Programming  在应用编程

2、工作方式:

ISP:

用烧写器(比如j-link,st-link)将code写入Flash,芯片在目标开发板,不脱离系统,即称在系统编程。

优点:

芯片固件自带的bootloader无需开发人员编写;

缺点:

1、固定的通讯方式,一般为串口;

2、固定串口号stm32为uart1;

3、需要额外电路(按键或自动下载电路)

IAP升级的基本原理:

MCU的IAP升级是指通过软件方式对MCU的固件进行升级,而无需通过硬件操作。该方法使用MCU内部的自带BootLoader来完成升级过程。其基本原理如下:

1. MCU的Flash内存被划分为两个区域,一个是应用程序区,另一个是BootLoader区。

2. 初始状态下,BootLoader区为空,应用程序区包含了设备的初始固件。

3. 当需要进行升级时,新的固件将被下载到设备中。

4. 设备重启后,BootLoader检测到新的固件存在,将其从外部存储器加载到Flash的应用程序区。

5. 升级完成后,设备将启动新的固件。

比如:

汽车电子上比较常见的can总线:

优点:

理论可以实现单片机支持的任何接口的程序(正常量产产品很有用;)

无需额外下载电路,软件命令的方式进入下载模式;

缺点:

1、需要开发人员编写特定的bootloader,实现比较麻烦;

2、需要特定的上位机配合;

PS:IAP的引导程序必须通过ISP方式下载。

3、应用场合:

ISP:升级程序必须使用烧写器,且编程人员必须到场;不过好一点的是不必拆机器了。

IAP:只需要将固件发给维修工程师,由维修工程师去更新;如果有网管系统的话,用网管下载一切搞定,人不用跑来跑去。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32三种启动模式对应的存储介质均是芯片内置的,它们是: 1)用户闪存 = 芯片内置的Flash。 2)系统存储器 = 芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP程序。这个区 域的内容在芯片出厂后没有人能够修改或擦除,即它是一个ROM区。 3)SRAM = 芯片内置的RAM区,就是内存啦。            在每个STM32的芯片上都有两个管脚BOOT0和BOOT1,这两个管脚在芯片复位时的电平状态决定了芯片复位后从哪个区域开始执行程序,见下表: BOOT1=x   BOOT0=0   从用户闪存启动,这是正常的工作模式。 BOOT1=0   BOOT0=1   从系统存储器启动,这种模式启动的程序功能由厂家设置。 BOOT1=1   BOOT0=1   从内置SRAM启动,这种模式可以用于调试。         在系统复位后, SYSCLK的第4个上升沿, BOOT引脚的值将被锁存。用户可以通过设置BOOT1和BOOT0引脚的状态,来选择在复位后的启动模式。         在从待机模式退出时, BOOT引脚的值将被被重新锁存;因此,在待机模式下BOOT引脚应保持为需要的启动配置。在启动延迟之后, CPU从地址0x0000 0000获取堆栈顶的地址,并从启动存储器的0x0000 0004指示的地址开始执行代码。        因为固定的存储器映像,代码区始终从地址0x0000 0000开始(通过ICode和DCode总线访问),而数据区(SRAM)始终从地址0x2000 0000开始(通过系统总线访问)。 Cortex-M3的CPU始终从ICode总线获取复位向量,即启动仅适合于从代码区开始(典型地从Flash启动)。 STM32F10xxx微控制器实现了一个特殊的机制,系统可以不仅仅从Flash存储器或系统存储器启动,还可以从内置SRAM启动。         根据选定的启动模式,主闪存存储器、系统存储器或SRAM可以按照以下方式访问: ● 从主闪存存储器启动:主闪存存储器被映射到启动空间(0x0000 0000),但仍然能够在它原有的地址(0x0800 0000)访问它,即闪存存储器的内容可以在两个地址区域访问, 0x0000 0000 或 0x0800 0000。 ● 从系统存储器启动:系统存储器被映射到启动空间(0x0000 0000),但仍然能够在它原有的地址(互联型产品原有地址为0x1FFF B000,其它产品原有地址为0x1FFF F000)访问它。(可用于串口下载) ● 从内置SRAM启动:只能在0x2000 0000开始的地址区访问SRAM。 注意: 当从内置SRAM启动,在应用程序的初始化代码中,必须使用NVIC的异常表和偏移寄存器,从新映射向量表之SRAM中。 ————————————————
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值