Skip to main content


EEPROM is a special kind of memory. It is small (6 KB on Core Module chip) memory with a limited number of write/erase cycles. It is non-volatile memory - which means that it does not require power to retain stored information. This means that bytes written/stored inside the EEPROM will stay there until erased/rewritten (even without the power)


Don’t be afraid of limited W/E cycles. In standard conditions, the chip guarantees 100 000 cycles. Remember that those cycles are Write/Erase.

Reading from the EEPROM does not count, so it is completely safe to read from it as much as you wish.



TOWER Core Module has 6 KB EEPROM included. In case you need to find this value out inside your code, there is a function for this inside the SDK: size_t twr_eeprom_get_size(void)

Read/Write Example


In this example, we will write the float value and string to EEPROM immediately after the Core Module boots. With every press of a button, the data will be retrieved from EEPROM and sent to the computer. To test that the memory is persistent you can try to comment both twr_eeprom_write lines out (after running the original example once).

It should still work and the debug should write the same string.


Please note that some of our modules (currently twr_radio_* module only) use a few last dozens of bytes in EEPROM. If you use those modules, remember to use the memory addresses from 0 up to 6000.

This makes sure that no data will be overwritten.


Expected output of the example below.

EEPROM size: 6144
hello world!
EEPROM Test Code Example

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

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)

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