文章類型
開發平台
解決方案
關注主題
文章類型
開發平台
解決方案
關注主題

如何操控Arduino內建的EEPROM?

 

一般而言,Arduino系統板上的AVR微控制器晶片,會內建512Bytes(512B)容量的EEPROM記憶體,可供程式開發者自由運用。EEPROM是很普及的晶片,許多晶片商均有供貨,如Atmel、MAXIM、Microchip、NXP、Holtek、Nuvoton等。

EEPROM的特性是系統斷電後,資料依然能夠留存,有了這個內建的EEPROM,可以省去外接EEPROM或DIP Switch(中文稱為指撥開關)的麻煩。

想使用Arduino內建的EEPROM,在程式最初就要含括進來,即使用以下指令:

#include <EEPROM.h>

而在Arduino的初始執行階段,即setup()函式內,不需要下任何指令,而後直接在迴圈執行階段進行操作,即loop()函式內。

EEPROM的操作指令相當簡單,只有2個,即是寫入、讀取,格式如下:

寫入指令:
EEPROM.write(addr, val);

讀取指令:
EEPROM.read(addr);

其中addr就是address位址,val就是value數值,addr與val可以給直接數值,也可以用變數替代。

另外有一個EEPROM.clear指令,但說穿了,就是用程式寫迴圈,將每個位址的資料都寫入數值0,若要使用EEPROM.clear,就得在setup()函式內放入以下程式:

for(int i = 0; i < 512; i++)
EEPROM.write(i, 0);

EEPROM的操作很簡單,但要附帶說明兩點,一是更高階的AVR微控制器晶片應有更高容量的EEPROM,如此迴圈最大數值就不能設512,而要改成1024等。另也有人把Arduino程式強行燒錄到更少硬體資源的ATtiny系列晶片內,那可能就沒有512bytes可以用,容量可能降至256/128/64Bytes,如ATtiny48/88僅有64Bytes,甚至完全沒有,如ATtiny20、ATtiny40等。

若真的MCU內建的都不夠用,那就只好外接(大陸稱外設),外接為了減少接腳(大陸稱引腳)數的使用,一般都用串列介面來連接,但串列介面又有很多種,如MicroWire(TI/NS公司提出)、1-Wire(MAXIM/Dallas Semiconductor公司提出)、UNI/O(Microchip公司提出)、SPI(Motorola/Freescale公司提出)、I2C(NXP/Philips Semiconductor公司提出)等,AVR微控器本身也內建SPI、I2C等串列介面,有關SPI、I2C介面的操作,待以後有機會再說明。

典型I2C介面的EEPROM,編號24LC256,內有256kbits的儲存容量,換算成Byte則為32KB。

典型I2C介面的EEPROM,編號24LC256,內有256kbits的儲存容量,換算成Byte則為32KB。

 

 

陸向陽

陸向陽

從電子科系畢業後,即以媒體人的角色繼續這段與「電子科技」的不解之緣。歷任電子技術專書作者、電子媒體記者、分析師等角色,並持續寫作不殆。近來投入Arduino、Raspberry Pi等開放硬體的研究與教程介紹。
陸向陽

上一篇: | 下一篇:

我想回應

你的電子郵件位址並不會被公開。 必要欄位標記為 *

邀您加入《MakerPro》粉絲團:Maker&Startup開發社群的學習與知識平台