stm8L15x EEPORM学习笔记

 当我们在板级初始化的时候,要初始化eeporm,那么eeprom里存放了什么呢?它和flash有什么区别呢??

这是我在网上找到的答案:《EEPROM和flash的区别》https://blog.csdn.net/yuanlulu/article/details/6163106

 

之前对各种存储器一直不太清楚,今天总结一下。存储器分为两大类:ramrom。ram就不讲了,今天主要讨论rom

ROM和RAM指的都是半导体存储器,ROM是Read Only Memory的缩写,RAM是Random Access Memory的缩写。ROM在系统停止供电的时候仍然可以保持数据,而RAM通常都是在掉电之后就丢失数据,典型的RAM就是计算机的内存。

 

RAM有两大类,一种称为静态RAM(Static RAM/SRAM),SRAM速度非常快,是目前读写最快的存储设备了,但是它也非常昂贵,所以只在要求很苛刻的地方使用,譬如CPU的一级缓冲,二级缓冲。另一种称为动态RAM(Dynamic RAM/DRAM),DRAM保留数据的时间很短,速度也比SRAM慢,不过它还是比任何的ROM都要快,但从价格上来说DRAM相比SRAM要便宜很多,计算机内存就是DRAM的。

 

DRAM分为很多种,常见的主要有FPRAM/FastPage、EDORAM、SDRAM、DDR RAM、RDRAM、SGRAM以及WRAM等,这里介绍其中的一种DDR RAM。

 

DDR RAM(Date-Rate RAM)也称作DDR SDRAM,这种改进型的RAM和SDRAM是基本一样的,不同之处在于它可以在一个时钟读写两次数据,这样就使得数据传输速度加倍了。这是目前电脑中用得最多的内存,而且它有着成本优势,事实上击败了Intel的另外一种内存标准-Rambus DRAM。在很多高端的显卡上,也配备了高速DDR RAM来提高带宽,这可以大幅度提高3D加速卡的像素渲染能力。

ROM也有很多种,PROM是可编程的ROM,PROM和EPROM(可擦除可编程ROM)两者区别是,PROM是一次性的,也就是软件灌入后,就无法修改了,这种是早期的产品,现在已经不可能使用了,而EPROM是通过紫外光的照射擦出原先的程序,是一种通用的存储器。另外一种EEPROM是通过电子擦出,价格很高,写入时间很长,写入很慢。

 

FLASH存储器又称闪存,它结合了ROM和RAM的长处,不仅具备电子可擦除可编程(EEPROM)的性能,还不会断电丢失数据同时可以快速读取数据(NVRAM的优势),U盘和MP3里用的就是这种存储器。在过去的20年里,嵌入式系统一直使用ROM(EPROM)作为它们的存储设备,然而近年来Flash全面代替了ROM(EPROM)在嵌入式系统中的地位,用作存储Bootloader以及操作系统或者程序代码或者直接当硬盘使用(U盘)。

 

rom最初不能编程,出厂什么内容就永远什么内容,不灵活。后来出现了prom,可以自己写入一次,要是写错了,只能换一片,自认倒霉。人类文明不断进步,终于出现了可多次擦除写入的EPROM,每次擦除要把芯片拿到紫外线上照一下,想一下你往单片机上下了一个程序之后发现有个地方需要加一句话,为此你要把单片机放紫外灯下照半小时,然后才能再下一次,这么折腾一天也改不了几次。历史的车轮不断前进,伟大的EEPROM出现了,拯救了一大批程序员,终于可以随意的修改rom中的内容了。

 

EEPROM的全称是“电可擦除可编程只读存储器”,即Electrically Erasable Programmable Read-Only Memory。是相对于紫外擦除的rom来讲的。但是今天已经存在多种EEPROM的变种,变成了一类存储器的统称。

 

狭义的EEPROM:

这种rom的特点是可以随机访问和修改任何一个字节,可以往每个bit中写入0或者1。这是最传统的一种EEPROM,掉电后数据不丢失,可以保存100年,可以擦写100w次。具有较高的可靠性,但是电路复杂/成本也高。因此目前的EEPROM都是几十千字节到几百千字节的,绝少有超过512K的。

 

flash:

flash属于广义的EEPROM,因为它也是电擦除的rom。但是为了区别于一般的按字节为单位的擦写的EEPROM,我们都叫它flash。

flash做的改进就是擦除时不再以字节为单位,而是以块为单位,一次简化了电路,数据密度更高,降低了成本。上M的rom一般都是flash。

 

flash分为nor flash和nand flash。nor flash数据线和地址线分开,可以实现ram一样的随机寻址功能,可以读取任何一个字节。但是擦除仍要按块来擦。

nand flash同样是按块擦除,但是数据线和地址线复用,不能利用地址线随机寻址。读取只能按页来读取。(nandflash按块来擦除,按页来读,norflash没有页)

由于nandflash引脚上复用,因此读取速度比nor flash慢一点,但是擦除和写入速度比nor flash快很多。nand flash内部电路更简单,因此数据密度大,体积小,成本也低。因此大容量的flash都是nand型的。小容量的2~12M的flash多是nor型的。

