From dd311381a4ab3b0e3a908a1d31b86103d0c94198 Mon Sep 17 00:00:00 2001 From: Song Ruo Jing Date: Thu, 27 Oct 2022 14:52:23 +0800 Subject: [PATCH] rtcio: Add a test case to test RTCIO's hold ability after deep sleep wakeup --- .../driver/test_apps/gpio/main/test_rtcio.c | 49 +++++++++++++++++++ .../driver/test_apps/gpio/pytest_gpio.py | 7 +-- 2 files changed, 51 insertions(+), 5 deletions(-) diff --git a/components/driver/test_apps/gpio/main/test_rtcio.c b/components/driver/test_apps/gpio/main/test_rtcio.c index c6a3023309..44def90091 100644 --- a/components/driver/test_apps/gpio/main/test_rtcio.c +++ b/components/driver/test_apps/gpio/main/test_rtcio.c @@ -304,3 +304,52 @@ TEST_CASE("RTCIO_output_hold_test", "[rtcio]") } ESP_LOGI(TAG, "RTCIO hold test over"); } + +// It is not necessary to test every rtcio pin, it will take too much ci testing time for deep sleep +// Only tests on s_test_map[TEST_RTCIO_DEEP_SLEEP_PIN_INDEX] pin +// (ESP32: IO25, ESP32S2, S3: IO6) these pads' default configuration is low level +#define TEST_RTCIO_DEEP_SLEEP_PIN_INDEX 5 + +static void rtcio_deep_sleep_hold_test_first_stage(void) +{ + printf("configure rtcio pin to hold during deep sleep"); + int io_num = s_test_map[TEST_RTCIO_DEEP_SLEEP_PIN_INDEX]; + + TEST_ESP_OK(esp_sleep_enable_timer_wakeup(2000000)); + + gpio_config_t io_conf = { + .intr_type = GPIO_INTR_DISABLE, + .mode = GPIO_MODE_INPUT_OUTPUT, + .pin_bit_mask = (1ULL << io_num), + .pull_down_en = 0, + .pull_up_en = 0, + }; + gpio_config(&io_conf); + + gpio_set_level(io_num, 1); + // Enable global persistence + TEST_ESP_OK(gpio_hold_en(io_num)); + + esp_deep_sleep_start(); +} + +static void rtcio_deep_sleep_hold_test_second_stage(void) +{ + int io_num = s_test_map[TEST_RTCIO_DEEP_SLEEP_PIN_INDEX]; + // Check reset reason is waking up from deepsleep + TEST_ASSERT_EQUAL(ESP_RST_DEEPSLEEP, esp_reset_reason()); + // Pin should stay at high level after the deep sleep + TEST_ASSERT_EQUAL_INT(1, gpio_get_level(io_num)); + + gpio_hold_dis(io_num); +} + +/* + * Test rtcio hold function during deep sleep. + * This test case can only check the hold state after waking up from deep sleep + * If you want to check that the rtcio hold function works properly during deep sleep, + * please use logic analyzer or oscillscope + */ +TEST_CASE_MULTIPLE_STAGES("RTCIO_deep_sleep_output_hold_test", "[rtcio]", + rtcio_deep_sleep_hold_test_first_stage, + rtcio_deep_sleep_hold_test_second_stage) diff --git a/components/driver/test_apps/gpio/pytest_gpio.py b/components/driver/test_apps/gpio/pytest_gpio.py index cbc30e3ba5..53ee3a2c70 100644 --- a/components/driver/test_apps/gpio/pytest_gpio.py +++ b/components/driver/test_apps/gpio/pytest_gpio.py @@ -2,7 +2,6 @@ # SPDX-License-Identifier: CC0-1.0 import pytest -from pytest_embedded import Dut @pytest.mark.supported_targets @@ -15,7 +14,5 @@ from pytest_embedded import Dut ], indirect=True, ) -def test_gpio(dut: Dut) -> None: - dut.expect_exact('Press ENTER to see the list of tests') - dut.write('*') - dut.expect_unity_test_output(timeout=300) +def test_gpio(case_tester) -> None: # type: ignore + case_tester.run_all_cases(timeout=300)