2021-06-03 07:40:09 -04:00
|
|
|
/*
|
2023-10-09 03:28:42 -04:00
|
|
|
* SPDX-FileCopyrightText: 2021-2023 Espressif Systems (Shanghai) CO LTD
|
2021-06-03 07:40:09 -04:00
|
|
|
*
|
|
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
|
|
*/
|
2018-10-16 07:06:41 -04:00
|
|
|
#include "esp_heap_caps.h"
|
|
|
|
#include "unity.h"
|
|
|
|
#include "esp_log.h"
|
2022-05-17 22:45:06 -04:00
|
|
|
#include "esp_private/spi_common_internal.h"
|
2018-12-05 07:22:25 -05:00
|
|
|
#include "sdkconfig.h"
|
2018-10-16 07:06:41 -04:00
|
|
|
|
2021-03-19 03:54:30 -04:00
|
|
|
#if CONFIG_IDF_TARGET_ESP32
|
|
|
|
|
2018-10-16 07:06:41 -04:00
|
|
|
static const char TAG[] = "test_psram";
|
|
|
|
|
2019-06-05 00:34:19 -04:00
|
|
|
#ifdef CONFIG_SPIRAM
|
2019-07-16 05:33:30 -04:00
|
|
|
static void test_psram_content(void)
|
2018-10-16 07:06:41 -04:00
|
|
|
{
|
|
|
|
const int test_size = 2048;
|
|
|
|
uint32_t *test_area = heap_caps_malloc(test_size, MALLOC_CAP_SPIRAM);
|
|
|
|
|
|
|
|
size_t p;
|
2023-10-09 03:28:42 -04:00
|
|
|
size_t s = test_size;
|
|
|
|
int errct = 0;
|
|
|
|
int initial_err = -1;
|
|
|
|
for (p = 0; p < (s / sizeof(int)); p += 4) {
|
|
|
|
test_area[p] = p ^ 0xAAAAAAAA;
|
2018-10-16 07:06:41 -04:00
|
|
|
}
|
2023-10-09 03:28:42 -04:00
|
|
|
for (p = 0; p < (s / sizeof(int)); p += 4) {
|
|
|
|
if (test_area[p] != (p ^ 0xAAAAAAAA)) {
|
2018-10-16 07:06:41 -04:00
|
|
|
errct++;
|
2023-10-09 03:28:42 -04:00
|
|
|
if (errct == 1) {
|
|
|
|
initial_err = p * 4;
|
|
|
|
}
|
2018-10-16 07:06:41 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
if (errct) {
|
2023-10-09 03:28:42 -04:00
|
|
|
ESP_LOGE(TAG, "SPI SRAM memory test fail. %d/%d writes failed, first @ %p", errct, s / 32, initial_err + test_area);
|
2018-10-16 07:06:41 -04:00
|
|
|
TEST_FAIL();
|
|
|
|
} else {
|
|
|
|
ESP_LOGI(TAG, "SPI SRAM memory test OK");
|
|
|
|
}
|
|
|
|
|
|
|
|
free(test_area);
|
|
|
|
}
|
2018-12-05 07:22:25 -05:00
|
|
|
#endif
|
2018-10-16 07:06:41 -04:00
|
|
|
|
2019-10-31 00:00:46 -04:00
|
|
|
bool psram_is_32mbit_ver0(void);
|
2018-10-16 07:06:41 -04:00
|
|
|
|
2019-10-31 00:00:46 -04:00
|
|
|
static void test_spi_bus_occupy(spi_host_device_t expected_occupied_host)
|
|
|
|
{
|
2018-10-16 07:06:41 -04:00
|
|
|
bool claim_hspi = spicommon_periph_claim(HSPI_HOST, "ut-hspi");
|
2023-10-09 03:28:42 -04:00
|
|
|
if (claim_hspi) {
|
|
|
|
ESP_LOGI(TAG, "HSPI claimed.");
|
|
|
|
}
|
2018-10-16 07:06:41 -04:00
|
|
|
|
|
|
|
bool claim_vspi = spicommon_periph_claim(VSPI_HOST, "ut-vspi");
|
2023-10-09 03:28:42 -04:00
|
|
|
if (claim_vspi) {
|
|
|
|
ESP_LOGI(TAG, "VSPI claimed.");
|
|
|
|
}
|
2018-10-16 07:06:41 -04:00
|
|
|
|
2019-10-31 00:00:46 -04:00
|
|
|
if (expected_occupied_host == HSPI_HOST) {
|
|
|
|
TEST_ASSERT_FALSE(claim_hspi);
|
|
|
|
TEST_ASSERT(claim_vspi);
|
|
|
|
} else if (expected_occupied_host == VSPI_HOST) {
|
|
|
|
TEST_ASSERT_FALSE(claim_vspi);
|
|
|
|
TEST_ASSERT(claim_hspi);
|
2018-10-16 07:06:41 -04:00
|
|
|
} else {
|
2019-10-31 00:00:46 -04:00
|
|
|
TEST_ASSERT(claim_hspi);
|
|
|
|
TEST_ASSERT(claim_vspi);
|
2018-10-16 07:06:41 -04:00
|
|
|
}
|
|
|
|
|
2019-06-05 00:34:19 -04:00
|
|
|
#ifdef CONFIG_SPIRAM
|
2018-10-16 07:06:41 -04:00
|
|
|
test_psram_content();
|
|
|
|
#endif
|
|
|
|
}
|
2019-10-31 00:00:46 -04:00
|
|
|
|
|
|
|
#if CONFIG_SPIRAM_OCCUPY_HSPI_HOST || CONFIG_SPIRAM_OCCUPY_VSPI_HOST
|
2022-10-25 04:20:44 -04:00
|
|
|
TEST_CASE("some spi bus occpied by psram", "[psram_4m]")
|
2019-10-31 00:00:46 -04:00
|
|
|
{
|
2022-03-15 06:25:05 -04:00
|
|
|
// NOTE: this unit test rely on the config that PSRAM of 8MB is used only when CONFIG_SPIRAM_BANKSWITCH_ENABLE is set
|
2019-10-31 00:00:46 -04:00
|
|
|
//currently all 8M psram don't need more SPI peripherals
|
|
|
|
#if !CONFIG_SPIRAM || !CONFIG_SPIRAM_SPEED_80M || CONFIG_SPIRAM_BANKSWITCH_ENABLE
|
|
|
|
#error unexpected test config, only psram 32MBit ver 0 at 80MHz will trigger the workaround
|
|
|
|
#endif
|
|
|
|
|
|
|
|
spi_host_device_t host;
|
|
|
|
if (!psram_is_32mbit_ver0()) {
|
|
|
|
TEST_FAIL_MESSAGE("unexpected psram version");
|
|
|
|
}
|
|
|
|
|
|
|
|
#if CONFIG_SPIRAM_OCCUPY_HSPI_HOST
|
|
|
|
host = HSPI_HOST;
|
|
|
|
#elif CONFIG_SPIRAM_OCCUPY_VSPI_HOST
|
|
|
|
host = VSPI_HOST;
|
|
|
|
#endif
|
|
|
|
test_spi_bus_occupy(host);
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
TEST_CASE("can use spi when not being used by psram", "[psram_4m]")
|
|
|
|
{
|
|
|
|
#if CONFIG_SPIRAM && CONFIG_SPIRAM_SPEED_80M
|
|
|
|
#error unexpected test config, some runners using the UT_T1_PSRAMV0 but still perform this test.\
|
|
|
|
they will not pass this test at 80MHz.
|
|
|
|
#endif
|
|
|
|
test_spi_bus_occupy(-1);
|
|
|
|
}
|
|
|
|
#endif
|
2021-03-19 03:54:30 -04:00
|
|
|
|
|
|
|
#endif // CONFIG_IDF_TARGET_ESP32
|