@@ -124,12 +124,123 @@ uint32_t ExternalEEPROM::getMemorySize()
124
124
void ExternalEEPROM::setMemorySizeBytes (uint32_t memSize)
125
125
{
126
126
settings.memorySize_bytes = memSize;
127
+
128
+ // Try to identify this memory size settings
129
+ switch (memSize)
130
+ {
131
+ default :
132
+ // Unknown memory size
133
+ break ;
134
+ case (16 ):
135
+ setAddressBytes (1 );
136
+ setPageSizeBytes (1 );
137
+ break ;
138
+ case (128 ):
139
+ setAddressBytes (1 );
140
+ setPageSizeBytes (8 );
141
+ break ;
142
+ case (256 ):
143
+ setAddressBytes (1 );
144
+ setPageSizeBytes (8 );
145
+ break ;
146
+ case (512 ):
147
+ setAddressBytes (1 );
148
+ setPageSizeBytes (16 );
149
+ break ;
150
+ case (1024 ):
151
+ setAddressBytes (1 );
152
+ setPageSizeBytes (16 );
153
+ break ;
154
+ case (2048 ):
155
+ setAddressBytes (1 );
156
+ setPageSizeBytes (16 );
157
+ break ;
158
+ case (4096 ):
159
+ setAddressBytes (2 );
160
+ setPageSizeBytes (32 );
161
+ break ;
162
+ case (8192 ):
163
+ setAddressBytes (2 );
164
+ setPageSizeBytes (32 );
165
+ break ;
166
+ case (16384 ):
167
+ setAddressBytes (2 );
168
+ setPageSizeBytes (64 );
169
+ break ;
170
+ case (32768 ):
171
+ setAddressBytes (2 );
172
+ setPageSizeBytes (64 );
173
+ break ;
174
+ case (65536 ):
175
+ setAddressBytes (2 );
176
+ setPageSizeBytes (128 );
177
+ break ;
178
+ case (128000 ):
179
+ setAddressBytes (2 );
180
+ setPageSizeBytes (128 );
181
+ break ;
182
+ case (262144 ):
183
+ setAddressBytes (2 );
184
+ setPageSizeBytes (256 );
185
+ break ;
186
+ }
127
187
}
128
188
uint32_t ExternalEEPROM::getMemorySizeBytes ()
129
189
{
130
190
return settings.memorySize_bytes ;
131
191
}
132
192
193
+ void ExternalEEPROM::setMemoryType (uint16_t typeNumber)
194
+ {
195
+ // Set settings based on known memory types
196
+ switch (typeNumber)
197
+ {
198
+ default :
199
+ // Unknown type number
200
+ break ;
201
+ case (0 ):
202
+ setMemorySizeBytes (16 );
203
+ break ;
204
+ case (1 ):
205
+ setMemorySizeBytes (128 * typeNumber); // 128
206
+ break ;
207
+ case (2 ):
208
+ Serial.println (" 2" );
209
+ setMemorySizeBytes (128 * typeNumber); // 256
210
+ break ;
211
+ case (4 ):
212
+ setMemorySizeBytes (128 * typeNumber); // 512
213
+ break ;
214
+ case (8 ):
215
+ setMemorySizeBytes (128 * typeNumber); // 1024
216
+ break ;
217
+ case (16 ):
218
+ setMemorySizeBytes (128 * typeNumber); // 2048
219
+ break ;
220
+ case (32 ):
221
+ setMemorySizeBytes (128 * typeNumber); // 4096
222
+ break ;
223
+ case (64 ):
224
+ setMemorySizeBytes (128 * typeNumber); // 8192
225
+ break ;
226
+ case (128 ):
227
+ setMemorySizeBytes (128 * typeNumber); // 16384
228
+ break ;
229
+ case (256 ):
230
+ setMemorySizeBytes (128 * typeNumber); // 32768
231
+ break ;
232
+ case (512 ):
233
+ setMemorySizeBytes (128 * typeNumber); // 65536
234
+ break ;
235
+ case (1024 ):
236
+ setMemorySizeBytes (128000 ); // 128000
237
+ break ;
238
+ case (2048 ):
239
+ setMemorySizeBytes (262144 ); // 262144
240
+ break ;
241
+ }
242
+ }
243
+
133
244
// Old get/setPageSize. Use get/setPageSizeBytes
134
245
void ExternalEEPROM::setPageSize (uint16_t pageSize)
135
246
{
@@ -475,7 +586,7 @@ uint16_t ExternalEEPROM::detectPageSizeBytes()
475
586
// For EEPROMs of 4k, 8k, and 16k bit, there are three bits called
476
587
// 'block select bits' inside the address byte that are used
477
588
// For 32k, 64k, 128k, 256k, and 512k bit we need two address bytes
478
- // At 1Mbit (128,000 byte) and above there are two address bytes and a block select bit
589
+ // At 1Mbit (128,000 byte) and above there are two address bytes and a block select bit
479
590
// is used but at the upper end of the address bits (so instead of A2/A1/A0 it's B0/A1/A0).
480
591
uint32_t ExternalEEPROM::detectMemorySizeBytes ()
481
592
{
0 commit comments