STM32的ISP,bootloader,JTAG

文章内容来源于网络,非本人原创。

个人觉得ISP和IAP的模式差异不大,都需要进入引导区。我自己觉得ISP进的应该是ST自带的BOOT rom,并不需要用户配置,而是通过boot引脚选择是否进入boot区。修改完程序后还需要手动配置boot引脚后复位,使其从FLASH启动;

IAP需要用户自己配置boot地址,重新分配FLASH空间,将FLASH空间分为boot引导区和APP用户程序区。IAP的过程是当程序运行过程中接收到IAP的信号,则用户程序跳转到BOOT引导区,接收远程传输来的bin文件,复制到APP用户区,复位后运行新程序,IAP完成


一、三种BOOT模式介绍

所谓启动,一般来说就是指我们下好程序后,重启芯片时,SYSCLK的第4个上升沿,BOOT引脚的值将被锁存。用户可以通过设置BOOT1和BOOT0引脚的状态,来选择在复位后的启动模式。

Main Flash memory
是STM32内置的Flash,一般我们使用JTAG或者SWD模式下载程序时,就是下载到这个里面,重启后也直接从这启动程序。

System memory
从系统存储器启动,这种模式启动的程序功能是由厂家设置的。一般来说,这种启动方式用的比较少。系统存储器是芯片内部一块特定的区域,STM32在出厂时,由ST在这个区域内部预置了一段BootLoader, 也就是我们常说的ISP程序, 这是一块ROM,
出厂后无法修改。一般来说,我们选用这种启动模式时,是为了从串口下载程序,因为在厂家提供的BootLoader中,提供了串口下载程序的固件,可以通过这个BootLoader将程序下载到系统的Flash中。但是这个下载方式需要以下步骤:
Step1:将BOOT0设置为1,BOOT1设置为0,然后按下复位键,这样才能从系统存储器启动BootLoader
Step2:最后在BootLoader的帮助下,通过串口下载程序到Flash中
Step3:程序下载完成后,又有需要将BOOT0设置为GND,手动复位,这样,STM32才可以从Flash中启动可以看到, 利用串口下载程序还是比较的麻烦, 需要跳帽跳来跳去的,非常的不注重用户体验。

Embedded Memory
内置SRAM,既然是SRAM,自然也就没有程序存储的能力了,这个模式一般用于程序调试。假如我只修改了代码中一个小小的地方,然后就需要重新擦除整个Flash,比较的费时,可以考虑从这个模式启动代码(也就是STM32的内存中),用于快速的程序调试,等程序调试完成后,在将程序下载到SRAM中。

 二、开发BOOT模式选择。

1、通常使用程序代码存储在主闪存存储器,配置方式:BOOT0=0,BOOT1=X;

2、Flash锁死解决办法:

开发调试过程中,由于某种原因导致内部Flash锁死,无法连接SWD以及Jtag调试,无法读到设备,可以通过修改BOOT模式重新刷写代码。

修改为BOOT0=1,BOOT1=0即可从系统存储器启动,ST出厂时自带Bootloader程序,SWD以及JTAG调试接口都是专用的。重新烧写程序后,可将BOOT模式重新更换到BOOT0=0,BOOT1=X即可正常使用。

在系统编程(ISP)

系统一般指电路系统。ISP一般是通过单片机专用的编程接口(一般是串口)对单片机内部的Flash存储器进行编程,ISP的实现一般需要很少的外部电路辅助实现。所以即使我们将芯片焊接在电路板上,只要留出和上位机接口的这个串口,就可以实现芯片内部存储器的改写,而无须再取下芯片。

在应用编程(IAP)

IAP技术是从结构上将Flash存储器映射为两个存储体,当运行一个存储体上的用户程序(boot)时,可对另一个存储体重新编程,之后将控制从一个存储体转向另一个。IAP的实现更加灵活,通过专门设计的固件程序来编程内部存储器,通常可利用单片机的串行口接到计算机的RS232口,也可以通过现有的INTERNET或其它通讯方式很方便地实现远程升级和维护。

程序需要由两部分组成:1.bootloader;2.应用程序

bootloader:负责更新程序的拷贝和跳转到应用程序;

应用程序:运行程序要实现的功能和更新程序的下载、保存。

第一部分代码必须通过其它手段,如JTAG或ISP烧入;第二部分代码可以使用第一部分代码IAP功能烧入,也可以和第一部分代码一道烧入,以后需要程序更新是再通过第一部分IAP代码更新。

首先,开机时运行bootloader,bootloader检测片内Flash(或者片外Flash或者FRAM)“程序更新标志”是否置位,如果没有,则直接跳转到应用程序。应用程序运行时检测无线模块收到的数据命令,如果有updata命令,则接收程序,并保存到片内Flash的靠后的代码段(或者片外Flash),接收保存完数据后,片内Flash(或者片外Flash或者FRAM)“程序更新标志”置位,然后重启MCU。MCU重新运行bootloader,此时bootloader检测到有程序更新标志,则将片内Flash的靠后的代码段(或者片外Flash)的更新代码拷贝回应用程序代码段,并复位更新程序标志,然后跳转到应用程序,至此程序更新完毕。

ISP与JTAG

在stm32里,所说的 ISP一般指的是通过SPI接口进行的在系统编程(ISP),此时stm32的BOOT模式设置为系统存储器启动(BOOT0 = 1,BOOT1 = 0),表示启动内部的ISP程序。

JTAG编程,也是在系统编程(ISP)的一种。JTAG则是通过JTAG接口进行的在系统编程(ISP)。JTAG除了可以烧写程序以外,还可以进行调试。

ISP是一种编程方式,JTAG、串口(SPI接口)是一种编程接口。

BOOT模式与JTAG

BOOT模式说的是系统上电启动后,程序从哪里加载,运行。在启动前设置好,启动时起作用。BOOT模式有三种,从系统存储器启动,从Flash启动,从Ram启动。

JTAG编程,JTAG口是单片机的内核,通过它可以控制CPU,来达到烧写程序,调试的功能。它是在系统启动后起作用,与BOOT模式无关。

但如果你用JTAG下载程序到Flash里,想要运行你的程序,你的BOOT模式必须设置为Flash启动。


  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值