Skip to content

Commit ef7e8a7

Browse files
authored
Merge pull request sparkfun#11 from sparkfun/EEPROM
Add EEPROM library
2 parents ae3baca + 81f1a03 commit ef7e8a7

File tree

5 files changed

+655
-0
lines changed

5 files changed

+655
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,167 @@
1+
/*
2+
Reading and writing test of the EEPROM functions on the Artemis
3+
By: Nathan Seidle
4+
SparkFun Electronics
5+
Date: June 24th, 2019
6+
This example code is in the public domain.
7+
8+
SparkFun labored with love to create this code. Feel like supporting open source hardware?
9+
Buy a board from SparkFun! https://www.sparkfun.com/products/15376
10+
11+
Page erase takes 15ms
12+
Write byte takes 30ms - This is much longer than Arduino that takes 3.3ms
13+
Float write across two words takes 30ms
14+
Update (no write) takes 1ms
15+
*/
16+
17+
#include <EEPROM.h>
18+
19+
void setup()
20+
{
21+
Serial.begin(9600);
22+
Serial.println("EEPROM Examples");
23+
24+
randomSeed(analogRead(A0));
25+
26+
long startTime;
27+
long endTime;
28+
uint16_t randomLocation;
29+
30+
//Test erase time
31+
startTime = millis();
32+
EEPROM.erase();
33+
endTime = millis();
34+
Serial.printf("Time to erase all EEPROM: %dms\n", endTime - startTime);
35+
36+
//Byte sequential test
37+
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
38+
Serial.println("");
39+
Serial.println("8 bit tests");
40+
byte myValue1 = 200;
41+
byte myValue2 = 23;
42+
randomLocation = random(0, FLASH_EEPROM_SIZE);
43+
44+
startTime = millis();
45+
EEPROM.write(randomLocation, myValue1); //(location, data)
46+
endTime = millis();
47+
EEPROM.put(randomLocation + 1, myValue2);
48+
49+
Serial.printf("Write byte time: %dms\n", endTime - startTime);
50+
51+
byte response1 = EEPROM.read(randomLocation);
52+
byte response2 = EEPROM.read(randomLocation + 1);
53+
Serial.printf("Location %d should be %d: %d\n\r", randomLocation, myValue1, response1);
54+
Serial.printf("Location %d should be %d: %d\n\r", randomLocation + 1, myValue2, response2);
55+
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
56+
57+
Serial.println("");
58+
Serial.println("16 bit tests");
59+
60+
//int16_t and uint16_t sequential test
61+
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
62+
uint16_t myValue3 = 3411;
63+
int16_t myValue4 = -366;
64+
randomLocation = random(0, FLASH_EEPROM_SIZE);
65+
66+
EEPROM.put(randomLocation, myValue3);
67+
EEPROM.put(randomLocation + 2, myValue4);
68+
69+
uint16_t response3;
70+
int16_t response4;
71+
EEPROM.get(randomLocation, response3);
72+
EEPROM.get(randomLocation + 2, response4);
73+
Serial.printf("Location %d should be %d: %d\n\r", randomLocation, myValue3, response3);
74+
Serial.printf("Location %d should be %d: %d\n\r", randomLocation + 2, myValue4, response4);
75+
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
76+
77+
Serial.println("");
78+
Serial.println("32 bit tests");
79+
80+
//int and unsigned int (32) sequential test
81+
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
82+
Serial.printf("Size of int: %d\n", sizeof(int));
83+
int myValue5 = -245000;
84+
unsigned int myValue6 = 400123;
85+
randomLocation = random(0, FLASH_EEPROM_SIZE);
86+
87+
EEPROM.put(randomLocation, myValue5);
88+
EEPROM.put(randomLocation + 4, myValue6);
89+
90+
int response5;
91+
unsigned int response6;
92+
EEPROM.get(randomLocation, response5);
93+
EEPROM.get(randomLocation + 4, response6);
94+
Serial.printf("Location %d should be %d: %d\n\r", randomLocation, myValue5, response5);
95+
Serial.printf("Location %d should be %d: %d\n\r", randomLocation + 4, myValue6, response6);
96+
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
97+
98+
//int32_t and uint32_t sequential test
99+
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
100+
int32_t myValue7 = -341002;
101+
uint32_t myValue8 = 241544;
102+
randomLocation = random(0, FLASH_EEPROM_SIZE);
103+
104+
EEPROM.update(randomLocation, myValue7);
105+
EEPROM.update(randomLocation + 4, myValue8);
106+
107+
int32_t response7;
108+
uint32_t response8;
109+
EEPROM.get(randomLocation, response7);
110+
EEPROM.get(randomLocation + 4, response8);
111+
Serial.printf("Location %d should be %d: %d\n\r", randomLocation, myValue7, response7);
112+
Serial.printf("Location %d should be %d: %d\n\r", randomLocation + 4, myValue8, response8);
113+
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
114+
115+
//float (32) sequential test
116+
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
117+
Serial.printf("Size of float: %d\n", sizeof(float));
118+
float myValue9 = -7.35;
119+
float myValue10 = 5.22;
120+
randomLocation = random(0, FLASH_EEPROM_SIZE);
121+
122+
EEPROM.update(randomLocation, myValue9);
123+
EEPROM.update(randomLocation + 4, myValue10);
124+
125+
float response9;
126+
float response10;
127+
EEPROM.get(randomLocation, response9);
128+
EEPROM.get(randomLocation + 4, response10);
129+
Serial.printf("Location %d should be %f: %f\n\r", randomLocation, myValue9, response9);
130+
Serial.printf("Location %d should be %f: %f\n\r", randomLocation + 4, myValue10, response10);
131+
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
132+
133+
Serial.println("");
134+
Serial.println("64 bit tests");
135+
136+
//double (64) sequential test
137+
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
138+
Serial.printf("Size of double: %d\n", sizeof(double));
139+
double myValue11 = -290.3485723409857;
140+
double myValue12 = 384.95734987;
141+
randomLocation = random(0, FLASH_EEPROM_SIZE);
142+
143+
EEPROM.update(randomLocation, myValue11);
144+
EEPROM.update(randomLocation + 8, myValue12);
145+
146+
double response11;
147+
double response12;
148+
EEPROM.get(randomLocation, response11);
149+
EEPROM.get(randomLocation + 8, response12);
150+
Serial.printf("Location %d should be %lf: %lf\n", randomLocation, myValue11, response11);
151+
Serial.printf("Location %d should be %lf: %lf\n", randomLocation + 8, myValue12, response12);
152+
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
153+
154+
Serial.println();
155+
Serial.print("Flash Contents:");
156+
for (uint16_t x = 0; x < 8 * 4; x += 4)
157+
{
158+
if (x % 32 == 0)
159+
Serial.println();
160+
Serial.printf("0x%08X ", *(uint32_t *)(FLASH_EEPROM_START + x));
161+
}
162+
Serial.println();
163+
}
164+
165+
void loop()
166+
{
167+
}

libraries/EEPROM/keywords.txt

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#######################################
2+
# Syntax Coloring Map
3+
#######################################
4+
5+
#######################################
6+
# Datatypes (KEYWORD1)
7+
#######################################
8+
9+
EEPROM KEYWORD1
10+
11+
#######################################
12+
# Methods and Functions (KEYWORD2)
13+
#######################################
14+
read KEYWORD2
15+
write KEYWORD2
16+
get KEYWORD2
17+
put KEYWORD2
18+
update KEYWORD2
19+
erase KEYWORD2
20+
21+
#######################################
22+
# Constants (LITERAL1)
23+
#######################################

libraries/EEPROM/library.properties

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
name=EEPROM
2+
version=1.0
3+
author=SparkFun Electronics
4+
maintainer=SparkFun Electronics <sparkfun.com>
5+
sentence=Flash based Pseudo EEPROM for Artemis
6+
paragraph=Enables the writing of variables to a protected section of flash. These bytes will not be overwritten when new sketches are loaded and are useful when needing to record settings like calibration data or GPS waypoints that should not change between sketch updates.
7+
category=Communication
8+
url=http://www.arduino.cc/en/Reference/EEPROM
9+
architectures=apollo3

0 commit comments

Comments
 (0)