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
+ // Give a default if the variant does not define one.
20
+ #ifndef A0
21
+ #define A0 0
22
+ #endif
23
+
24
+ void setup ()
25
+ {
26
+ Serial.begin (115200 );
27
+ Serial.println (" EEPROM Examples" );
28
+
29
+ randomSeed (analogRead (A0));
30
+
31
+ EEPROM.init ();
32
+
33
+ // You may choose to enable more or less EEPROM -
34
+ // Default length is 1024 bytes (if setLength is not called)
35
+ EEPROM.setLength (1024 * 1 ); // this would make the length 1080 bytes. Max is 4096.
36
+ // Note: larger sizes will increase RAM usage and execution time
37
+
38
+ long startTime;
39
+ long endTime;
40
+ int randomLocation;
41
+
42
+ // Test erase time
43
+ startTime = millis ();
44
+ EEPROM.erase ();
45
+ endTime = millis ();
46
+ Serial.printf (" Time to erase all EEPROM: %dms\n " , endTime - startTime);
47
+
48
+ // Byte sequential test
49
+ // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
50
+ Serial.println ();
51
+ Serial.println (" 8 bit tests" );
52
+ uint8_t myValue1 = 200 ;
53
+ byte myValue2 = 23 ;
54
+ randomLocation = random (0 , EEPROM.length () - sizeof (myValue1));
55
+
56
+ startTime = millis ();
57
+ EEPROM.write (randomLocation, myValue1); // (location, data)
58
+ endTime = millis ();
59
+ EEPROM.put (randomLocation + sizeof (myValue1), myValue2);
60
+
61
+ Serial.printf (" Write byte time: %dms\n " , endTime - startTime);
62
+
63
+ startTime = millis ();
64
+ EEPROM.write (randomLocation, myValue1); // (location, data)
65
+ endTime = millis ();
66
+
67
+ Serial.printf (" Write identical byte to same location: %dms\n " , endTime - startTime);
68
+
69
+ byte response1 = EEPROM.read (randomLocation);
70
+ byte response2 = EEPROM.read (randomLocation + sizeof (myValue1));
71
+ Serial.printf (" Location %d should be %d: %d\n\r " , randomLocation, myValue1, response1);
72
+ Serial.printf (" Location %d should be %d: %d\n\r " , randomLocation + sizeof (myValue1), myValue2, response2);
73
+ // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
74
+
75
+ Serial.println ();
76
+ Serial.println (" 16 bit tests" );
77
+
78
+ // int16_t and uint16_t sequential test
79
+ // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
80
+ uint16_t myValue3 = 3411 ;
81
+ int16_t myValue4 = -366 ;
82
+ randomLocation = random (0 , EEPROM.length () - sizeof (myValue3));
83
+
84
+ EEPROM.put (randomLocation, myValue3);
85
+ EEPROM.put (randomLocation + sizeof (myValue3), myValue4);
86
+
87
+ uint16_t response3;
88
+ int16_t response4;
89
+ EEPROM.get (randomLocation, response3);
90
+ EEPROM.get (randomLocation + sizeof (myValue3), response4);
91
+ Serial.printf (" Location %d should be %d: %d\n\r " , randomLocation, myValue3, response3);
92
+ Serial.printf (" Location %d should be %d: %d\n\r " , randomLocation + sizeof (myValue3), myValue4, response4);
93
+ // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
94
+
95
+ Serial.println ();
96
+ Serial.println (" 32 bit tests" );
97
+
98
+ // int and unsigned int (32) sequential test
99
+ // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
100
+ Serial.printf (" Size of int: %d\n " , sizeof (int ));
101
+ int myValue5 = -245000 ;
102
+ unsigned int myValue6 = 400123 ;
103
+ randomLocation = random (0 , EEPROM.length () - sizeof (myValue5));
104
+
105
+ EEPROM.put (randomLocation, myValue5);
106
+ EEPROM.put (randomLocation + sizeof (myValue5), myValue6);
107
+
108
+ int response5;
109
+ unsigned int response6;
110
+ EEPROM.get (randomLocation, response5);
111
+ EEPROM.get (randomLocation + sizeof (myValue5), response6);
112
+ Serial.printf (" Location %d should be %d: %d\n\r " , randomLocation, myValue5, response5);
113
+ Serial.printf (" Location %d should be %d: %d\n\r " , randomLocation + sizeof (myValue5), myValue6, response6);
114
+ // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
115
+
116
+ // int32_t and uint32_t sequential test
117
+ // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
118
+ int32_t myValue7 = -341002 ;
119
+ uint32_t myValue8 = 241544 ;
120
+ randomLocation = random (0 , EEPROM.length () - sizeof (myValue7));
121
+
122
+ EEPROM.put (randomLocation, myValue7);
123
+ EEPROM.put (randomLocation + sizeof (myValue7), myValue8);
124
+
125
+ int32_t response7;
126
+ uint32_t response8;
127
+ EEPROM.get (randomLocation, response7);
128
+ EEPROM.get (randomLocation + sizeof (myValue7), response8);
129
+ Serial.printf (" Location %d should be %d: %d\n\r " , randomLocation, myValue7, response7);
130
+ Serial.printf (" Location %d should be %d: %d\n\r " , randomLocation + sizeof (myValue7), myValue8, response8);
131
+ // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
132
+
133
+ // float (32) sequential test
134
+ // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
135
+ Serial.printf (" Size of float: %d\n " , sizeof (float ));
136
+ float myValue9 = -7.35 ;
137
+ float myValue10 = 5.22 ;
138
+ randomLocation = random (0 , EEPROM.length () - sizeof (myValue9));
139
+
140
+ EEPROM.put (randomLocation, myValue9);
141
+ EEPROM.put (randomLocation + sizeof (myValue9), myValue10);
142
+
143
+ float response9;
144
+ float response10;
145
+ EEPROM.get (randomLocation, response9);
146
+ EEPROM.get (randomLocation + sizeof (myValue9), response10);
147
+ Serial.printf (" Location %d should be " , randomLocation);
148
+ Serial.print (myValue9);
149
+ Serial.print (" : " );
150
+ Serial.print (response9);
151
+ Serial.println ();
152
+ Serial.printf (" Location %d should be " , randomLocation + sizeof (myValue9));
153
+ Serial.print (myValue10);
154
+ Serial.print (" : " );
155
+ Serial.print (response10);
156
+ Serial.println ();
157
+ // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
158
+
159
+ Serial.println ();
160
+ Serial.println (" 64 bit tests" );
161
+
162
+ // double (64) sequential test
163
+ // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
164
+ Serial.printf (" Size of double: %d\n " , sizeof (double ));
165
+ double myValue11 = -290.3485723409857 ;
166
+ double myValue12 = 384.95734987 ;
167
+ double myValue13 = 917.14159 ;
168
+ double myValue14 = 254.8877 ;
169
+ randomLocation = random (0 , EEPROM.length () - sizeof (myValue11));
170
+
171
+ startTime = millis ();
172
+ EEPROM.put (randomLocation, myValue11);
173
+ endTime = millis ();
174
+ Serial.printf (" Time to record 64-bits: %dms\n " , endTime - startTime);
175
+
176
+ EEPROM.put (randomLocation + sizeof (myValue11), myValue12);
177
+ EEPROM.put (EEPROM.length () - sizeof (myValue13), myValue13); // Test end of EEPROM space
178
+
179
+ double response11;
180
+ double response12;
181
+ double response13;
182
+ EEPROM.get (randomLocation, response11);
183
+ EEPROM.get (randomLocation + sizeof (myValue11), response12);
184
+ EEPROM.get (EEPROM.length () - sizeof (myValue13), response13);
185
+
186
+ Serial.printf (" Location %d should be " , randomLocation);
187
+ Serial.print (myValue11, 13 );
188
+ Serial.print (" : " );
189
+ Serial.print (response11, 13 );
190
+ Serial.println ();
191
+ Serial.printf (" Location %d should be " , randomLocation + sizeof (myValue11));
192
+ Serial.print (myValue12, 8 );
193
+ Serial.print (" : " );
194
+ Serial.print (response12, 8 );
195
+ Serial.println ();
196
+ Serial.printf (" Edge of EEPROM %d should be " , EEPROM.length () - sizeof (myValue13));
197
+ Serial.print (myValue13, 5 );
198
+ Serial.print (" : " );
199
+ Serial.print (response13, 5 );
200
+ Serial.println ();
201
+
202
+ double response14;
203
+ EEPROM.put (EEPROM.length () - sizeof (myValue14), myValue14); // Test the re-write of a spot
204
+ EEPROM.get (EEPROM.length () - sizeof (myValue14), response14);
205
+ Serial.printf (" Rewrite of %d should be " , EEPROM.length () - sizeof (myValue14));
206
+ Serial.print (myValue14, 4 );
207
+ Serial.print (" : " );
208
+ Serial.print (response14, 4 );
209
+ Serial.println ();
210
+ // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
211
+
212
+ Serial.println ();
213
+ Serial.println (" String test" );
214
+
215
+ // String write test
216
+ // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
217
+ char myString[19 ] = " How are you today?" ;
218
+ randomLocation = random (0 , EEPROM.length () - sizeof (myString));
219
+ EEPROM.put (randomLocation, myString);
220
+
221
+ char readMy[19 ];
222
+ EEPROM.get (randomLocation, readMy);
223
+ Serial.printf (" Location %d string should read 'How are you today?': " , randomLocation);
224
+ Serial.println (readMy);
225
+ // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
226
+
227
+ }
228
+
229
+ void loop ()
230
+ {
231
+ }
0 commit comments