0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

程序烧录方式你了解多少?

FPGA之家 来源:CSDN技术社区 作者:码农爱学习 2021-04-30 11:02 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

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

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

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

50071b6e-a960-11eb-9728-12bb97331649.png

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

可以分为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的范围之内。

535fdbac-a960-11eb-9728-12bb97331649.png

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

Main memory 主存储区

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

System memory系统存储区

System memory(起始位置0x1FFF 0000)是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,自然也就没有程序存储的能力了,这个模式一般用于程序调试。目前我还没用过这种方式,大家平时用这种方式的多么?

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

ISP(串口烧录)

特点:

BOOT0 = 1,BOOT1 = 0

启动地址:0x1FFF0000

使用串口下载程序

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

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

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

53e028e8-a960-11eb-9728-12bb97331649.png

ICP(JTAG口烧录)

特点:

BOOT0 = 0,BOOT1 = x

启动地址:0x08000000

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

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

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

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

5460ec76-a960-11eb-9728-12bb97331649.png

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

548cfe74-a960-11eb-9728-12bb97331649.png

IAP(升级/跳转程序)

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

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

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

551882aa-a960-11eb-9728-12bb97331649.png

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6074

    文章

    45340

    浏览量

    663562
  • 程序
    +关注

    关注

    117

    文章

    3836

    浏览量

    84762
  • 下载器
    +关注

    关注

    1

    文章

    63

    浏览量

    13306

原文标题:程序烧录方式知多少?

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Linux 下交叉编译实战:跑起来的第一个 STM32 程序

    很多开发者第一次接触STM32,总会被“交叉编译”、“烧录程序”等概念绕晕。其实方法很简单:在Linux下配置交叉编译环境,编写简单程序,然后烧录到STM32,就可以看到成果了。本文带
    的头像 发表于 11-24 19:04 242次阅读
    Linux 下交叉编译实战:跑起来<b class='flag-5'>你</b>的第一个 STM32 <b class='flag-5'>程序</b>

    烧录?找他!找他!找他!

    点击蓝色字关注我们!一个努力中的公众号长的好看的人都关注了 ​作为一个存储,MCU等芯片提供综合服务的芯片代理商,我们深刻了解客户对高效、及时、专业烧录服务的迫切需求。​ 我们除了提供电子元器件,还
    的头像 发表于 10-13 15:40 233次阅读

    nRF54芯片怎么烧录程序&amp;nrfutil的安装使用

    因为最近有许多用户使用nRF54系列芯片遇到了烧录问题,所以给大家讲一下如何给nRF54系列烧录程序(nRF52系列产品也可以使用): 一、Nordic 新的烧录命令工具以及其他必要驱
    发表于 09-29 22:09

    单片机烧录原理是怎样的?辉芒微单片机烧录程序详细步骤讲解

    到上位机发来的“握手”指令,就进入 ISP 模式,把后续数据写入 Flash,否则直接跳转到用户程序。   辉芒微烧录的 3 种方式 方式 接口 场景 特点 ICP SWDIO/SWC
    的头像 发表于 09-17 16:14 1386次阅读
    单片机<b class='flag-5'>烧录</b>原理是怎样的?辉芒微单片机<b class='flag-5'>烧录</b><b class='flag-5'>程序</b>详细步骤讲解

    STM32程序烧录方式

    电子发烧友网站提供《STM32程序烧录方式.pdf》资料免费下载
    发表于 08-28 16:03 6次下载

    程序烧录原理

    行编程,而ICSP则主要用于Arduino,通过SPI协议进行烧录 总的来说,程序烧录方式的选择取决于具体的应用需求和硬件条件。了解不同
    发表于 06-17 11:29

    一般烧录烧录MCU常见的设置和配置方法

    本帖最后由 jf_99460966 于 2025-6-24 10:46 编辑 什么是烧录-义嘉泰带你深度了解IC烧录服务:https://bbs.elecfans.com
    发表于 06-17 11:26

    什么是烧录-义嘉泰带你深度了解IC烧录服务

    烧录需求提供强有力的保障,按照企业的需求定制烧录内容。(烧录机:管装烧录机、编带烧录机、托盘烧录
    发表于 06-05 16:13

    #烧录芯片 #单片机 #存储芯片 #烧录机 #烧录器 什么是烧录

    烧录
    jf_99460966
    发布于 :2025年05月29日 11:25:25

    DataIO烧录器支持矽力杰SA32B系列车规MCU

    使用FlashPAKIII量产烧录器及自动烧录平台,可安全可靠地批量化烧录上述SA32B系列MCU,为用户提供更加便捷、安全和高效的烧录方式
    的头像 发表于 05-14 12:03 801次阅读
    DataIO<b class='flag-5'>烧录</b>器支持矽力杰SA32B系列车规MCU

    FMD仿真器烧录说明

    FMD仿真器烧录,离线烧录说明
    发表于 04-30 17:27 1次下载

    使用Renesas Flash Programmer软件烧录芯片程序——瑞萨RA系列FSP库开发实战指南(08)

    首先通过前面所述方式手动设置使芯片进入Boot模式。 然后打开Renesas Flash Programmer (RFP)软件新建Project并设置连接方式。 最后选择要烧录
    的头像 发表于 04-15 09:25 3998次阅读
    使用Renesas Flash Programmer软件<b class='flag-5'>烧录</b>芯片<b class='flag-5'>程序</b>——瑞萨RA系列FSP库开发实战指南(08)

    程序烧录时的连接问题

    STM32F103C8T6板子和ST-Link正确连接后,接入电脑,但在烧录程序时,出现这样的报错 请问该如何解决
    发表于 03-18 23:42

    用STM32Cubeprogrammer烧录TrustZone的示范程序不成功怎么解决?

    的连接方式烧录过程可以走完,但是无法运行程序,代码(地址为0xC000000 )也无法验证。 用UART 连接方式,是不是无法进行烧录
    发表于 03-07 08:28