diff --git a/components/esp_system/test_apps/rtc_8md256/CMakeLists.txt b/components/esp_system/test_apps/rtc_8md256/CMakeLists.txt new file mode 100644 index 0000000000..46c2c5b8ac --- /dev/null +++ b/components/esp_system/test_apps/rtc_8md256/CMakeLists.txt @@ -0,0 +1,7 @@ +# This is the project CMakeLists.txt file for the test subproject +cmake_minimum_required(VERSION 3.5) + +set(EXTRA_COMPONENT_DIRS "$ENV{IDF_PATH}/tools/unit-test-app/components") + +include($ENV{IDF_PATH}/tools/cmake/project.cmake) +project(rtc_8md256) diff --git a/components/esp_system/test_apps/rtc_8md256/component_ut_test.py b/components/esp_system/test_apps/rtc_8md256/component_ut_test.py new file mode 100644 index 0000000000..f0d88e7573 --- /dev/null +++ b/components/esp_system/test_apps/rtc_8md256/component_ut_test.py @@ -0,0 +1,66 @@ +# SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD +# SPDX-License-Identifier: CC0-1.0 + +import re + +import ttfw_idf + + +def deepsleep_test(dut, case_name): + dut.expect('Press ENTER to see the list of tests') + dut.write(case_name) + reset_reason = 'DEEPSLEEP_RESET' if dut.TARGET == 'esp32' else 'DSLEEP' + if dut.TARGET == 'esp32c3': + # Known issue: IDF-5003 + dut.expect(re.compile(r'rst:.*\(%s\)' % reset_reason), timeout=40) + else: + dut.expect(re.compile(r'rst:.*\(%s\)' % reset_reason), timeout=10) + + +@ttfw_idf.idf_component_unit_test(env_tag='COMPONENT_UT_GENERIC', target=['esp32', 'esp32s2', 'esp32c3']) +def test_component_ut_rtc_8md256_deepsleep_force_rtcperiph(env, _): + dut = env.get_dut('rtc_8md256', 'components/esp_system/test_apps/rtc_8md256') + dut.start_app() + + deepsleep_test(dut, '"Can use 8MD256 as RTC clock source in deepsleep (force rtc_periph)"') + + +@ttfw_idf.idf_component_unit_test(env_tag='COMPONENT_UT_GENERIC', target=['esp32', 'esp32s2', 'esp32c3']) +def test_component_ut_rtc_8md256_deepsleep(env, _): + dut = env.get_dut('rtc_8md256', 'components/esp_system/test_apps/rtc_8md256') + dut.start_app() + + deepsleep_test(dut, '"Can use 8MD256 as RTC clock source in deepsleep"') + + +def lightsleep_test(dut, case_name): + dut.expect('Press ENTER to see the list of tests') + dut.write(case_name) + if dut.TARGET == 'esp32c3': + # Known issue: IDF-5003 + dut.expect(r'Returned from light sleep, reason: timer', timeout=40) + else: + dut.expect(r'Returned from light sleep, reason: timer', timeout=10) + + +@ttfw_idf.idf_component_unit_test(env_tag='COMPONENT_UT_GENERIC', target=['esp32', 'esp32s2', 'esp32c3']) +def test_component_ut_rtc_8md256_lightsleep(env, _): + dut = env.get_dut('rtc_8md256', 'components/esp_system/test_apps/rtc_8md256') + dut.start_app() + + lightsleep_test(dut, '"Can use 8MD256 as RTC clock source in lightsleep"') + + +@ttfw_idf.idf_component_unit_test(env_tag='COMPONENT_UT_GENERIC', target=['esp32', 'esp32s2', 'esp32c3']) +def test_component_ut_rtc_8md256_lightsleep_force_rtcperiph(env, _): + dut = env.get_dut('rtc_8md256', 'components/esp_system/test_apps/rtc_8md256') + dut.start_app() + + lightsleep_test(dut, '"Can use 8MD256 as RTC clock source in lightsleep (force rtc_periph)"') + + +if __name__ == '__main__': + test_component_ut_rtc_8md256_deepsleep() + test_component_ut_rtc_8md256_deepsleep_force_rtcperiph() + test_component_ut_rtc_8md256_lightsleep() + test_component_ut_rtc_8md256_lightsleep_force_rtcperiph() diff --git a/components/esp_system/test_apps/rtc_8md256/main/CMakeLists.txt b/components/esp_system/test_apps/rtc_8md256/main/CMakeLists.txt new file mode 100644 index 0000000000..de06a799d0 --- /dev/null +++ b/components/esp_system/test_apps/rtc_8md256/main/CMakeLists.txt @@ -0,0 +1,2 @@ +idf_component_register(SRCS "test_rtc_8md256.c" + PRIV_REQUIRES unity) diff --git a/components/esp_system/test_apps/rtc_8md256/main/test_rtc_8md256.c b/components/esp_system/test_apps/rtc_8md256/main/test_rtc_8md256.c new file mode 100644 index 0000000000..73c46a38c7 --- /dev/null +++ b/components/esp_system/test_apps/rtc_8md256/main/test_rtc_8md256.c @@ -0,0 +1,95 @@ +/* + * SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include "esp_sleep.h" +#include "unity.h" +#include "esp_log.h" +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "driver/uart.h" +#include "soc/soc_caps.h" + +static const char TAG[] = "rtc_8m"; + +static void test_deepsleep(bool force_rtc_periph) +{ + esp_sleep_enable_timer_wakeup(2000000); +#if SOC_PM_SUPPORT_RTC_PERIPH_PD + if (force_rtc_periph) { + esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON); + } +#else + (void)force_rtc_periph; +#endif + + ESP_LOGI(TAG, "Entering deep sleep"); + esp_deep_sleep_start(); +} + +TEST_CASE("Can use 8MD256 as RTC clock source in deepsleep", "[pm]") +{ + test_deepsleep(false); +} + +static void test_lightsleep(bool force_rtc_periph) +{ + esp_sleep_enable_timer_wakeup(2000000); +#if SOC_PM_SUPPORT_RTC_PERIPH_PD + if (force_rtc_periph) { + esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON); + } +#else + (void)force_rtc_periph; +#endif + + while (true) { + printf("Entering light sleep\n"); + /* To make sure the complete line is printed before entering sleep mode, + * need to wait until UART TX FIFO is empty: + */ + uart_wait_tx_idle_polling(CONFIG_ESP_CONSOLE_UART_NUM); + + /* Enter sleep mode */ + esp_light_sleep_start(); + + /* Determine wake up reason */ + const char* wakeup_reason; + switch (esp_sleep_get_wakeup_cause()) { + case ESP_SLEEP_WAKEUP_TIMER: + wakeup_reason = "timer"; + break; + default: + wakeup_reason = "other"; + break; + } + printf("Returned from light sleep, reason: %s\n", wakeup_reason); + vTaskDelay(1000/portTICK_PERIOD_MS); + } +} + +TEST_CASE("Can use 8MD256 as RTC clock source in lightsleep", "[pm]") +{ + test_lightsleep(false); +} + +#if SOC_PM_SUPPORT_RTC_PERIPH_PD +TEST_CASE("Can use 8MD256 as RTC clock source in deepsleep (force rtc_periph)", "[pm]") +{ + test_deepsleep(true); +} + +TEST_CASE("Can use 8MD256 as RTC clock source in lightsleep (force rtc_periph)", "[pm]") +{ + test_lightsleep(true); +} +#endif + +void app_main(void) +{ + unity_run_menu(); +} diff --git a/components/esp_system/test_apps/rtc_8md256/sdkconfig.defaults b/components/esp_system/test_apps/rtc_8md256/sdkconfig.defaults new file mode 100644 index 0000000000..3660129c9f --- /dev/null +++ b/components/esp_system/test_apps/rtc_8md256/sdkconfig.defaults @@ -0,0 +1,3 @@ +CONFIG_FREERTOS_HZ=1000 +CONFIG_ESP_TASK_WDT=n +CONFIG_RTC_CLK_SRC_INT_8MD256=y