Přeskočit na hlavní obsah

Jak na: EEPROM

EEPROM je zvláštní druh paměti. Jde o malou paměť (na čipu modulu Core Module má 6 KB) s omezeným počtem zápisových a mazacích cyklů. Je to nevolatilní paměť, takže k uchování dat nepotřebuje napájení. Bajty zapsané do EEPROM tedy zůstanou uložené, dokud je nevymažete nebo nepřepíšete (i bez napájení).

informace

Omezeného počtu cyklů W/E se nebojte. Za standardních podmínek čip zaručuje 100 000 cyklů. Počítají se jen cykly zápisu a mazání.

Čtení z EEPROM se nepočítá, takže z ní můžete bez obav číst, kolikrát chcete.

Odkazy​

Velikost EEPROM​

Modul TOWER Core Module má 6 KB EEPROM. Pokud potřebujete tuto hodnotu zjistit v kódu, použijte funkci SDK size_t twr_eeprom_get_size(void).

Příklad čtení/zápisu​

informace

V tomto příkladu hned po startu modulu Core Module zapíšeme do EEPROM hodnotu typu float a řetězec. Při každém stisknutí tlačítka se data z EEPROM přečtou a odešlou do počítače. Že paměť data uchová, si ověříte tak, že (po prvním spuštění původního příkladu) zakomentujete oba řádky twr_eeprom_write.

Příklad by měl fungovat dál a v ladicím výpisu by se měl objevit stejný řetězec.

poznámka

Některé naše moduly (zatím jen modul twr_radio_*) používají posledních několik desítek bajtů EEPROM. Pokud je používáte, pracujte jen s adresami od 0 do 6000.

Žádná data se tak nepřepíšou.

informace

Očekávaný výstup příkladu níže:

EEPROM size: 6144
Data:
3.141590
hello world!

Příklad kódu: test EEPROM

#include <application.h>

twr_button_t button;

void button_event_handler(twr_button_t *self, twr_button_event_t event, void *event_param)
{
(void) self;
(void) event_param;

if (event == TWR_BUTTON_EVENT_PRESS)
{
size_t eeprom = twr_eeprom_get_size();
char readEeprom[13];
float readFloat;

twr_eeprom_read(0, &readFloat, 4);
twr_eeprom_read(4, readEeprom, 12);
readEeprom[12] = '\0';

twr_log_debug("EEPROM size: %d\r\nData:\r\n%f\r\n%s", eeprom, readFloat, readEeprom);
}
}

void application_init(void)
{
twr_log_init(TWR_LOG_LEVEL_DEBUG, TWR_LOG_TIMESTAMP_ABS);

float toWriteFloat = 3.14159;
char toWrite[] = "hello world!";
twr_eeprom_write(0, &toWriteFloat, sizeof(toWriteFloat));
twr_eeprom_write(sizeof(toWriteFloat), toWrite, sizeof(toWrite));

// Initialize button
twr_button_init(&button, TWR_GPIO_BUTTON, TWR_GPIO_PULL_DOWN, false);
twr_button_set_event_handler(&button, button_event_handler, NULL);
}