单片机程序烧录的3种方式(ISP、ICP、IAP)是什么?

发布者:JoyfulSerenade最新更新时间:2021-06-30 来源: eefocus关键字:单片机  程序烧录  ISP  ICP  IAP 手机看文章 扫描二维码
随时随地手机看文章

说起给单片机烧录程序,大家应该都不陌生吧,我最早接触单片机是从51单片机开始的,型号是STC89C52RC,当时烧录程序就是用的下面这种烧录软件——STC-ISP


这种方式,通过串口连接单片机,选择一个合适的波特率就可以烧录了。


后来学习STM32,编程时使用KEIL软件自带的下载按钮就能下载程序,方便了不少,但需要额外使用J-Link等下载器。


再后来,接触到产品研发,给已经发布出的产品升级,都是要靠远程无线升级的(想想看,产品已经到客户那里了,当软件需要升级时,要是还使用有线的方式烧录程序,得有多麻烦)

既然给单片机烧录程序的方式有多种,那烧录方式具体怎么分类呢?

可以分为3种:

  • ISP(In-System Programming)

    在系统编程,使用引导程序(Bootloader)加上外围UART/SPI等接口进行烧录。

  • ICP (In-circuit programmer)

    在电路编程,使用SWD/JTAG接口。

  • IAP(In-Application Programming)

    指MCU可以在系统中获取新代码并对自己重新编程,即用程序来改变程序。

这3种烧录方式的原理是什么呢?在分析原理之前,需要先了解一下单片机Flash的访问地址,看看程序是烧录到哪个位置了。


单片机Flash在地址映射表中位置

下图是一张STM32F4xx的地址映射表,从0x0000 0000到0xFFFF FFFF,总计4Gbyte。单片机的片上Flash、片上RAM、片上外设以及外部扩展接口的访问地址,都被映射到这4Gbyte的范围之内。

这张图中,我们需要先注意下半部分

  • Main memory 主存储区

通常,我们编写的代码,是放到主存储区的起始位置(0x0800 0000)开始运行的,烧录程序时,直接将程序烧录到这里即可(KEIL软件给STM32烧录程序的默认烧写地址就是0x0800 0000开始)

  • System memory系统存储区

System memory(起始位置0x1FFF 000)是STM32在出厂时,由ST在这个区域内部预置了一段BootLoader, 也就是我们常说的ISP程序 ,这是一块ROM,出厂后无法修改。

了解了程序的具体地址,还要看一下单片机的启动方式:


启动方式选择

STM32有两个BOOT引脚,通过配置不同的高低电平,可以让单片机从不同的地址开始运行。

  • BOOT0=0, BOOT1任意

通常我们是在Main memory 主存储区(0x0800 0000)运行程序,BOOT0引脚拉低即可。

这种情况,KEIL软件给STM32烧录程序,就是直接在这个地址烧录,烧录完,直接在这个地址处运行。

  • BOOT0=1,BOOT1=0

这种情况就用在使用串口方式给STM32烧录程序,这时单片机从系统存储器(0x1FFF 0000)启动,运行的是出厂预置的BootLoader程序,可以接收串口发来的程序,并将其写入Main memory(0x0800 0000),程序烧录完成后,再将BOOT0引脚拉低,Main memory(0x0800 0000)处运行刚烧录的代码了。

  • BOOT0=1,BOOT1=1

这种情况是从内存中启动,内置SRAM(也就是STM32的内存中),既然是SRAM,自然也就没有程序存储的能力了,这个模式一般用于程序调试。目前我还没用过这种方式,大家平时用这种方式的多么?

BOOT0BOOT1启动方式说明
0×闪存存储器主闪存存储器被选为启动区域
10系统存储器系统存储器被选为启动区域
11内置SRAM内置SRAM被选为启动区域

有了上面的了解,再来看一下ISP、ICP和IAP


ISP(串口烧录)

特点:

  • BOOT0 = 1,BOOT1 = 0

  • 启动地址:0x1FFF0000

  • 使用串口下载程序

  • 系统存储器(System memory)启动方式运行内置的Bootloader,将程序写入主存储区

  • 重启后,需要再将BOOT0拉低,从主存储区启动程序

下图是ISP方式的烧录,使用FlyMcu这个软件,通过串口给STM32烧录程序

ICP(JTAG口烧录)

特点:

  • BOOT0 = 0,BOOT1 = x

  • 启动地址:0x08000000

  • 使用JTAG或者SWD模式下载程序

  • 主闪存存储器(Flash memory)启动方式,将程序在主存储区写入

  • 重启后也直接从这启动程序

下图是ICP方式的烧录,使用JFlash软件或KEIL,通过J-Link给STM32烧录程序

KEIL软件的默认下载地址,就是从0x0800 0000 开始的。

IAP

IAP的原理与上面两种有较大区别,这种方式将主存储区又分成了两个区域(根据实际需要由开发者自行分配),0800 0000起始处的这部分,存储一个开发者自己设计的Bootloader程序,另一部分存储真正需要运行的APP程序。


单片机的Bootloader程序,其主要作用就是给单片机升级。在单片机启动时,首先从Bootloader程序启动,一般情况不需要升级,就会立即从Bootloader程序跳转到存储区另一部分的APP程序开始运行。


假如Bootloader程序时,需要进行升级(比如APP程序运行时,接收到升级指令,可以在flash中的特定位置设置一个标志,然后触发重启,重启后进入Bootloader程序,Bootloader程序根据标志位就能判断是否需要升级),则会通过某种方式(比如通过WIFI接收升级包,或借助另一块单片机接收升级包,Bootloader再通过串口或SPI等方式从另一块单片机获取升级包数据)先将接收到的程序写入存储区中存储APP程序的那个位置,写入完成后再跳转到该位置,即实现了程序的升级

