存储器介绍
STM32启动方式
STM32微控制器的启动方式决定了系统上电或复位后从何处开始执行代码,主要通过BOOT引脚的电平配置和内部启动寄存器的状态来控制。以下是三种主要启动模式及其特点:
1. 主闪存存储器(Main Flash Memory)启动
- BOOT0 = 0,BOOT1 = X(任意值)
- 启动地址:0x08000000(Flash起始地址)
- 用途:最常见的启动方式,用于运行存储在内部Flash中的用户程序。
- 特点:系统复位后直接从Flash中读取代码执行,适合正式产品。
2. 系统存储器(System Memory)启动
- BOOT0 = 1,BOOT1 = 0
- 启动地址:0x1FFF0000(系统存储器起始地址)
- 用途:通过内置的Bootloader(如STM32的DFU或USART引导程序)实现固件更新,无需外部编程器。
- 特点:系统存储器中固化了ST官方提供的Bootloader代码,可通过串口、USB等接口下载新程序到Flash。
3. 内置SRAM启动
- BOOT0 = 1,BOOT1 = 1
- 启动地址:0x20000000(SRAM起始地址)
- 用途:用于调试或运行临时代码(如从外部加载的程序),代码仅在RAM中运行,掉电丢失。
- 特点:适合快速验证代码逻辑,但需要提前将代码加载到SRAM中(如通过调试器)。
4、启动流程详解
- 复位时检测BOOT引脚电平:STM32在上电或复位时,首先读取BOOT0和BOOT1引脚的电平状态,确定启动模式。
- 映射启动地址:根据启动模式,将对应存储区域的地址映射到0x00000000(CPU实际从该地址开始取指)。
- 执行初始化:从映射地址读取栈顶指针(SP)和复位向量(Reset Handler),完成系统初始化并跳转到主程序。
5、注意事项
- BOOT引脚配置:启动模式由复位瞬间的BOOT引脚电平决定,启动后可通过软件修改引脚状态。
- 系统存储器内容:系统存储器中的Bootloader由ST提供,用户无法修改,但可通过它更新Flash中的代码。
- Flash保护:若Flash被写保护,系统存储器启动模式可能无法访问Flash进行编程。
STM32存储器类型对比
1、STM32存储类型对比表
存储类型 | 主闪存(Main Flash) | 系统存储器(System Memory) | 内置SRAM | eMMC Flash |
---|---|---|---|---|
物理特性 | 嵌入式NOR Flash | 嵌入式ROM(掩膜ROM或OTP) | 静态随机存储器 | 集成Flash控制器的NAND Flash |
容量 | 32KB~2MB(依型号而定) | 固定容量(如16KB) | 8KB~512KB(依型号而定) | 4GB~128GB(标准规格) |
掉电数据保存 | ✅ | ✅ | ❌ | ✅ |
读写特性 | 可擦写(有限擦写次数) | 只读 | 读写速度最快 | 读写速度中等,需FTL管理 |
访问接口 | 直接映射到CPU地址空间 | 直接映射到特定地址 | 直接映射到CPU地址空间 | 通过SD/MMC接口访问 |
典型访问时间 | 几十ns(依主频而定) | 同主Flash | 几ns~十几ns | 几十μs~几百μs |
主要用途 | 存储用户程序和常量数据 | 存储厂商Bootloader | 程序运行时栈/堆/变量存储 | 大容量数据存储(如多媒体) |
启动模式支持 | 支持(BOOT0=0) | 支持(BOOT0=1,BOOT1=0) | 支持(BOOT0=1,BOOT1=1) | 需额外配置(如通过SPI) |
擦写寿命 | 10,000~100,000次循环 | 不可擦写 | 无限(理论) | 3,000~100,000次循环(依类型) |
写入速度 | 中等(需按页/块擦除) | N/A | 最快 | 中等(受FTL影响) |
2、技术细节补充
-
主闪存(Main Flash)
- 支持字节/半字/字写入,但擦除操作必须按**页(Page)或扇区(Sector)**进行。
- 写入前需先擦除(擦除后数据为0xFF),擦除操作耗时较长(ms级)。
- 高级型号支持双存储区(Dual Bank),可在运行时更新另一区代码。
-
系统存储器(System Memory)
- 由ST厂商预编程,包含用于串口下载(USART1)或USB DFU的Bootloader。
- 用户无法修改其内容,但可通过特定引脚组合(BOOT0=1, BOOT1=0)激活。
-
内置SRAM
- 访问速度最快,支持零等待状态(Zero Wait State),适合高频数据处理。
- 部分型号支持低功耗SRAM(如Standby模式下保持数据)。
-
eMMC Flash
- 属于外部存储,需通过SPI、SDIO或专用接口连接。
- 内部集成Flash转换层(FTL),自动管理坏块和损耗均衡(Wear Leveling)。
- 适合存储大容量媒体文件或需要频繁更新的数据(如配置文件)。
3、应用场景建议
- 代码存储:主闪存(Main Flash)
- 临时数据处理:内置SRAM
- 固件升级引导:系统存储器 + 主闪存
- 大数据存储:eMMC Flash(需外部接口支持)
选择存储类型时需综合考虑容量需求、读写频率、数据持久性及成本因素。例如,频繁写入的数据(如日志)适合存放在SRAM或eMMC中,而核心代码应存储在主闪存中。
存储器分类
根据数据是否在断电后保持,存储器件可分为易失性存储器(Volatile Memory)和非易失性存储器(Non-Volatile Memory)。以下是常见分类及典型代表:
1、掉电丢失的存储器(易失性)
类型 | 特点 | 应用场景 |
---|---|---|
SRAM(静态随机存储器) | 最快的存储器,无需刷新,功耗低 | CPU缓存、嵌入式系统高速数据存储 |
DRAM(动态随机存储器) | 需要定期刷新,成本低、容量大 | 计算机内存(如DDR系列) |
Cache(高速缓存) | 位于CPU与主存间,加速数据访问 | CPU内部L1/L2/L3缓存 |
寄存器(Register) | CPU内部的超高速存储单元 | 存储指令、运算数据 |
显存(VRAM) | 专门用于图形处理的高速SRAM/DRAM | 显卡帧缓存 |
2、掉电不丢失的存储器(非易失性)
类型 | 特点 | 应用场景 |
---|---|---|
ROM(只读存储器) | 出厂固化,不可修改 | 早期BIOS、嵌入式设备引导程序 |
PROM(可编程ROM) | 一次性编程(熔断丝技术) | 早期工业控制程序存储 |
EPROM(可擦除PROM) | 通过紫外线擦除,可多次编程 | 早期软件开发测试 |
EEPROM(电可擦除ROM) | 字节级擦写,寿命约10万次循环 | 存储配置参数(如I2C接口器件) |
Flash Memory | 块级擦写,寿命约10万次循环 | U盘、SSD、嵌入式设备程序存储 |
NAND Flash | 高密度、低成本,需FTL管理坏块 | 手机存储、SD卡、eMMC |
NOR Flash | 可直接执行代码(XIP),读写速度快 | 嵌入式系统主闪存(如STM32) |
SSD(固态硬盘) | 基于Flash的高速存储设备 | 计算机硬盘替代 |
磁盘(HDD) | 机械旋转盘片,容量大、成本低 | 数据中心、大容量存储 |
磁带 | 顺序访问,容量极大、成本极低 | 冷数据归档 |
光盘(CD/DVD) | 激光读写,容量固定 | 数据存档、软件分发 |
3、特殊存储器
类型 | 特点 | 应用场景 |
---|---|---|
NVSRAM(非易失SRAM) | SRAM + 备用电池/电容 | 关键数据备份(如飞行记录仪) |
FRAM(铁电存储器) | 高速读写(接近SRAM),低功耗 | 电表、医疗设备数据记录 |
MRAM(磁阻存储器) | 高速、高寿命(10^15次循环) | 下一代内存替代技术 |
PRAM(相变存储器) | 断电保持,读写速度介于Flash和DRAM之间 | 实验性存储技术 |
4、对比总结
特性 | 易失性存储器 | 非易失性存储器 |
---|---|---|
掉电数据保存 | ❌ | ✅ |
读写速度 | 快(SRAM > DRAM) | 慢(Flash < HDD) |
擦写寿命 | 无限(理论) | 有限(Flash约10万次循环) |
成本/容量比 | 高(适合小容量高速场景) | 低(适合大容量存储) |
典型应用 | 程序运行时数据存储 | 程序/数据持久化存储 |
5、常见误区
- SSD vs HDD:SSD基于Flash(非易失),HDD基于磁盘(非易失),两者均为非易失性存储。
- Cache vs Flash:Cache(如CPU缓存)是SRAM(易失),而Flash(如U盘)是非易失性。
- eMMC vs RAM:eMMC属于嵌入式Flash(非易失),而设备RAM通常是DRAM(易失)。
选择存储器件时,需根据数据持久性需求、读写性能和成本综合考虑。