使用寿命上,nand flash的擦除次数是nor的数倍。而且nand flash可以标记坏块,从而使软件跳过坏块。nor flash 一旦损坏便无法再用。

 

因为nor flash可以进行字节寻址,所以程序可以在nor flash中运行。嵌入式系统多用一个小容量的nor flash存储引导代码,用一个大容量的nand flash存放文件系统和内核。

 

 

void FLASH_Unlock(FLASH_MemType_TypeDef FLASH_MemType)
{
  /* Check parameter */
  assert_param(IS_FLASH_MEMORY_TYPE(FLASH_MemType));
  
  /* Unlock program memory */
  if(FLASH_MemType == FLASH_MemType_Program)
  {
    FLASH->PUKR = FLASH_RASS_KEY1;
    FLASH->PUKR = FLASH_RASS_KEY2;
  }
  

stm8L15x EEPORM学习笔记_第1张图片

位7:4 保留,必须为0
位3

EEPM:Flash程序和数据EEPROM IDDQ模式选择在运行期间,低功耗运行、低功率等模式

0:EEPM在一个Flash程序或数据EEPROM存储器之后被硬件清除访问。通过软件清除这一点不会从IDDQ模式中退出内存。

1:当代码从RAM中执行时,EEPM位force程序的设置数据EEPROM进入IDDQ模式。

当代码从程序Flash中执行时,这个位不能被设置。Flash程序和数据EEPROM保持在IDDQ模式下直到下一个Flash程序或数据EEPROM作为访问。参考第81页的低功率运行模式。

位2

WAITM等待模式:Flash程序和数据EEPROM IDDQ模式在等待模式下这部分是由软件设置和清除的。

0:当设备处于等待模式时,Flash程序和数据EEPROM不在IDDQ模式下

1:当设备处于等待模式时,在IDDQ模式下的Flash程序和数据EEPROM。

位1

IE:Flash中断启用这部分是由软件设置和清除的

0:中断禁用

1:启用中断。如果EOP或wrpgdis标志在

位0

FIX:固定字节编程时间这部分是由软件设置和清除的。

0:如果内存已经被擦除和tprog,标准的编程时间(1/2 tprog)

1:在tprog中固定的编程时间。

stm8L15x EEPORM学习笔记_第2张图片

位7

OPT:写选项字节,这部分是由软件设置和清除的。

0:对禁用选项的写入权限

1:启用启用选项字节的访问

位6

第6位WPRG:文字编程这个位是由软件设置的,当操作完成时由硬件清除。

0:程序操作禁用

1:启用Word程序操作

位5

ERASE:块擦除这个位是由软件设置的,当操作完成时由硬件清除。

0:块清除操作禁用

1:启用块擦除操作

位4

FPRG:快速块编程这个位是由软件设置的,当操作完成时由硬件清除。

0:快速块程序操作禁用

1:启用快速块程序操作

位3:1

保留

位0 PRG,标准块编程,这个位是由软件设置的,当操作完成时由硬件清除。

 stm8L15x EEPORM学习笔记_第3张图片

位7:0 DUK 7:0:数据EEPROM写解锁键   这个字节是由软件(所有模式)编写的。它在读取时返回0x00。

stm8L15x EEPORM学习笔记_第4张图片

 

 

stm8L15x EEPORM学习笔记_第5张图片

位7 保留
位6

HVOFF:高电压标志的结束,这部分是由硬件设置和清除的。

0:HV,开始实际的编程

1:HV OFF,高电压结束

位5:4 保留
位3

DUL:数据EEPROM区域无锁标志,这个比特是由硬件设置的,通过编程将其编程为0。

0:数据EEPROM区域写入保护

1:数据EEPROM区域写保护已被写入正确的质量键

位2

EOP:编程结束(写或擦操作)标志这部分是由硬件设置的。它通过读取寄存器或新版本的软件来清除。

写/擦除操作开始。

0:没有发生EOP事件

1:发生了EOP操作。如果IE位被设置为in,则会产生中断

FLASH_CR1登记。

位1

PUL:Flash程序内存解锁标志这个比特是由硬件设置的,通过编程将其编程为0。

0:启用主程序区域的保护

1:编写正确的质量,使主程序区域的保护失效。

钥匙。

位0

wrpgdis:尝试保护页面标记,这个比特是由硬件设置的,通过读取寄存器来清除软件。

0:没有wrpgdis事件发生

1:发生写保护页面的尝试。如果IE比特出现了中断

设置在flashcr1寄存器中。

Flash register map and reset values

Flash寄存器映射和重置值

stm8L15x EEPORM学习笔记_第6张图片

 

 


  

FlagStatus FLASH_GetFlagStatus(FLASH_FLAG_TypeDef FLASH_FLAG)
{
  FlagStatus status = RESET;
  assert_param(IS_FLASH_FLAGS(FLASH_FLAG));
  
  /* Check the status of the specified flash flag*/
  if((FLASH->IAPSR  & (uint8_t)FLASH_FLAG) != (uint8_t)RESET)
  {
    status = SET; /* Flash_FLAG is set*/
  }
  else
  {
    status = RESET; /* Flash_FLAG is reset*/
  }
  
  /* Return the Flash_FLAG status*/
  return status;
}

 

你可能感兴趣的:(stm8)