[CortexM0--stm32f0308]Flash memory

问题描述

Flash在IC中用来存放code和const data,对于其中没有用到的Flash部分,可以使Application用来做data storage用。IC一般应用场景下都是会经常断电的,而有些数据需要记录之前的一些状态等内容,因此需要掉电保留的特质,Flash正是这样的设备。

stm32f0308的Flash

64K的Flash用page作为单位来划分,一共64个page,那每个page是1K byte,另外也可以用sector来划分,一个sector有4个page,那64K的Flash可以划分为16个sector。

Flash读

Flash对于MCU而言是Read Only的,因此对于CPU而言,读Flash是很简单的事情,不需要通过Flash接口去读,M0 core直接通过AHB总线直接访问Flash的地址段,读取其中的指令或Read Only数据。有些memory段可能是Execution Only的,这就是由自己在设计程序时通过控制链接来实现的了,估计对Execution Only的Memory读是不能成功的,至于会不会产生什么错误,得尝试下才知道了。M0 core通过AHB访问Flash中Read Only数据,是通过指令fetch和latency来实现,这两个是由FLASH_ACR(Flash访问控制register)来管理。指令fetch的目的是为提高取指效率,通过使用一个prefetch buffer来实现的。latency是用来维持读Flash memory的控制信号,使高速读取Flash数据时不至于出错。

Flash写(编程与擦除)

Flash对于CPU而言Read Only,因此只能通过Flash peripheral接口来写入数据,如果像read操作一样直接写入地址,会导致hardfalt。从程序的宏观角度,stm32f0308的Flash编程分两种方式,ICP和IAP,ICP即是在系统编程,通过SWD和Flash download算法将整个Flash编程,IAP则是在应用编程,通过运行一小段App,实现其余的固件更新。

在对Flash进行编程/擦写时,这时候是不能进行Flash读取的。

Flash寄存器

  • Key register (FLASH_KEYR)
  • Option byte key regi ster (FLASH_OPTKEYR)
  • Flash control register (FLASH_CR)
  • Flash status register (FLASH_SR)
  • Flash address register (FLASH_AR)
  • Option byte register (FLASH_OBR)
  • Write protection register (FLASH_WRPR)

解锁Flash

这是编程/擦写需要做的第一步,因为IC reset后,Flash是被锁住不能被write和erase的,需要进行如下的解锁步骤:

编程Flash

对Flash编程,即写入数据到Flash的对应地址,只能以half-word(16 bit)的方式写入,而且对Flash的编程和擦除都必须按照规定的流程执行,否则会导致Flash数据修改不成功,而造成程序的异常。stm32f0308有说明,似乎在编程Flash之前需要先擦除Flash为0x00000000的,否则是没法编程Flash成功的。

编程Flash的标准步骤如下描述:

  1. 先要确保没有Flash memory相关操作正在进行,因此需要检查FLASH_SR register的BSY bit;
  2. 将FLASH_CR register的PG bit置1,表明是对Flash编程操作;
  3. 将half-word(16 bit)数据写入到Flash对应的地址;
  4. 由于进行了写入Flash的操作,需要等待直到FLASH_SR register的BSY bit被置位;
  5. 最后检查FLASH_SR register的EOP flag(EOP flag, End Of Procedure, 一次Flash操作成功完成,那该EOP flag就被置位),EOP flag被置位时,就说明这次Flash编程成功啦,需要在软件中将EOP flag清零,不然会影响后面的判断的。

    详细的流程图如下:

擦除Flash

Flash擦除是将Flash数据恢复默认值的很快的方式,一般Flash的擦除是将Flash都变成0xFFFFFFFF,而这里stm32f0308好像是都变成0x00000000的,即清零了,这是根据stm32f0308的说明大概判断的,具体的得实验下看看~

stm32f0308的Flash擦除分为两种情况,Page Erase和Mass Erase,即分页擦除,或整个用户Flash区域都擦除。

Page Erase

即擦除Flash的某一页,Flash Page Erase的标准操作步骤如下描述:

1. 先要确保没有Flash memory相关操作正在进行,因此需要检查FLASH_SR register的BSY bit;

2. 将FLASH_CR register的PER bit置1,表明是对Flash的Page Erase操作;

3. 设置FLASH_AR register,选择要erase的page;

4. 将FLASH_CR register的STRT bit置1,开始对Flash的Page Erase操作;

5. 由于进行了写入Flash的操作,需要等待直到FLASH_SR register的BSY bit被置位;

5. 最后检查FLASH_SR register的EOP flag(EOP flag, End Of Procedure, 一次Flash操作成功完成,那该EOP flag就被置位),EOP flag被置位时,就说明这次Flash擦除成功啦,需要在软件中将EOP flag清零,不然会影响后面的判断的。