关键字:单片机  程序烧录  ISP  ICP  IAP 引用地址:单片机程序烧录的3种方式(ISP、ICP、IAP)是什么?

上一篇:单片机I/O控制方式(UART中断和DMA中断的区别)
下一篇:零基础学习单片机必看的一些知识点

推荐阅读最新更新时间:2024-11-01 22:17

新型高集成度 C2000™ 32 位 Piccolo™ F2805x 微控制器
2012 年 12 月 19 日,北京讯 日前,德州仪器 (TI) 宣布推出最新电机控制解决方案 — 新型高集成度 C2000™ Piccolo™ F2805x 微控制器、电机控制软件、特定应用开发工具和广泛的支持,使电机控制设计不再复杂。这些 Piccolo 微控制器经过优化,适用于各种三相变频电机控制应用,旨在提升汽车泵、电泵、风机、牵引驱动装置、纺织机等的电源效率和控制性能。 新型 Piccolo F2805x 微控制器将许多模拟组件紧凑封装在芯片上以提高系统效率,减少分立部件的数量。借助可采用 C 语言进行编程的控制律加速器 (CLA) 片上协处理器,Piccolo F2805x 微控制器可实现 TMS320C2
[电源管理]
28. 数字电压表
1. 实验任务 利用单片机AT89S51与ADC0809设计一个数字电压表,能够测量0-5V之间的直流电压值,四位数码显示,但要求使用的元器件数目最少。 2. 电路原理图 图1.28.1 3. 系统板上硬件连线 a) 把 单片机系统 区域中的P1.0-P1.7与 动态数码显示 区域中的ABCDEFGH端口用8芯排线连接。 b) 把 单片机系统 区域中的P2.0-P2.7与 动态数码显示 区域中的S1S2S3S4S5S6S7S8端口用8芯排线连接。 c) 把 单片机系统 区域中的P3.0与 模数转换模块 区域中的ST端子用导线相连接。 d) 把 单片机系统 区域中的P3.1与 模数转换模块
[单片机]
28. 数字电压表
单片机乘法运算电路
单片机 乘法运算电路 可以反馈不同的X和Y输入,或使用简单的单端接地输入。连接输入决定了输出的极性。
[电源管理]
<font color='red'>单片机</font>乘法运算电路
单片机】Keil+Proteus流水灯(模块化编程)
本篇文章: 主要是Keil的模块化编程,同时实现了一个小实验,通过Keil模块化编程来实现流水灯(设计了三种流水方式)。 进入正文: 一、Proteus仿真图 1)在编写代码的时候,我们首先要做的就是绘图,绘制好模型图之后,才可以编写对应的代码。首先,在Proteus创建一个工程(PS:新手请看:Proteus和Keil分别创建单片机工程) 2)根据自己的要求,绘制指定的图形。此次做的是流水灯,请看图: (PS:如果对画图有难度的话,请查看:Proteus画图) 3)绘制好Proteus之后,开始Keil部分。 二、Keil的模块化编程 Keil模块化编程:对代码分开管理,每一部分都是一个完整的代码,需要使用的时候,最
[单片机]
【<font color='red'>单片机</font>】Keil+Proteus流水灯(模块化编程)
自制简单实用的51单片机开发板
一、电路原理 电路如下图所示。89S52单片机的P0口外接8x1kΩ的上拉排阻与1602字符型液晶屏的数据线相连,P2.5、P2.6、P2.7与1602字符型液晶屏的三根控制线相连,组成系统的显示部分;P1口与16个按键开关相连,组成4×4行列式键盘;J4为RS232通信插座,一端接MAX232,一端通过串行通信电缆与电脑的串口相连,以实现单片机系统与电脑间的串行通信,单片机的串行通讯口P3.0、P3.1通过J1接至MAX232.J5、J6将单片机各管脚引出,以方便扩展使用;K17为复位开关,Dl、D2分别为复位和电源指示灯。 二、PCB制作及注意事项 PCB板如右图所示。黑线部分为底层,白线部分为顶层,覆铜部分为底层地。此
[单片机]
自制简单实用的51<font color='red'>单片机</font>开发板
单片机延时1s流水灯程序
//######################################################################################## //例程功能:延时1s流水灯 //例程作者 //时间:2016年11月18日 //######################################################################################## #include reg52.h #include intrins.h                                         //循环移动头文件 #define ui
[单片机]
单片机学习:单片机编程入门十一
单片机编程入门十一:单片机指令(四)算术运算类指令 不带进位位的加法指令 带进位位的加法指令 带借位的减法指令 乘法指令 除法指令 加1指令 INC A INC Rn INC direct INC @Ri INC DPTR 用途很简单,就是将后面目标中的值加1。例:(A)=12H,(R0)=33H,(21H)=32H,(34H)=22H,DPTR=1234H。执行下面的指令: INC A (A)=13H INC R2 (R0)=34H INC 21H (21H)=33H INC @R0 (34H)=23H INC DPTR ( DP
[单片机]
爱特梅尔和EnSilica合作可定制MCU的SoC
爱特梅尔公司 (Atmel® Corporation) 和英国 IC 设计服务企业 EnSilica 宣布合作,采用爱特梅尔基于 ARM® 的 AT91CAP 可定制微控制器作为基础技术,为双方共同的客户开发系统级芯片 (system-on-chip) 。根据协议, EnSilica 为客户提供支持,将其设计转化为用于 CAP ™ 金属可编程部分的网表 (netlist) 。接着,网表将被映射到 CAP 评测板上,在转交给爱特梅尔用于布局布线和金属编程之前进行验证。 EnSilica 公司在 ASIC 和 FPGA 设计方面拥有丰富的经验,能够利用爱特梅尔的技术快速实施产品。如果有需要, EnSilica 可以
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved