File tree Expand file tree Collapse file tree 1 file changed +25
-0
lines changed Expand file tree Collapse file tree 1 file changed +25
-0
lines changed Original file line number Diff line number Diff line change @@ -174,6 +174,21 @@ bool spi_mem_sector_erase(uint32_t sector_addr)
174
174
// --- Wait for write to end ---
175
175
_spi_mem_wait ();
176
176
177
+ // --- Check that sector has been actually erased ---
178
+ uint8_t page_data [SPI_MEM_PAGE_SIZE ];
179
+ for (size_t i = 0 ; i < SPI_MEM_SECTOR_SIZE / SPI_MEM_PAGE_SIZE ; i ++ ) {
180
+ uint32_t page_addr = sector_addr + i * SPI_MEM_PAGE_SIZE ;
181
+ if (!spi_mem_page_read (page_addr , page_data )) {
182
+ util_log ("Read after sector erase at %p failed" , (void * )(uintptr_t )page_addr );
183
+ return false;
184
+ }
185
+ for (size_t j = 0 ; j < SPI_MEM_PAGE_SIZE ; j ++ ) {
186
+ if (page_data [j ] != 0xFF ) {
187
+ util_log ("Sector erase at %p failed" , (void * )(uintptr_t )(page_addr + j ));
188
+ return false;
189
+ }
190
+ }
191
+ }
177
192
return true;
178
193
}
179
194
@@ -242,6 +257,16 @@ static bool _spi_mem_page_write(uint32_t page_addr, const uint8_t* input)
242
257
// --- Wait for write to end ---
243
258
_spi_mem_wait ();
244
259
260
+ // --- Check that input data has been properly written ---
261
+ uint8_t read_data [SPI_MEM_PAGE_SIZE ];
262
+ if (!spi_mem_page_read (page_addr , read_data )) {
263
+ util_log ("Read after page write at %p failed" , (void * )(uintptr_t )page_addr );
264
+ return false;
265
+ }
266
+ if (memcmp (read_data , input , SPI_MEM_PAGE_SIZE ) != 0 ) {
267
+ util_log ("Write page at %p failed" , (void * )(uintptr_t )page_addr );
268
+ return false;
269
+ }
245
270
return true;
246
271
}
247
272
You can’t perform that action at this time.
0 commit comments