mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-04 05:04:33 +02:00
add a test to verify SPI_FLASH_ENABLE_COUNTERS feature
This commit is contained in:
@@ -11,22 +11,14 @@
|
|||||||
// Some resources are lazy allocated in flash encryption, the threadhold is left for that case
|
// Some resources are lazy allocated in flash encryption, the threadhold is left for that case
|
||||||
#define TEST_MEMORY_LEAK_THRESHOLD (400)
|
#define TEST_MEMORY_LEAK_THRESHOLD (400)
|
||||||
|
|
||||||
static size_t before_free_8bit;
|
|
||||||
static size_t before_free_32bit;
|
|
||||||
|
|
||||||
|
|
||||||
void setUp(void)
|
void setUp(void)
|
||||||
{
|
{
|
||||||
before_free_8bit = heap_caps_get_free_size(MALLOC_CAP_8BIT);
|
unity_utils_record_free_mem();
|
||||||
before_free_32bit = heap_caps_get_free_size(MALLOC_CAP_32BIT);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void tearDown(void)
|
void tearDown(void)
|
||||||
{
|
{
|
||||||
size_t after_free_8bit = heap_caps_get_free_size(MALLOC_CAP_8BIT);
|
unity_utils_evaluate_leaks_direct(TEST_MEMORY_LEAK_THRESHOLD);
|
||||||
size_t after_free_32bit = heap_caps_get_free_size(MALLOC_CAP_32BIT);
|
|
||||||
unity_utils_check_leak(before_free_8bit, after_free_8bit, "8BIT", TEST_MEMORY_LEAK_THRESHOLD);
|
|
||||||
unity_utils_check_leak(before_free_32bit, after_free_32bit, "32BIT", TEST_MEMORY_LEAK_THRESHOLD);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void app_main(void)
|
void app_main(void)
|
||||||
|
@@ -916,6 +916,83 @@ static void test_flash_read_large_psram_buffer_low_internal_mem(const esp_partit
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE_FLASH("esp_flash_read large PSRAM buffer low memory", test_flash_read_large_psram_buffer_low_internal_mem);
|
TEST_CASE_FLASH("esp_flash_read large PSRAM buffer low memory", test_flash_read_large_psram_buffer_low_internal_mem);
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if CONFIG_SPI_FLASH_ENABLE_COUNTERS
|
||||||
|
#define TEST_CNT_RW_TIMES 4
|
||||||
|
#define TEST_CNT_RW_LEN 64
|
||||||
|
#define TEST_CNT_ERASE_LEN 8192
|
||||||
|
void test_flash_counter(const esp_partition_t* part)
|
||||||
|
{
|
||||||
|
esp_flash_t* chip = part->flash_chip;
|
||||||
|
uint32_t offs = part->address;
|
||||||
|
esp_flash_counters_t flash_counter;
|
||||||
|
static uint8_t write_buf[TEST_CNT_RW_LEN * TEST_CNT_RW_TIMES];
|
||||||
|
static uint8_t read_buf[TEST_CNT_RW_LEN * TEST_CNT_RW_TIMES];
|
||||||
|
|
||||||
|
for(int i = 0;i < TEST_CNT_RW_LEN * TEST_CNT_RW_TIMES; i ++){
|
||||||
|
write_buf[i] = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
esp_flash_reset_counters();
|
||||||
|
flash_counter = *esp_flash_get_counters();
|
||||||
|
// check for resset_counter and get_counter API
|
||||||
|
TEST_ASSERT_EACH_EQUAL_HEX8(0, &flash_counter, sizeof(esp_flash_counters_t));
|
||||||
|
|
||||||
|
TEST_ASSERT_EQUAL(ESP_OK, esp_flash_erase_region(chip, offs, TEST_CNT_ERASE_LEN));
|
||||||
|
flash_counter = *esp_flash_get_counters();
|
||||||
|
// check for erase_counter API
|
||||||
|
TEST_ASSERT_EQUAL_UINT32(0, flash_counter.read.count);
|
||||||
|
TEST_ASSERT_EQUAL_UINT32(0, flash_counter.write.count);
|
||||||
|
TEST_ASSERT_EQUAL_UINT32(1, flash_counter.erase.count);
|
||||||
|
TEST_ASSERT_EQUAL_UINT32(0 * TEST_CNT_RW_LEN, flash_counter.read.bytes);
|
||||||
|
TEST_ASSERT_EQUAL_UINT32(0 * TEST_CNT_RW_LEN, flash_counter.write.bytes);
|
||||||
|
TEST_ASSERT_EQUAL_UINT32(TEST_CNT_ERASE_LEN, flash_counter.erase.bytes);
|
||||||
|
|
||||||
|
int count;
|
||||||
|
for(count = 0; count < TEST_CNT_RW_TIMES; count ++) {
|
||||||
|
// check counter on write option
|
||||||
|
TEST_ASSERT_EQUAL(ESP_OK, esp_flash_write(chip, write_buf + TEST_CNT_RW_LEN * count, offs + TEST_CNT_RW_LEN * count, TEST_CNT_RW_LEN) );
|
||||||
|
flash_counter = *esp_flash_get_counters();
|
||||||
|
TEST_ASSERT_EQUAL_UINT32((count + 1), flash_counter.write.count);
|
||||||
|
TEST_ASSERT_EQUAL_UINT32((count + 1) * TEST_CNT_RW_LEN, flash_counter.write.bytes);
|
||||||
|
|
||||||
|
// check counter on read option
|
||||||
|
TEST_ASSERT_EQUAL(ESP_OK, esp_flash_read(chip, read_buf + TEST_CNT_RW_LEN * count, offs + TEST_CNT_RW_LEN * count, TEST_CNT_RW_LEN) );
|
||||||
|
flash_counter = *esp_flash_get_counters();
|
||||||
|
TEST_ASSERT_EQUAL_UINT32((count + 1), flash_counter.read.count);
|
||||||
|
TEST_ASSERT_EQUAL_UINT32((count + 1) * TEST_CNT_RW_LEN, flash_counter.read.bytes);
|
||||||
|
|
||||||
|
esp_flash_dump_counters(stdout);
|
||||||
|
}
|
||||||
|
TEST_ASSERT_EQUAL_HEX8_ARRAY(write_buf, read_buf, TEST_CNT_RW_LEN * TEST_CNT_RW_TIMES);
|
||||||
|
|
||||||
|
// check remain value
|
||||||
|
flash_counter = *esp_flash_get_counters();
|
||||||
|
TEST_ASSERT_EQUAL_UINT32(1, flash_counter.erase.count);
|
||||||
|
TEST_ASSERT_EQUAL_UINT32(TEST_CNT_ERASE_LEN, flash_counter.erase.bytes);
|
||||||
|
|
||||||
|
esp_flash_reset_counters();
|
||||||
|
flash_counter = *esp_flash_get_counters();
|
||||||
|
// check for resset_counter after used
|
||||||
|
TEST_ASSERT_EACH_EQUAL_HEX8(0, &flash_counter, sizeof(esp_flash_counters_t));
|
||||||
|
|
||||||
|
TEST_ASSERT_EQUAL(ESP_OK, esp_flash_write_encrypted(chip, offs, write_buf, TEST_CNT_RW_LEN) );
|
||||||
|
TEST_ASSERT_EQUAL(ESP_OK, esp_flash_read_encrypted(chip, offs, read_buf, TEST_CNT_RW_LEN) );
|
||||||
|
|
||||||
|
printf("\ntest for encrypted write/read\n");
|
||||||
|
esp_flash_dump_counters(stdout);
|
||||||
|
|
||||||
|
flash_counter = *esp_flash_get_counters();
|
||||||
|
// As we do one time of encrypted RW, no erase option
|
||||||
|
TEST_ASSERT_EQUAL_UINT32(1, flash_counter.read.count);
|
||||||
|
TEST_ASSERT_EQUAL_UINT32(1, flash_counter.write.count);
|
||||||
|
TEST_ASSERT_EQUAL_UINT32(0, flash_counter.erase.count);
|
||||||
|
TEST_ASSERT_EQUAL_UINT32(1 * TEST_CNT_RW_LEN, flash_counter.read.bytes);
|
||||||
|
TEST_ASSERT_EQUAL_UINT32(1 * TEST_CNT_RW_LEN, flash_counter.write.bytes);
|
||||||
|
TEST_ASSERT_EQUAL_UINT32(0, flash_counter.erase.bytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_CASE_FLASH("SPI flash counter test", test_flash_counter);
|
||||||
|
#endif //CONFIG_SPI_FLASH_ENABLE_COUNTERS
|
||||||
|
@@ -16,14 +16,12 @@ from pytest_embedded import Dut
|
|||||||
[
|
[
|
||||||
'release',
|
'release',
|
||||||
'flash_qio',
|
'flash_qio',
|
||||||
'verify'
|
'verify',
|
||||||
],
|
],
|
||||||
indirect=True,
|
indirect=True,
|
||||||
)
|
)
|
||||||
def test_esp_flash(dut: Dut) -> None:
|
def test_esp_flash(dut: Dut) -> None:
|
||||||
dut.expect_exact('Press ENTER to see the list of tests')
|
dut.run_all_single_board_cases(group='esp_flash')
|
||||||
dut.write('[esp_flash]')
|
|
||||||
dut.expect_unity_test_output()
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.esp32s3
|
@pytest.mark.esp32s3
|
||||||
@@ -38,9 +36,7 @@ def test_esp_flash(dut: Dut) -> None:
|
|||||||
indirect=True,
|
indirect=True,
|
||||||
)
|
)
|
||||||
def test_esp_flash_rom(dut: Dut) -> None:
|
def test_esp_flash_rom(dut: Dut) -> None:
|
||||||
dut.expect_exact('Press ENTER to see the list of tests')
|
dut.run_all_single_board_cases(group='esp_flash')
|
||||||
dut.write('[esp_flash]')
|
|
||||||
dut.expect_unity_test_output()
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.esp32
|
@pytest.mark.esp32
|
||||||
|
@@ -3,3 +3,4 @@ CONFIG_FREERTOS_USE_TICKLESS_IDLE=y
|
|||||||
CONFIG_COMPILER_OPTIMIZATION_SIZE=y
|
CONFIG_COMPILER_OPTIMIZATION_SIZE=y
|
||||||
CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE=y
|
CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE=y
|
||||||
CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT=y
|
CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT=y
|
||||||
|
CONFIG_SPI_FLASH_ENABLE_COUNTERS=y
|
||||||
|
Reference in New Issue
Block a user