24
24
#define EEPROM_OFFSET 0x00001000
25
25
#define CTRL_REG 0xb0000018
26
26
27
- #define EEPROM_SIZE 2048 // EEPROM size in bytes
27
+ #define EEPROM_SIZE 512 // EEPROM size in dwords
28
28
29
29
30
30
#include < inttypes.h>
@@ -54,17 +54,22 @@ class CurieEEPROM
54
54
// Functionality to 'get' and 'put' objects to and from EEPROM.
55
55
template < typename T > T &get (uint32_t addr, T &t)
56
56
{
57
- // make sure address is valid
58
- if (( addr > 0x7FC ) || (addr% 4 ) )
57
+ // make sure address is within valid range
58
+ if (addr > 0x1FF )
59
59
{
60
60
return t;
61
61
}
62
+
62
63
int byteCount = sizeof (T);
63
- // return if size of object is greater than size of EEPROM
64
- if (byteCount > EEPROM_SIZE )
64
+ // return if object size is too big
65
+ if (addr + byteCount > 0x7FC )
65
66
{
66
67
return t;
67
68
}
69
+
70
+ // allign address to 32-bit addressing
71
+ addr*=sizeof (uint32_t );
72
+
68
73
byte *bytes = to_bytes (t);
69
74
for (int i = 0 ; i < byteCount; i++)
70
75
{
@@ -76,15 +81,16 @@ class CurieEEPROM
76
81
}
77
82
template < typename T > T put (uint32_t addr, T t)
78
83
{
79
- // make sure address is valid
80
- if (( addr > 0x7FC ) || (addr% 4 ) )
84
+ // make sure address is within valid range
85
+ if (addr > 0x1FF )
81
86
{
82
87
return t;
83
88
}
84
89
uint32_t rom_wr_ctrl = 0 ;
85
90
int byteCount = sizeof (T);
86
- // return if size of object is greater than size of EEPROM
87
- if (byteCount > EEPROM_SIZE)
91
+
92
+ // return if object size is too big
93
+ if (addr + byteCount > 0x7FC )
88
94
{
89
95
return t;
90
96
}
@@ -96,7 +102,7 @@ class CurieEEPROM
96
102
bool blockAvailable = true ;
97
103
for (int i =0 ; i < size; i++)
98
104
{
99
- uint32_t data32 = read (addr+i* sizeof ( uint32_t ) );
105
+ uint32_t data32 = read (addr+i);
100
106
if (data32 != 0xFFFFFFFF )
101
107
{
102
108
blockAvailable = false ;
@@ -106,7 +112,7 @@ class CurieEEPROM
106
112
{
107
113
for (int i = 0 ; i<size; i++)
108
114
{
109
- write (addr+i* sizeof ( uint32_t ) , dwords[i]);
115
+ write (addr+i, dwords[i]);
110
116
}
111
117
}
112
118
else
0 commit comments