| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- /*
- * SPDX-FileCopyrightText: 2021-2023 Espressif Systems (Shanghai) CO LTD
- *
- * SPDX-License-Identifier: Apache-2.0
- */
- #include "esp_heap_caps.h"
- #include "unity.h"
- #include "esp_log.h"
- #include "esp_private/spi_common_internal.h"
- #include "sdkconfig.h"
- #if CONFIG_IDF_TARGET_ESP32
- static const char TAG[] = "test_psram";
- #ifdef CONFIG_SPIRAM
- static void test_psram_content(void)
- {
- const int test_size = 2048;
- uint32_t *test_area = heap_caps_malloc(test_size, MALLOC_CAP_SPIRAM);
- size_t p;
- 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;
- }
- for (p = 0; p < (s / sizeof(int)); p += 4) {
- if (test_area[p] != (p ^ 0xAAAAAAAA)) {
- errct++;
- if (errct == 1) {
- initial_err = p * 4;
- }
- }
- }
- if (errct) {
- ESP_LOGE(TAG, "SPI SRAM memory test fail. %d/%d writes failed, first @ %p", errct, s / 32, initial_err + test_area);
- TEST_FAIL();
- } else {
- ESP_LOGI(TAG, "SPI SRAM memory test OK");
- }
- free(test_area);
- }
- #endif
- bool psram_is_32mbit_ver0(void);
- static void test_spi_bus_occupy(spi_host_device_t expected_occupied_host)
- {
- bool claim_hspi = spicommon_periph_claim(HSPI_HOST, "ut-hspi");
- if (claim_hspi) {
- ESP_LOGI(TAG, "HSPI claimed.");
- }
- bool claim_vspi = spicommon_periph_claim(VSPI_HOST, "ut-vspi");
- if (claim_vspi) {
- ESP_LOGI(TAG, "VSPI claimed.");
- }
- 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);
- } else {
- TEST_ASSERT(claim_hspi);
- TEST_ASSERT(claim_vspi);
- }
- #ifdef CONFIG_SPIRAM
- test_psram_content();
- #endif
- }
- #if CONFIG_SPIRAM_OCCUPY_HSPI_HOST || CONFIG_SPIRAM_OCCUPY_VSPI_HOST
- TEST_CASE("some spi bus occpied by psram", "[psram_4m]")
- {
- // NOTE: this unit test rely on the config that PSRAM of 8MB is used only when CONFIG_SPIRAM_BANKSWITCH_ENABLE is set
- //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
- #endif // CONFIG_IDF_TARGET_ESP32
|