1.EEPROM介紹
Electrically Erasable Programmable Read Only Memory電氣可拭除可編程只讀存儲器
發(fā)展過程:ROM – 》 PROM –》 EPROM –》 EEPROM
2.EEPROM和FLASH的區(qū)別
2.1 使用上的區(qū)別
FLASH用于存放程序,在程序運行過程中不能更改。我們編寫的程序是燒錄到FLASH中的;
RAM用作程序運行時的數(shù)據(jù)存儲器;
EEPROM用于存放數(shù)據(jù),是用來保存掉電后用戶不希望丟的數(shù)據(jù),開機時用到的參數(shù)。運行過程中可以改變。
FLASH是用于存儲程序代碼的,有些場合也可能用它來保存數(shù)據(jù),當然前提是該單片機的FLASH工藝是可以自寫的(運行中可擦寫),但要注意FLASH的擦寫次數(shù)通常小于一萬次,而且通常FLASH只能按塊擦除。EEPROM不能用來存程序,通常單片機的指令尋址不能到這個區(qū)域。EEPROM的擦寫次數(shù)應有百萬次,而且可以按字節(jié)擦寫。EEPROM在一個PAGE內(nèi)是可以任意寫的,F(xiàn)LSAH則必須先擦除成BLANK,然后再寫入,而一般沒有單字節(jié)擦除的功能,至少一個扇區(qū)擦除。
2.2 結構上的區(qū)別
EEPROM和FLASH都是非易失性存儲器。
FLASH的全稱是FLASH EEPROM,但跟常規(guī)EEPROM的操作方法不同。
FLASH 和EEPROM的最大區(qū)別是FLASH按扇區(qū)操作,EEPROM則按字節(jié)操作,二者尋址方法不同,存儲單元的結構也不同,F(xiàn)LASH的電路結構較簡單,同樣容量占芯片面積較小,成本自然比EEPROM低,因而適合用作程序存儲器,EEPROM則更多的用作非易失的數(shù)據(jù)存儲器。當然用FLASH做數(shù)據(jù)存儲器也行,但操作比EEPROM麻煩的多,所以更“人性化”的MCU設計會集成FLASH和EEPROM兩種非易失性存儲器,而廉價型設計往往只有 FLASH,早期可電擦寫型MCU則都是EEPRM結構,現(xiàn)在已基本上停產(chǎn)了。
3.EEPROM的使用方法
AVRGCC里面自帶有EEPROM讀寫函數(shù)。
使用時需包含頭文件#include ,部分讀寫函數(shù)如下:
#define eeprom_is_ready() bit_is_clear(EECR, EEWE)//檢測EEPROM是否準備好。OK返回1(返回EEWE位)
#define eeprom_busy_wait() do {} while (!eeprom_is_ready())//等待EEPROM操作完成
extern uint8_t eeprom_read_byte (const uint8_t *addr);//讀取指定地址的一個字節(jié)8bit的EEPROM數(shù)據(jù)
extern uint16_t eeprom_read_word (const uint16_t *addr);//讀取指定地址的一個字16bit的EEPROM數(shù)據(jù)
extern void eeprom_read_block (void *buf, const void *addr, size_t n);//讀取由指定地址開始的指定長度的EEPROM數(shù)據(jù)
extern void eeprom_write_byte (uint8_t *addr, uint8_t val);//向指定地址寫入一個字節(jié)8bit的EEPROM數(shù)據(jù)
extern void eeprom_write_word (uint16_t *addr, uint16_t val);//向指定地址寫入一個字16bit的EEPROM數(shù)據(jù)
通過串口向單片機發(fā)送配置命令,單片機收到指令后,利用函數(shù)write_EEPROM_config()將相應的配置信息存放于EEPROM中。系統(tǒng)初始化時,利用函數(shù)read_EEPROM_config()從EEPROM中取出相應的數(shù)據(jù),用于系統(tǒng)的初始化。
責任編輯;zl
評論