ATmega16 包含512 字節的EEPROM 數據存儲器。它是作為一個獨立的數據空間而存在的,可以按字節讀寫。EEPROM 的壽命至少為100,000 次擦除周期。EEPROM 的訪問由地址寄存器、數據寄存器和控制寄存器決定。
通過SPI和JTAG及并行電纜下載EEPROM數據的操作請分別參見 P260、 P265及P250。
EEPROM 讀/ 寫訪問
EEPROM 讀/ 寫訪問EEPROM 的訪問寄存器位于I/O 空間。
EEPROM的寫訪問時間由Table 1給出。自定時功能可以讓用戶軟件監測何時可以開始寫下一字節。用戶操作EEPROM 需要注意如下問題:在電源濾波時間常數比較大的電路中,上電/ 下電時VCC 上升/ 下降速度會比較慢。此時CPU 可能工作于低于晶振所要求的電源電壓。請參見 P20“ 防止EEPROM 數據丟失” 以避免出現EEPROM 數據丟失的問題。
為了防止無意識的EEPROM 寫操作,需要執行一個特定的寫時序。具體參看EEPROM控制寄存器的內容。
執行EEPROM 讀操作時, CPU 會停止工作4 個周期,然后再執行后續指令;執行EEPROM 寫操作時, CPU 會停止工作2 個周期,然后再執行后續指令。
EEPROM 地址寄存器- EEARH和EEARL
· Bits 15..9 – Res: 保留
保留位,讀操作返回值為零。
· Bits 8..0 – EEAR8..0: EEPROM 地址
EEPROM地址寄存器– EEARH和EEARL指定了512字節的EEPROM空間。EEPROM地址是線性的,從0 到511。EEAR 的初始值沒有定義。在訪問EEPROM 之前必須為其賦予正確的數據。
EEPROM 數據寄存器 - EEDR
· Bits 7..0 – EEDR7.0: EEPROM 數據
對于EEPROM 寫操作, EEDR 是需要寫到EEAR 單元的數據;對于讀操作, EEDR 是從地址EEAR 讀取的數據。
EEPROM 控制寄存器- EECR
· Bits 7..4 – Res: 保留
保留位,讀操作返回值為零。
· Bit 3 – EERIE: 使能EEPROM 準備好中斷
若SREG 的I 為"1",則置位EERIE 將使能EEPROM 準備好中斷。清零EERIE 則禁止此中斷。當EEWE 清零時EEPROM 準備好中斷即可發生。
· Bit 2 – EEMWE: EEPROM 主機寫使能
EEMWE決定了EEWE置位是否可以啟動EEPROM寫操作。當EEMWE為"1"時,在4個時鐘周期內置位EEWE 將把數據寫入EEPROM 的指定地址;若EEMWE 為"0“,則操作EEWE 不起作用。EEMWE 置位后4 個周期,硬件對其清零。見EEPROM 寫過程中對EEWE 位的描述。
· Bit 1 – EEWE: EEPROM 寫使能
EEWE 為EEPROM 寫操作的使能信號。當EEPROM 數據和地址設置好之后,需置位EEWE以便將數據寫入EEPROM。此時EEMWE必須置位,否則EEPROM寫操作將不會發生。寫時序如下( 第3 步和第4 步的次序并不重要):
1. 等待EEWE 位變為零
2. 等待SPMCSR 中的SPMEN 位變為零
3. 將新的EEPROM 地址寫入EEAR( 可選)
4. 將新的EEPROM 數據寫入EEDR( 可選)
5. 對EECR 寄存器的EEMWE 寫"1",同時清零EEWE
6. 在置位EEMWE 的4 個周期內,置位EEWE
在CPU 寫Flash 存儲器的時候不能對EEPROM 進行編程。在啟動EEPROM 寫操作之前軟件必須檢查 Flash 寫操作是否已經完成。步驟(2) 僅在軟件包含引導程序并允許CPU對Flash 進行編程時才有用。如果CPU 永遠都不會寫Flash,步驟(2) 可省略。請參見P234“支持引導裝入程序 – 在寫的同時可以讀(RWW, Read-While-Write)的自我編程能力” 。
注意:如果在步驟5 和6 之間發生了中斷,寫操作將失敗。因為此時EEPROM 寫使能操作將超時。如果一個操作EEPROM的中斷打斷了另一個EEPROM操作,EEAR 或EEDR寄存器可能被修改,引起EEPROM 操作失敗。建議此時關閉全局中斷標志I。經過寫訪問時間之后,EEWE 硬件清零。用戶可以憑借這一位判斷寫時序是否已經完成。EEWE 置位后, CPU 要停止兩個時鐘周期才會運行下一條指令。
· Bit 0 – EERE: EEPROM 讀使能
EERE為EEPROM讀操作的使能信號。當EEPROM地址設置好之后,需置位EERE以便將數據讀入EEAR。EEPROM 數據的讀取只需要一條指令,且無需等待。讀取EEPROM后CPU 要停止4 個時鐘周期才可以執行下一條指令。
用戶在讀取EEPROM 時應該檢測EEWE。如果一個寫操作正在進行,就無法讀取EEPROM,也無法改變寄存器EEAR。 經過校準的片內振蕩器用于EEPROM定時。
Table 1 為CPU訪問EEPROM的典型時間。
下面的代碼分別用匯編和C 函數說明如何實現EEPROM 的寫操作。在此假設中斷不會在執行這些函數的過程當中發生。同時還假設軟件沒有Boot Loader。若Boot Loader 存在,則EEPROM 寫函數還需要等待正在運行的SPM 命令的結束。
匯編代碼例程
EEPROM_write:
; 等待上一次寫操作結束
sbic EECR,EEWE
rjmp EEPROM_write
; 設置地址寄存器 (r18:r17)
out EEARH, r18
out EEARL, r17
; 將數據寫入數據寄存器(r16)
out EEDR,r16
; 置位EEMWE
sbi EECR,EEMWE
; 置位EEWE 以啟動寫操作
sbi EECR,EEWE
ret
C 代碼例程
void EEPROM_write(unsigned int uiAddress, unsigned char ucData)
{
/* 等待上一次寫操作結束 */
while(EECR & (1<
/* 設置地址和數據寄存器*/
EEAR = uiAddress;
EEDR = ucData;
/* 置位EEMWE */
EECR |= (1<
EECR |= (1<
下面的例子說明如何用匯編和C 函數來讀取EEPROM,在此假設中斷不會在執行這些函數的過程當中發生。
匯編代碼例程
EEPROM_read:
; 等待上一次寫操作結束
sbic EECR,EEWE
rjmp EEPROM_read
; 設置地址寄存器 (r18:r17)
out EEARH, r18
out EEARL, r17
; 設置EERE 以啟動讀操作
sbi EECR,EERE
; 自數據寄存器讀取數據
in r16,EEDR
ret
C 代碼例程
unsigned char EEPROM_read(unsigned int uiAddress)
{
/* 等待上一次寫操作結束 */
while(EECR & (1<
/* 設置地址寄存器*/
EEAR = uiAddress;
/* 設置EERE 以啟動讀操作*/
EECR |= (1<
return EEDR;
}
在掉電休眠模式下的EEPROM寫操作
若程序執行掉電指令時EEPROM 的寫操作正在進行, EEPROM 的寫操作將繼續,并在指定的寫訪問時間之前完成。但寫操作結束后,振蕩器還將繼續運行,單片機并非處于完全的掉電模式。因此在執行掉電指令之前應結束EEPROM 的寫操作。
防止EEPROM 數據丟失
若電源電壓過低,CPU 和EEPROM 有可能工作不正常,造成EEPROM 數據的毀壞( 丟失)。這種情況在使用獨立的EEPROM 器件時也會遇到。因而需要使用相同的保護方案。
由于電壓過低造成EEPROM 數據損壞有兩種可能:一是電壓低于EEPROM 寫操作所需要的最低電壓;二是CPU 本身已經無法正常工作。
EEPROM 數據損壞的問題可以通過以下方法解決:
當電壓過低時保持AVR RESET信號為低。這可以通過使能芯片的掉電檢測電路BOD來實現。如果BOD 電平無法滿足要求則可以使用外部復位電路。若寫操作過程當中發生了復位,只要電壓足夠高,寫操作仍將正常結束
上一篇:ATmega16 I/O存儲器
下一篇:ATmega16 SRAM數據存儲器
推薦閱讀
史海拾趣
1958年,Bals Elektrotechnik公司迎來了一個重大突破——連接器開始批量生產。隨著技術的不斷進步,公司逐漸將材料從鋁轉向塑料,這不僅降低了生產成本,還提高了產品的性能和可靠性。這一創新舉措使得Bals在電氣連接器市場上占據了重要地位,為后續的發展奠定了堅實基礎。
在1948年,Günter Bals在完成了建筑公司的學徒實習后,決定創立自己的運輸公司。他憑借自己的勤奮和才智,很快建立起了一支由14輛卡車組成的運輸隊伍,并在德國本地開展貨運代理業務。這一階段的創業經歷不僅鍛煉了Bals的商業頭腦,也為他日后在電子行業的發展積累了寶貴的資金和經驗。
隨著電子行業的快速發展,e2v不斷拓展其產品線,以滿足市場的多樣化需求。除了傳統的圖像傳感器產品外,公司還開發了示波器數據轉換器、高性能圖像處理器等,廣泛應用于科學、醫學、工業、汽車和電信等領域。這些產品的推出,不僅拓展了e2v的市場空間,也為其帶來了可觀的經濟效益。
深圳貝特萊電子科技股份有限公司成立于2011年7月,從一開始,公司就明確了以技術研發為核心的發展戰略。依托專業團隊多年的行業資源積累,貝特萊致力于開發具有自主知識產權的核心技術。在指紋識別、觸控、生命感知及MCU等芯片領域,貝特萊不斷取得突破,為后續的市場拓展奠定了堅實的基礎。
A/D Electronics Inc深知人才是企業發展的核心力量。因此,公司高度重視研發團隊的建設和人才培養。通過引進國內外優秀人才和加大研發投入,公司不斷提升研發團隊的實力和創新能力。同時,公司還建立了完善的培訓體系,為員工提供持續的學習和成長機會,激發了員工的創造力和工作熱情。
2012年4月,深圳市安信可科技有限公司正式成立,標志著這家公司在電子行業的起點。成立之初,安信可便專注于物聯網領域,致力于為客戶提供高質量的模組產品。通過引入先進的科技和創新理念,安信可逐漸在物聯網市場中嶄露頭角,為后續的發展奠定了堅實的基礎。
【瑞薩 CPK-RA2L1 開發板】測評 - 4:向 FSP 中添加 CPK 評估板的 BSP 本帖最后由 MianQi 于 2022-12-3 15:00 編輯 參考資料:《向FSP中添加CPK評估板的BSP 》和《瑞薩RA2L1開發實踐指南》。 在測試的過程中遇到諸多問題: 首先,雖然在 e2 studio 中安裝了 FSP 的 3.5 3.6 和 4.0 三個版本,但是在 CMD 中只 ...… 查看全部問答∨ |
盡力千辛萬苦終于收到了,顯示口罩防控在路上呆了好幾天,接著又是個人被風控到家里,索性順豐免費改送到了我家里,要不又得好久才能看到。 東西是非常“大”啊,大大的箱子,要不運費這么貴呢,都有其道 ...… 查看全部問答∨ |
差點錯過了這個活動,反反復復的選擇最后還是選擇了推薦的EVM54304-MN-01A評估板,其他器件都是湊單的,先看看這個評估板吧。 評估板的包裝非常結實,板卡也非常的精美。 ...… 查看全部問答∨ |
開始放飛自我~ 電路是表達思想得一種方式,但怎么表達思想更加簡潔快速,那無疑是方程式了~ 打開Ltspice得幫助找到了.FUNC &nbs ...… 查看全部問答∨ |
感謝EEWORLD平臺和MSP舉辦了MPM54304評估板下單返現體驗活動,可以讓我在繁忙的工作中體檢一下不同的產品,為后續開發儲備知識。下單后經過10天左右的時間終于收到板子了,剛拿到快到嚇我一跳,這也太大了,不虧是35元的快遞費和手續費,打開一看里 ...… 查看全部問答∨ |
【行空板 Python編程學習主控板】 五、離線語音識別和云語音識別比較 本帖最后由 kit7828 于 2022-12-3 11:24 編輯 一直想在行空板上進行語音識別的嘗試和應用,尤其是看到官方網站中給出的離線語音識別maix-speech,結果還是非常失望,通過百度云進行的語音識別功能非常強大,識別率和識別速度都非常滿意。 一 ...… 查看全部問答∨ |
全橋、半橋、推挽電路中用的MOS一般都是NMOS,特別市在高壓端,很少看到有PMOS,這... 全橋、半橋、推挽電路中用的MOS一般都是NMOS,特別市在高壓端,很少看到有PMOS,這是基于什么考慮?可以從哪幾個方面來分析? 1.NMOS耐壓更高,工藝更簡單? 2. 3........ 歡迎接龍 … 查看全部問答∨ |
一、硬件: 本開發板可玩性最高的外設,就是這個圓屏了。開發板圓屏的驅動芯片是GC9A01A,屏幕并沒有觸摸屏,只是一個顯示的模組。 分辨率為240RGB×240 dots,內部有129600字節的GRAM。 LCD的電路如下,看定義是IIC的驅動 ...… 查看全部問答∨ |
今天給大家分享的是利用森木磊石 easygo netbox的模型文件,仿真三相整流的電路實驗。 首先,打開Desksim軟件,載入這個模型文件。然后切換到User Interface界面,自定義模型的監控界面。 我們拖入chart,就可以選擇觀測模型的三相電壓,三相 ...… 查看全部問答∨ |
【微雪RP2040雙核開發板】WSL+Ubuntu C開發環境體驗 準備 基于以下環境 Ubuntu 20.04.4 LTS WSL2 VSCODE 上述環境的安裝網上搜索即可,不再贅述。 安裝C/C++編譯環境 下載腳本 git clone https://github.com/raspberrypi/pico-setup.git cd pico-setup ...… 查看全部問答∨ |