22-内部FLASH
一、ROM只读存储器的基本概述
1.1 基本概念
我们正常编译生成的二进制文件,需要下载烧录到单片机里面去,这个文件保存在单片机的ROM中,ROM是一种固态半导体存储器,具有只能读出事先所存数据的特性。这意味着,一旦数据被写入ROM,用户就无法进行修改或删除,只能进行读取操作。
1.2 工作原理
ROM的基本工作原理基于存储单元的固定状态。每个存储单元可以存储一个二进制位(0或1),通过电路设计实现数据的读取。具体来说,ROM内部通过逻辑电路将数据固定在存储单元阵列中,在读取数据时,控制电路选择相应的地址单元,并将数据传输给处理器。
1.3 主要特点
- 数据固定性:ROM中的数据是在出厂时被编程固化的,用户无法进行修改。这使得ROM非常适合用于存储固定不变的信息,如计算机或电子设备的启动程序、固件和操作系统的关键部分等。
- 数据可靠性:由于ROM中的数据是在生产过程中进行编程的,因此具有很高的可靠性。与可擦写存储器(如闪存)相比,ROM具有更低的故障率,并且不容易受到病毒或错误操作的影响。
- 高速读取:ROM的读取速度非常快,因为其中的数据是固定的,无需进行写入和擦除操作。这使得ROM适用于需要快速读取数据的应用场景。
- 低功耗:ROM不需要外部电源来保持数据的稳定性,因此具有极低的功耗和较长的使用寿命。
- 大容量:ROM可以容纳大量的数据和指令,提供的容量从几千字节到几十兆字节不等,能够满足各种应用的需求。
- 非易失性:即使断电,ROM中存储的数据也不会丢失。
1.4 分类说明
根据制造工艺和数据写入方式的不同,ROM可以分为以下几种类型:
- 掩膜只读存储器(MROM):在制造过程中,数据被永久地写入存储单元中,用户无法进行修改。
- 可编程只读存储器(PROM):允许用户在制造后通过专用设备进行一次编程。
- 可擦除可编程只读存储器(EPROM):数据可以通过紫外线擦除,并允许重新编程多次。但擦除过程相对复杂,需要专用设备。
- 电可擦除可编程只读存储器(EEPROM):使用电信号擦写数据,修改数据更加方便。但写入速度相对较慢,且成本较高。
- 快闪存储器(Flash Memory):EEPROM的改进版,支持快速大块数据擦写,具有更高的擦写速度和更大的容量。但写入次数有限。
1.4.1Flash(EEPROM)
如果从电擦除这一特性上深入探讨的话,FLASH存储器确实可以被视为EEPROM(电可擦可编程只读存储器)的一种变体,但二者之间存在着显著的差异。关键在于它们的擦除机制上:EEPROM允许以字节为单位进行擦除操作,这意味着可以精确地修改存储单元中的少量数据,而无需影响其他数据。这种高度的灵活性使得EEPROM在处理需要频繁更新小量数据的应用时表现出色,但相应地,也增加了其制造成本和技术复杂性。
相比之下,FLASH存储器则采用了更为粗犷的擦除方式——按扇区进行擦除。扇区通常包含多个字节的数据,因此,在需要修改FLASH中的数据时,即便是只更改一个字节的信息,也必须将整个扇区的内容擦除后再重新写入。这种擦除机制虽然牺牲了EEPROM那样的精细控制能力,但却极大地简化了存储器的结构和制造流程,从而有效地降低了成本。因此,FLASH存储器在价格上相较于EEPROM具有显著优势,尤其是在需要大容量存储的应用场景中,这一成本优势尤为明显。
此外,FLASH存储器的这一特性还促使了其在多种电子设备中的广泛应用,从智能手机、数码相机到固态硬盘(SSD),FLASH都扮演着不可或缺的角色。这些设备往往需要存储大量数据,而FLASH的高性价比和可靠的存储性能使其成为理想的选择。尽管在某些特定场景下,EEPROM的灵活性可能更为理想,但总体来看,FLASH存储器凭借其成本效益和广泛适用性,在存储市场上占据了主导地位。
闪存(Flash Memory)是一种长寿命的非易失性(在断电情况下仍能保持所存储的数据信息)的存储器。用途SD卡、固态硬盘、芯片内存存储单元存储代码。
二、MCU内部FLASH的特性与原理
2.1 主要特性
注意:这里FLASH写的是1M是按最高的写,实际上只有512KB
2.2 操作技巧
三、MCU内部Flash的编程细节
- 以分区形式进行规划,配置数据最好从最后扇区进行操作,防止覆盖扇区0的代码。
注意:在程序下载KEIL已经设置好了下载地址起始地址,根据上面,可发现在下载的程序从扇区0开始的。
程序固化到FLASH,需要对BOOT0与BOOT1进行设置
BOOT接GND BOOT1可接任意电平,程序下载及启动从FLASH开始。
- 写入数据之前得先擦除数据,类似与读书时的黑板原理。
具体步骤:
(1)解锁
FLASH_Unlock();
(2)擦除扇区
FLASH_EraseSector(uwSectorCounter, VoltageRange_3);
(3)往FLASH当中写入数据(按字节写入数据)
FLASH_ProgramByte(uint32_t Address, uint8_t Data)
(4)上锁
FLASH_Lock();
例子源码:
https://download.csdn.net/download/m0_63622771/90868128