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;
  }
  

位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中固定的編程時間。

位7

OPT:寫選項字節,這部分是由軟件設置和清除的。

0:對禁用選項的寫入權限

1:啓用啓用選項字節的訪問

位6

第6位WPRG:文字編程這個位是由軟件設置的,當操作完成時由硬件清除。

0:程序操作禁用

1:啓用Word程序操作

位5

ERASE:塊擦除這個位是由軟件設置的,當操作完成時由硬件清除。

0:塊清除操作禁用

1:啓用塊擦除操作

位4

FPRG:快速塊編程這個位是由軟件設置的,當操作完成時由硬件清除。

0:快速塊程序操作禁用

1:啓用快速塊程序操作

位3:1

保留

位0 PRG,標準塊編程,這個位是由軟件設置的,當操作完成時由硬件清除。

 

位7:0 DUK 7:0:數據EEPROM寫解鎖鍵   這個字節是由軟件(所有模式)編寫的。它在讀取時返回0x00。

 

 

位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寄存器映射和重置值

 

 


  

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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章