基本信息
文件名称:NXP 系列:LPC15xx 系列 (基于 ARM Cortex-M3)_(21).LPC15xx系列Flash与存储管理.docx
文件大小:23.19 KB
总页数:14 页
更新时间:2025-06-23
总字数:约9.34千字
文档摘要

PAGE1

PAGE1

LPC15xx系列Flash与存储管理

1.Flash存储器概述

Flash存储器是LPC15xx系列单片机中非常重要的组成部分,用于存储程序代码和一些非易失性数据。Flash存储器具有较高的读取速度,但写入和擦除操作相对较慢。LPC15xx系列单片机的Flash存储器分为多个块,每个块可以独立进行擦除和编程操作。这种分块设计使得存储管理更加灵活,同时也减少了因单个块故障导致整个存储器无法使用的情况。

1.1Flash存储器的特性

非易失性:即使在断电情况下,闪存中的数据也不会丢失。

读取速度快:通常可以达到几十纳秒的读取时间。

写入和擦除速度较慢:写入和擦除操作通常需要几毫秒到几十毫秒的时间。

分块设计:闪存被划分为多个块,每个块可以独立进行擦除和编程操作。

有限的擦除次数:每个块的擦除次数是有限的,通常在10万次左右。

1.2Flash存储器的结构

LPC15xx系列单片机的Flash存储器通常分为多个块,每个块的大小不同。通常,第一个块用于存储启动代码和用户代码,而其他块用于存储用户数据或备用代码。Flash存储器的结构如下:

总大小:通常为256KB或512KB。

块大小:每个块的大小可以是1KB、4KB、32KB等。

地址范围:从0始,根据总大小和块大小的不同,地址范围有所不同。

1.3Flash存储器的操作

Flash存储器的操作主要包括读取、编程和擦除。这些操作可以通过LPC15xx系列单片机的Flash访问控制器(FAC)来实现。FAC提供了一系列的寄存器和命令来控制Flash存储器的操作。

1.3.1读取操作

读取Flash存储器中的数据是通过标准的存储器访问指令来实现的。例如,可以使用LDR指令来读取Flash存储器中的一个32位字。

1.3.2编程操作

编程操作是指将数据写入Flash存储器。LPC15xx系列单片机的编程操作需要一定的步骤,包括解锁、编程和锁定。

//示例:将数据写入Flash存储器

#includeLPC15xx.h

#includeiap.h

uint32_tiap_entry_data[5];//IAP命令参数

uint32_tiap_entry_result[2];//IAP命令结果

voidflash_program(uint32_taddress,uint32_tdata){

//解锁Flash存储器

iap_entry_data[0]=0x5A000000;//命令代码

iap_entry_data[1]=0//命令参数

__builtin_memcpy((void*)0x1FFF1FF0,iap_entry_data,20);//复制参数到IAP寄存器

iap_entry((uint32_t*)0x1FFF1FF0,iap_entry_result);//调用IAP命令

//编程Flash存储器

iap_entry_data[0]=0x5A000000;//命令代码

iap_entry_data[1]=address;//目标地址

iap_entry_data[2]=data;//要写入的数据

iap_entry_data[3]=0//命令参数

iap_entry_data[4]=0//命令参数

__builtin_memcpy((void*)0x1FFF1FF0,iap_entry_data,20);//复制参数到IAP寄存器

iap_entry((uint32_t*)0x1FFF1FF0,iap_entry_result);//调用IAP命令

//锁定Flash存储器

iap_entry_data[0]=0x5A000000;//命令代码

iap_entry_data[1]=0//命令参数

__builtin_memcpy((void*)0x1FFF1FF0,iap_entry_data,20);//复制参数到IAP寄存器

iap_entry((uint32_t*)0x1FFF1FF0,iap_entry_result);//调用IAP命令

}

1.3.3擦除操作

擦除操作是指将一个或多个Flash块的内容全部清零。擦除操作同样需要通过FAC来实现。