程序存储器 是一种用于存储 程序代码(指令) 的非易失性存储器(Non-Volatile Memory),在嵌入式系统或计算机中保存CPU执行的指令。其特点是:
非易失性:断电后数据不丢失。
只读或可编程:根据类型分为ROM、Flash等。
与数据存储器分离:哈佛架构(如STM32)中,程序与数据存储空间独立;冯·诺依曼架构(如PC)中两者共享内存。
| 类型 | 特点 | 典型应用 |
|---|---|---|
| ROM(掩膜ROM) | 出厂时固化程序,不可修改 | 大批量生产的低成本设备 |
| PROM | 用户可编程(OTP) | 早期嵌入式系统 |
| EPROM | 紫外线擦除后可重复编程 | 旧式工控设备 |
| EEPROM | 电可擦除,按字节操作(速度慢) | 保存配置参数(如STM32选项字节) |
| Flash | 电可擦除,按块/扇区操作(速度快,容量大) | 现代MCU(如STM32F103的512KB) |
| FRAM | 非易失性+高速读写(类似RAM) | 高可靠性设备(如医疗仪器) |
| 对比项 | 程序存储器 | 数据存储器(如RAM) |
|---|---|---|
| 存储内容 | 程序代码(指令) | 运行时变量、堆栈、临时数据 |
| 易失性 | 非易失性(断电保留) | 易失性(断电丢失) |
| 访问速度 | 较慢(需通过总线读取) | 极快(直接由CPU访问) |
| 典型技术 | Flash、ROM | SRAM、DRAM |
| 写入方式 | 需专用工具/协议(如JTAG烧录) | CPU可直接读写 |
以STM32为例:
存储代码:用户编写的固件(如.bin或.hex文件)烧录到Flash中。
启动方式:通过BOOT引脚选择从内部Flash、系统存储器(Bootloader)或外部存储器启动。
执行流程:CPU从程序存储器逐条读取指令,通过总线传输到内核执行。
容量:决定可存储代码大小(如STM32F103ZET6的512KB Flash)。
读写速度:影响程序执行效率(Flash通常需等待状态)。
寿命:Flash约10万次擦写周期,需避免频繁烧录。
接口:SPI Flash(外扩)、并行总线(Nor Flash)等。
哈佛架构:程序与数据存储器物理分离(如STM32),提升实时性。
XIP(就地执行):CPU可直接从外部Flash运行代码(如QSPI Flash映射到内存地址)。
Bootloader:存储在系统存储区的小程序,用于更新用户Flash程序。
Q:程序存储器满了怎么办?
A:优化代码或换更大容量芯片,外扩SPI Flash(需XIP支持)。
Q:Flash和EEPROM区别?
A:Flash按块擦除(适合存代码),EEPROM支持字节操作(适合存参数)。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。