详细的流程图表示如下:

Mass Erase

将整个用户Flash都擦除掉,当然option byte和system memory部分是不受影响的。其操作步骤如下:

1. 先要确保没有Flash memory相关操作正在进行,因此需要检查FLASH_SR register的BSY bit;

2. 将FLASH_CR register的MER bit置1,表明是对Flash的Mass Erase操作;

3. 将FLASH_CR register的STRT bit置1,开始对Flash的Mass Erase操作;

4. 由于进行了写入Flash的操作,需要等待直到FLASH_SR register的BSY bit被置位;

5. 最后检查FLASH_SR register的EOP flag(EOP flag, End Of Procedure, 一次Flash操作成功完成,那该EOP flag就被置位),EOP flag被置位时,就说明这次Flash擦除成功啦,需要在软件中将EOP flag清零,不然会影响后面的判断的。

详细的流程图跟上:

option byte写

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-16 10:31:28

[CortexM0--stm32f0308]Flash memory的相关文章

2014 FLASH MEMORY SUMMIT召开在即,国内NVDIMM企业受邀参展并发表主题演讲

2014 Flash memory summit召开在即 国内NVDIMM企业受邀参展并发表主题演讲 Flash memory summit 闪存峰会主旨在于展出非易失性存储器及SSD领域的主流应用,关键技术,及引领供应商驱动几十亿美元的市场.FMS是目前世界上最重要.最有影响力的Flash存储器行业盛会,将全面介绍未来趋势及最新创新研究成果. 第9界年度Flash存储峰会将于2014年8月5到8号在Santa Clara Convention Center,Santa Clara,CA隆重举行

ROM, RAM, Flash Memory

ROM Read-only memory (ROM) is a class of storage medium used in computers and other electronic devices. Data stored in ROM can only be modified slowly, with difficulty, or not at all, so it is mainly used to distribute firmware(software that is very

宏旺半导体系统阐明eMMC原理之Flash Memory篇

在之前宏旺半导体写了很多关于eMMC的文章,有粉丝反应不够系统,这次呢,宏旺半导体参考了网络上发表的文章,和大家系统地分享一下和eMMC有关的 Flash Memory. eMMC 是 Flash Memory 的一类,在详细介绍 eMMC 之前,先简单介绍一下 Flash Memory.Flash Memory 是一种非易失性的存储器.在嵌入式系统中通常用于存放系统.应用和数据等.在 PC 系统中,则主要用在固态硬盘以及主板 BIOS 中.另外,绝大部分的 U 盘.SDCard 等移动存储设备

自己对flash memory的总结

1.综述类文章 1.A Survey of Storage Management in Flash based Data 2.Understanding the Flash Translation Layer (FTL) Specification

[转]TOKUDB® VS. INNODB FLASH MEMORY

Details on the software settings for these tests can be found at the end of this page. IIBENCH TESTING Tokutek created the iiBench benchmark in 2008. The point of the benchmark is to measure the performance of indexed insertions over time. It uses an

Flash program memory and data EEPROM

1.简介 STM8S内部的FLASH程序存储器和数据EEPROM是由一组通用寄存器来控制的:所以我们可以通过这些通用寄存器来编程或擦除存储器的内容.设置写保护.或者配置特定的低功耗模式.我们也可以自己对器件的 option byte 进行编程.在这里我们只简单的讲解如何对STM8S内部的数据存储区域(data memory)进行写操作.读操作.擦除操作. 2.存储架构图 STM8S内部存储包括:FLASH程序存储器(FLASH program memory)和数据EEPROM(DATA EEPR

Low overhead memory space management

Methods, apparatus, and systems, including computer programs encoded on a computer storage medium, manage an address space. In some implementations, a method includes managing an allocation data structure for a memory, wherein the allocation data str

《CS:APP》 chapter 6 The Memory Hierarchy笔记

The Memory Hierarchy 6.1 Storage Technologies The earliest IBM PCs didn't even have a hard disk. 让我惊奇的是早期的IBM直接没有硬盘... 6.1.1 Random-Access Memory Random-access memory(RAM) comes in two varieties- static anddynamic . Static RAM (SRAM) is faster and si

Chapter 6: The Memory Hierarchy

Disk Geometry: 磁盘的结构如图,每个面为surface,surface上的同心圆为track,track包含sector,不同的surface的同半径track构成cylinder.越外围的的track应该包含越多的sectors,这样用于分割sectors的spare space不至于太多而浪费. SSD: 传统的机械硬盘读写时需要旋转,而固态硬盘则不必如此故而得名.SSD是以flash memory为基础,由blocks组成,每个block又包含pages.一旦某个page的数