@@ -49,14 +49,14 @@ void loop() {
4949
5050 // Select a random start address in region 0 after the bootloader and compute block start offset
5151 int address = random (0x00004000 , 0x00010000 - WRITE_SIZE);
52- int offset = address & ~(root.get_erase_size (address ) - 1 );
52+ int offset = address & ~(root.get_program_size ( ) - 1 );
5353
5454 // Start Test
5555 erase_write_read_compare (pattern, offset, repeat);
5656
5757 // Select a random start address in region 1 after the sketch and compute block start offset
5858 address = random (0x000A0000 , root.size () - WRITE_SIZE);
59- offset = address & ~(root.get_erase_size (address ) - 1 );
59+ offset = address & ~(root.get_program_size ( ) - 1 );
6060
6161 // Start Test
6262 erase_write_read_compare (pattern, offset, repeat);
@@ -72,13 +72,23 @@ void erase_write_read_compare(byte pattern, int offset, int repeat) {
7272
7373 memset (&w_buffer[0 ], pattern, repeat);
7474
75+ // Double check we are using only one memory region for each test run
76+ if (root.get_erase_size (offset) != root.get_erase_size (offset + repeat )) {
77+ Serial.println (" Error: different secotr size not handled" );
78+ return ;
79+ }
80+ // Start offset is aligned to program size but erase command needs to be
81+ // aligned to erase block size
82+ int erase_start = offset & ~(root.get_erase_size (offset) - 1 );
83+ // Since we are using only one memory reagion erase size is always the same
84+ int erase_size = root.get_erase_size (erase_start);
7585 // Check if we need to delete more consecutive blocks
7686 // Should happen only in region 0 due to write buffer size
77- int erase_size = root.get_erase_size (offset);
78- while (erase_size < repeat) {
79- erase_size += erase_size;
87+ int erased = 0 ;
88+ while (erase_start + erased < offset + repeat ) {
89+ root.erase (erase_start + erased, erase_size);
90+ erased += erase_size;
8091 }
81- root.erase (offset, erase_size);
8292
8393 // Write pattern
8494 root.program (&w_buffer[0 ], offset, repeat);
0 commit comments