flash模块:BooT模式: Flash、ISP、SRAM

一、STM32F407内部flash模块组成部分
STM32的内部flash闪存模块由:主存储器系统存储器OPT区域和选项字节等4部分组成。如下图所示:

1.主储存器(flash):有11个扇区,并且每个区不是一样的KB。把所有的区数量相加可以知道flash为1M.该部分用来存放代码和数据常数(如const类型的数据)。我们平时烧录的代码就在flash中。B0、B1都接GND的时候,就是从0X08000000开始运行代码的。

2.系统存储器:系统存储器,这个主要用来存放STM32F407的bootloader代码,此代码是出厂的时候就固化在STM32F429里面了,专门来给主存储器下载代码的。当B0接V3.3,B1接GND的时候,从该存储器启动(即进入串口下载模式)。之所以可以通过串口下载就是因为系统存储器。

3.OTP区域:OTP区域,即一次性可编程区域,共528字节,被分成两个部分,前面512字节(32字节为1块,分成16块),可以用来存储一些用户数据(一次性的,写完一次,永远不可以擦除!!),后面16字节,用于锁定对应块。

4.选项字节区:用于配置读保护、BOR级别、软件/硬件看门狗以及器件处于待机或停止模式下的复位。
 

二、3种BOOT模式介绍

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

STM32三种启动模式对应的存储介质均是STM32芯片内置的 .



Main Flash memory(Flash)

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

System memory(ISP:In-System Programming)

从系统存储器启动,这种模式启动的程序功能是由厂家设置的。一般来说,这种启动方式用的比较少。系统存储器是芯片内部一块特定的区域,STM32在出厂时,由ST在这个区域内部预置了一段BootLoader, 也就是我们常说的ISP程序, 这是一块ROM

出厂后无法修改。一般来说,我们选用这种启动模式时,是为了从串口下载程序,因为在厂家提供的BootLoader中,提供了串口下载程序的固件,可以通过这个BootLoader将程序下载到系统的Flash中。但是这个下载方式需要以下步骤:

Step1:将BOOT0设置为1,BOOT1设置为0,然后按下复位键,这样才能从系统存储器启动BootLoader
Step2:最后在BootLoader的帮助下,通过串口下载程序到Flash中
Step3:程序下载完成后,又有需要将BOOT0设置为GND,手动复位,这样,STM32才可以从Flash中启动可以看到, 利用串口下载程序还是比较的麻烦, 需要跳帽跳来跳去的,非常的不注重用户体验。

总结:其实ST可以通过串口烧写程序不用ST-link。可以改变启动模式为系统存储器(厂家出厂就固定的)就可以了。烧完后又改变启动模式,从主闪存储器去运行串口烧好的程序就可以了。 

Embedded Memory(SRAM)

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

总的来说:

个人觉得就是三种存储形式的启动模式,Flash、ROM、RAM;Flash最常用,ROM触发麻烦,RAM掉电丢失。

BOOT1=x   BOOT0=0   从用户闪存启动,这是正常的工作模式
BOOT1=0   BOOT0=1   从系统存储器启动,这种模式启动的程序功能由厂家设置
BOOT1=1   BOOT0=1   从内置SRAM启动,这种模式可以用于调试

HAL库内部flash及IAP(boot)升级_牛牛ly的博客-CSDN博客_hal库 IAP升级

1、FLASH的读写操作 

2、ICP和IAP下载区别 

1.IAP boot升级
boot的目的:在不需要操作硬件平台的情况下实现升级(远程)。如U盘升级

BootLoader可以理解成是引导程序,它的作用就是用来启动正式的APP应用程序。

我们知道我们IAP下载的程序都是放在Flash中的,IAP升级是使用客户自己编写的boot loader而不是系统自带的,所以flash需要为两部分,一部分用来存放IAP(boot loader)程序,另外一部分用于存放用户程序,即芯片真正需要跑的程序。而且我们在下载程序的时候会对芯片的不同区域进行擦除;对于芯片一般会开辟一个BootLoader区域,同时也会开辟一个APP区域用来存放应用程序。

2.STM32编程方式
每种STM32芯片(M0,M3,M4,M),它们的主存储器结构可能不一样,但是他们都有一个叫“系统存储器”的区域,此区域是留给ST自己用来存放芯片的bootloader程序(每个公司为了保密和安全性,基本都会有自己的BootLoader协议,下载完成BootLoader后就会继续下载我们所要升级的程序,然后芯片新下载的BootLoader引导执行我们新下载的产品程序,这样就可以将程序进行升级。当然通过当前的一些网络技术帮助就可以实现我们常见的OTA(远程在线)下载。),此程序在芯片出厂的时候已经固化在芯片内部。 系统存储器的Bootloader程序会通过串口1接受app应用程序。

 1.在线编程(ICP,In-Circuit Programming):   通过JTAG/SWD协议或者系统加载程序(Bootloader)下载用户应用程序到微控制器中。

总结:平时我们用ST-link,jlink,串口烧写代码到flash中都属于ICP下载流程。

2.在程序中编程(IAP,In Application Programming):       通过任何一种通信接口(如IO端口,USB,CAN,UART,I2C,SPI,wifi、4G、蓝牙网口等)下载程序或者应用数据到存储器中。也就是说,STM32允许用户在应用程序中重新烧写闪存存储器中的内容。然而,IAP需要至少有一部分程序已经使用ICP方式烧到闪存存储器中(Bootloader)。 

 总结:相当于先用ICP方式把代码烧写到flash中(这段代码一般称为boot)。接着boot里有UART,I2C,SPI通信方式去接收上位机发送来的bin文件(app)。看如图:

BootLoader可以理解成是引导程序,它的作用就是用来启动正式的APP应用程序。

我们知道我们下载的程序都是放在Flash中的,而且我们在下载程序的时候会对芯片的不同区域进行擦除;对于芯片一般会开辟一个BootLoader区域,同时也会开辟一个APP区域用来存放应用程序。

相关推荐

相关文章