@@ -131,9 +131,9 @@ void test_spif_random_program_read_erase()
131
131
delete[] read_block;
132
132
}
133
133
134
- void test_spif_unaligned_program ()
134
+ void test_spif_unaligned_erase ()
135
135
{
136
- utest_printf (" \n Test Unaligned Program Starts..\n " );
136
+ utest_printf (" \n Test Unaligned Erase Starts..\n " );
137
137
138
138
SPIFBlockDevice blockD (MBED_CONF_SPIF_DRIVER_SPI_MOSI, MBED_CONF_SPIF_DRIVER_SPI_MISO, MBED_CONF_SPIF_DRIVER_SPI_CLK,
139
139
MBED_CONF_SPIF_DRIVER_SPI_CS);
@@ -153,57 +153,42 @@ void test_spif_unaligned_program()
153
153
}
154
154
}
155
155
156
- bd_size_t block_size = blockD.get_erase_size ();
156
+ bd_addr_t addr = 0 ;
157
+ bd_size_t sector_erase_size = blockD.get_erase_size (addr);
157
158
unsigned addrwidth = ceil (log (float (blockD.size () - 1 )) / log (float (16 ))) + 1 ;
158
159
159
- uint8_t *write_block = new (std::nothrow) uint8_t [block_size];
160
- uint8_t *read_block = new (std::nothrow) uint8_t [block_size];
161
- if (!write_block || !read_block ) {
162
- utest_printf (" \n Not enough memory for test" );
163
- goto end;
164
- }
165
-
166
- {
167
- bd_addr_t block = (rand () * block_size) % blockD.size () + 1 ;
160
+ utest_printf (" \n test %0*llx:%llu..." , addrwidth, addr, sector_erase_size);
168
161
169
- // Use next random number as temporary seed to keep
170
- // the address progressing in the pseudorandom sequence
171
- unsigned seed = rand ();
162
+ // unaligned start address
163
+ addr += 1 ;
164
+ err = blockD.erase (addr, sector_erase_size - 1 );
165
+ TEST_ASSERT_EQUAL (SPIF_BD_ERROR_INVALID_ERASE_PARAMS, err);
172
166
173
- // Fill with random sequence
174
- srand (seed);
175
- for (bd_size_t i_ind = 0 ; i_ind < block_size; i_ind++) {
176
- write_block[i_ind] = 0xff & rand ();
177
- }
167
+ err = blockD.erase (addr, sector_erase_size);
168
+ TEST_ASSERT_EQUAL (SPIF_BD_ERROR_INVALID_ERASE_PARAMS, err);
178
169
179
- // Write, sync, and read the block
180
- utest_printf ( " \n test %0*llx:%llu... " , addrwidth, block, block_size );
170
+ err = blockD. erase (addr, 1 );
171
+ TEST_ASSERT_EQUAL (SPIF_BD_ERROR_INVALID_ERASE_PARAMS, err );
181
172
182
- err = blockD. erase (block, block_size);
183
- TEST_ASSERT_EQUAL ( 0 , err) ;
173
+ // unaligned end address
174
+ addr = 0 ;
184
175
185
- // err = blockD.erase(block+4096, block_size );
186
- // TEST_ASSERT_EQUAL(0 , err);
176
+ err = blockD.erase (addr, 1 );
177
+ TEST_ASSERT_EQUAL (SPIF_BD_ERROR_INVALID_ERASE_PARAMS , err);
187
178
188
- err = blockD.program (write_block, block, block_size );
189
- TEST_ASSERT_EQUAL (0 , err);
179
+ err = blockD.erase (addr, sector_erase_size + 1 );
180
+ TEST_ASSERT_EQUAL (SPIF_BD_ERROR_INVALID_ERASE_PARAMS , err);
190
181
191
- err = blockD.read (read_block, block, block_size);
192
- TEST_ASSERT_EQUAL (0 , err);
182
+ // erase size exceeds flash device size
183
+ err = blockD.erase (addr, blockD.size () + 1 );
184
+ TEST_ASSERT_EQUAL (SPIF_BD_ERROR_INVALID_ERASE_PARAMS, err);
193
185
194
- // Check that the data was unmodified
195
- srand (seed);
196
- for (bd_size_t i_ind = 0 ; i_ind < block_size; i_ind++) {
197
- // printf("index %d\n", i_ind);
198
- TEST_ASSERT_EQUAL (0xff & rand (), read_block[i_ind]);
199
- }
186
+ // Valid erase
187
+ err = blockD.erase (addr, sector_erase_size);
188
+ TEST_ASSERT_EQUAL (SPIF_BD_ERROR_OK, err);
200
189
201
- err = blockD.deinit ();
202
- TEST_ASSERT_EQUAL (0 , err);
203
- }
204
- end:
205
- delete[] write_block;
206
- delete[] read_block;
190
+ err = blockD.deinit ();
191
+ TEST_ASSERT_EQUAL (0 , err);
207
192
}
208
193
209
194
static void test_spif_thread_job (void *vBlockD/* , int thread_num*/ )
@@ -282,7 +267,7 @@ utest::v1::status_t test_setup(const size_t number_of_cases)
282
267
}
283
268
284
269
Case cases[] = {
285
- Case (" Testing unaligned program blocks" , test_spif_unaligned_program ),
270
+ Case (" Testing unaligned erase blocks" , test_spif_unaligned_erase ),
286
271
Case (" Testing read write random blocks" , test_spif_random_program_read_erase),
287
272
Case (" Testing Multi Threads Erase Program Read" , test_spif_multi_threads)
288
273
};
0 commit comments