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来实现。