tests: boards: espressif: Add RTC CLK test
Add tests for the rtc clk subsystem. Signed-off-by: Lucas Tamborrino <lucas.tamborrino@espressif.com>
This commit is contained in:
parent
0b72ded057
commit
4684b192bc
6 changed files with 320 additions and 0 deletions
8
tests/boards/espressif_esp32/rtc_clk/CMakeLists.txt
Normal file
8
tests/boards/espressif_esp32/rtc_clk/CMakeLists.txt
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
cmake_minimum_required(VERSION 3.20.0)
|
||||||
|
|
||||||
|
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
|
||||||
|
project(rtc_clk_test)
|
||||||
|
|
||||||
|
target_sources(app PRIVATE src/rtc_clk_test.c)
|
10
tests/boards/espressif_esp32/rtc_clk/Kconfig
Normal file
10
tests/boards/espressif_esp32/rtc_clk/Kconfig
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
# Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd.
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
mainmenu "RTC CLK Test Configuration"
|
||||||
|
|
||||||
|
source "Kconfig.zephyr"
|
||||||
|
|
||||||
|
config FIXTURE_XTAL
|
||||||
|
bool "Selected when external crystal is present"
|
||||||
|
default n
|
85
tests/boards/espressif_esp32/rtc_clk/README.rst
Normal file
85
tests/boards/espressif_esp32/rtc_clk/README.rst
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
.. _rtc_clk_test:
|
||||||
|
|
||||||
|
Espressif's RTC Clock test
|
||||||
|
##########################
|
||||||
|
|
||||||
|
Overview
|
||||||
|
********
|
||||||
|
|
||||||
|
This test iterates through all the clock sources and checks if the expected frequency is being set.
|
||||||
|
Espressif SOCs have 3 main clock subsystems: CPU, RTC_FAST and RTC_SLOW. Each of these subsystems have their own clock sources and possible rates.
|
||||||
|
|
||||||
|
|
||||||
|
Supported Boards
|
||||||
|
****************
|
||||||
|
- esp32_devkitc_wrover/esp32/procpu
|
||||||
|
- esp32c3_devkitm
|
||||||
|
- esp32s2_saola
|
||||||
|
- esp32s3_devkitm/esp32s3/procpu
|
||||||
|
|
||||||
|
Building and Running
|
||||||
|
********************
|
||||||
|
|
||||||
|
Make sure you have the target connected over USB port.
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
west build -b <board> tests/boards/espressif_esp32/rtc_clk
|
||||||
|
west flash && west espressif monitor
|
||||||
|
|
||||||
|
To run the test with twister, use the following command:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
west twister -p <board> --device-testing --device-serial=/dev/ttyUSB0 -vv --flash-before -T tests/boards/espressif_esp32/rtc_clk
|
||||||
|
|
||||||
|
If the external 32K crystal is connect to pins 32K_XP and 32K_XN, the test can be run with `external_xtal` fixture enabled:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
west twister -p esp32c3_devkitm --device-testing --device-serial=/dev/ttyUSB0 -vv --flash-before -T tests/boards/espressif_esp32/rtc_clk -X external_xtal
|
||||||
|
|
||||||
|
Sample Output
|
||||||
|
=============
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
*** Booting Zephyr OS build v3.6.0-3162-g529005998ea6 ***
|
||||||
|
Running TESTSUITE rtc_clk
|
||||||
|
===================================================================
|
||||||
|
CPU frequency: 240000000
|
||||||
|
RTC_FAST frequency: 17500000
|
||||||
|
RTC_SLOW frequency: 136000
|
||||||
|
START - test_cpu_pll_src
|
||||||
|
Testing CPU frequency: 80 MHz
|
||||||
|
Testing CPU frequency: 160 MHz
|
||||||
|
Testing CPU frequency: 240 MHz
|
||||||
|
PASS - test_cpu_pll_src in 0.020 seconds
|
||||||
|
===================================================================
|
||||||
|
START - test_cpu_xtal_src
|
||||||
|
Testing CPU frequency: 40 MHz
|
||||||
|
Testing CPU frequency: 20 MHz
|
||||||
|
Testing CPU frequency: 10 MHz
|
||||||
|
Testing CPU frequency: 5 MHz
|
||||||
|
PASS - test_cpu_xtal_src in 17.645 seconds
|
||||||
|
===================================================================
|
||||||
|
START - test_rtc_fast_src
|
||||||
|
Testing RTC FAST CLK freq: 20000000 MHz
|
||||||
|
Testing RTC FAST CLK freq: 17500000 MHz
|
||||||
|
PASS - test_rtc_fast_src in 0.001 seconds
|
||||||
|
===================================================================
|
||||||
|
START - test_rtc_slow_src
|
||||||
|
Testing RTC SLOW CLK freq: 136000 MHz
|
||||||
|
Testing RTC SLOW CLK freq: 68359 MHz
|
||||||
|
PASS - test_rtc_slow_src in 0.002 seconds
|
||||||
|
===================================================================
|
||||||
|
TESTSUITE rtc_clk succeeded
|
||||||
|
------ TESTSUITE SUMMARY START ------
|
||||||
|
SUITE PASS - 100.00% [rtc_clk]: pass = 4, fail = 0, skip = 0, total = 4 duration = 17.668 seconds
|
||||||
|
- PASS - [rtc_clk.test_cpu_pll_src] duration = 0.020 seconds
|
||||||
|
- PASS - [rtc_clk.test_cpu_xtal_src] duration = 17.645 seconds
|
||||||
|
- PASS - [rtc_clk.test_rtc_fast_src] duration = 0.001 seconds
|
||||||
|
- PASS - [rtc_clk.test_rtc_slow_src] duration = 0.002 seconds
|
||||||
|
------ TESTSUITE SUMMARY END ------
|
||||||
|
===================================================================
|
||||||
|
PROJECT EXECUTION SUCCESSFUL
|
1
tests/boards/espressif_esp32/rtc_clk/prj.conf
Normal file
1
tests/boards/espressif_esp32/rtc_clk/prj.conf
Normal file
|
@ -0,0 +1 @@
|
||||||
|
CONFIG_ZTEST=y
|
199
tests/boards/espressif_esp32/rtc_clk/src/rtc_clk_test.c
Normal file
199
tests/boards/espressif_esp32/rtc_clk/src/rtc_clk_test.c
Normal file
|
@ -0,0 +1,199 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <zephyr/kernel.h>
|
||||||
|
#include <zephyr/ztest.h>
|
||||||
|
#include <zephyr/devicetree.h>
|
||||||
|
#include <zephyr/sys/printk.h>
|
||||||
|
#include <zephyr/drivers/clock_control/esp32_clock_control.h>
|
||||||
|
#include <zephyr/drivers/clock_control.h>
|
||||||
|
|
||||||
|
#if defined(CONFIG_SOC_SERIES_ESP32)
|
||||||
|
#define DT_CPU_COMPAT espressif_xtensa_lx6
|
||||||
|
#elif defined(CONFIG_SOC_SERIES_ESP32S2) || defined(CONFIG_SOC_SERIES_ESP32S3)
|
||||||
|
#define DT_CPU_COMPAT espressif_xtensa_lx7
|
||||||
|
#elif CONFIG_SOC_SERIES_ESP32C3
|
||||||
|
#define DT_CPU_COMPAT espressif_riscv
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static const struct device *const clk_dev = DEVICE_DT_GET_ONE(espressif_esp32_rtc);
|
||||||
|
|
||||||
|
static void *rtc_clk_setup(void)
|
||||||
|
{
|
||||||
|
zassert_true(device_is_ready(clk_dev), "CLK device is not ready");
|
||||||
|
uint32_t rate = 0;
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
ret = clock_control_get_rate(clk_dev,
|
||||||
|
(clock_control_subsys_t)ESP32_CLOCK_CONTROL_SUBSYS_CPU, &rate);
|
||||||
|
zassert_false(ret, "Failed to get CPU clock rate");
|
||||||
|
TC_PRINT("CPU frequency: %d\n", rate);
|
||||||
|
|
||||||
|
ret = clock_control_get_rate(
|
||||||
|
clk_dev, (clock_control_subsys_t)ESP32_CLOCK_CONTROL_SUBSYS_RTC_FAST, &rate);
|
||||||
|
zassert_false(ret, "Failed to get RTC_FAST clock rate");
|
||||||
|
TC_PRINT("RTC_FAST frequency: %d\n", rate);
|
||||||
|
|
||||||
|
ret = clock_control_get_rate(
|
||||||
|
clk_dev, (clock_control_subsys_t)ESP32_CLOCK_CONTROL_SUBSYS_RTC_SLOW, &rate);
|
||||||
|
zassert_false(ret, "Failed to get RTC_SLOW clock rate");
|
||||||
|
TC_PRINT("RTC_SLOW frequency: %d\n", rate);
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ZTEST(rtc_clk, test_cpu_xtal_src)
|
||||||
|
{
|
||||||
|
struct esp32_clock_config clk_cfg = {0};
|
||||||
|
int ret = 0;
|
||||||
|
uint32_t cpu_rate = 0;
|
||||||
|
|
||||||
|
clk_cfg.cpu.clk_src = ESP32_CPU_CLK_SRC_XTAL;
|
||||||
|
clk_cfg.cpu.xtal_freq = (DT_PROP(DT_INST(0, DT_CPU_COMPAT), xtal_freq) / MHZ(1));
|
||||||
|
|
||||||
|
for (uint8_t i = 0; i < 4; i++) {
|
||||||
|
clk_cfg.cpu.cpu_freq = clk_cfg.cpu.xtal_freq >> i;
|
||||||
|
|
||||||
|
TC_PRINT("Testing CPU frequency: %d MHz\n", clk_cfg.cpu.cpu_freq);
|
||||||
|
|
||||||
|
ret = clock_control_configure(
|
||||||
|
clk_dev, (clock_control_subsys_t)ESP32_CLOCK_CONTROL_SUBSYS_CPU, &clk_cfg);
|
||||||
|
zassert_false(ret, "Failed to set CPU clock source");
|
||||||
|
|
||||||
|
ret = clock_control_get_rate(
|
||||||
|
clk_dev, (clock_control_subsys_t)ESP32_CLOCK_CONTROL_SUBSYS_CPU, &cpu_rate);
|
||||||
|
zassert_false(ret, "Failed to get CPU clock rate");
|
||||||
|
zassert_equal(cpu_rate, clk_cfg.cpu.cpu_freq * MHZ(1),
|
||||||
|
"CPU clock rate is not equal to XTAL frequency (%d != %d)", cpu_rate,
|
||||||
|
clk_cfg.cpu.cpu_freq);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t rtc_pll_src_freq_mhz[] = {
|
||||||
|
ESP32_CLK_CPU_PLL_80M,
|
||||||
|
ESP32_CLK_CPU_PLL_160M,
|
||||||
|
#if !defined(CONFIG_SOC_SERIES_ESP32C3)
|
||||||
|
ESP32_CLK_CPU_PLL_240M,
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
ZTEST(rtc_clk, test_cpu_pll_src)
|
||||||
|
{
|
||||||
|
struct esp32_clock_config clk_cfg = {0};
|
||||||
|
int ret = 0;
|
||||||
|
uint32_t cpu_rate = 0;
|
||||||
|
|
||||||
|
clk_cfg.cpu.clk_src = ESP32_CPU_CLK_SRC_PLL;
|
||||||
|
clk_cfg.cpu.xtal_freq = (DT_PROP(DT_INST(0, DT_CPU_COMPAT), xtal_freq) / MHZ(1));
|
||||||
|
|
||||||
|
for (uint8_t i = 0; i < ARRAY_SIZE(rtc_pll_src_freq_mhz); i++) {
|
||||||
|
clk_cfg.cpu.cpu_freq = rtc_pll_src_freq_mhz[i] / MHZ(1);
|
||||||
|
|
||||||
|
TC_PRINT("Testing CPU frequency: %d MHz\n", clk_cfg.cpu.cpu_freq);
|
||||||
|
|
||||||
|
ret = clock_control_configure(
|
||||||
|
clk_dev, (clock_control_subsys_t)ESP32_CLOCK_CONTROL_SUBSYS_CPU, &clk_cfg);
|
||||||
|
zassert_false(ret, "Failed to set CPU clock source");
|
||||||
|
|
||||||
|
ret = clock_control_get_rate(
|
||||||
|
clk_dev, (clock_control_subsys_t)ESP32_CLOCK_CONTROL_SUBSYS_CPU, &cpu_rate);
|
||||||
|
zassert_false(ret, "Failed to get CPU clock rate");
|
||||||
|
zassert_equal(cpu_rate, clk_cfg.cpu.cpu_freq * MHZ(1),
|
||||||
|
"CPU clock rate is not equal to configured frequency (%d != %d)",
|
||||||
|
cpu_rate, clk_cfg.cpu.cpu_freq);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t rtc_rtc_fast_clk_src[] = {
|
||||||
|
#if defined(CONFIG_SOC_SERIES_ESP32) || defined(CONFIG_SOC_SERIES_ESP32S2)
|
||||||
|
ESP32_RTC_FAST_CLK_SRC_XTAL_D4,
|
||||||
|
#else
|
||||||
|
ESP32_RTC_FAST_CLK_SRC_XTAL_D2,
|
||||||
|
#endif
|
||||||
|
ESP32_RTC_FAST_CLK_SRC_RC_FAST};
|
||||||
|
|
||||||
|
uint32_t rtc_rtc_fast_clk_src_freq_mhz[] = {
|
||||||
|
#if defined(CONFIG_SOC_SERIES_ESP32) || defined(CONFIG_SOC_SERIES_ESP32S2)
|
||||||
|
DT_PROP(DT_INST(0, DT_CPU_COMPAT), xtal_freq) / 4,
|
||||||
|
#else
|
||||||
|
DT_PROP(DT_INST(0, DT_CPU_COMPAT), xtal_freq) / 2,
|
||||||
|
#endif
|
||||||
|
ESP32_CLK_CPU_RC_FAST_FREQ
|
||||||
|
};
|
||||||
|
|
||||||
|
ZTEST(rtc_clk, test_rtc_fast_src)
|
||||||
|
{
|
||||||
|
struct esp32_clock_config clk_cfg = {0};
|
||||||
|
int ret = 0;
|
||||||
|
uint32_t cpu_rate = 0;
|
||||||
|
|
||||||
|
clk_cfg.cpu.xtal_freq = (DT_PROP(DT_INST(0, DT_CPU_COMPAT), xtal_freq) / MHZ(1));
|
||||||
|
|
||||||
|
for (uint8_t i = 0; i < ARRAY_SIZE(rtc_rtc_fast_clk_src); i++) {
|
||||||
|
clk_cfg.rtc.rtc_fast_clock_src = rtc_rtc_fast_clk_src[i];
|
||||||
|
|
||||||
|
TC_PRINT("Testing RTC FAST CLK freq: %d MHz\n", rtc_rtc_fast_clk_src_freq_mhz[i]);
|
||||||
|
|
||||||
|
ret = clock_control_configure(
|
||||||
|
clk_dev, (clock_control_subsys_t)ESP32_CLOCK_CONTROL_SUBSYS_RTC_FAST,
|
||||||
|
&clk_cfg);
|
||||||
|
zassert_false(ret, "Failed to set CPU clock source");
|
||||||
|
|
||||||
|
ret = clock_control_get_rate(
|
||||||
|
clk_dev, (clock_control_subsys_t)ESP32_CLOCK_CONTROL_SUBSYS_RTC_FAST,
|
||||||
|
&cpu_rate);
|
||||||
|
zassert_false(ret, "Failed to get RTC_FAST clock rate");
|
||||||
|
zassert_equal(cpu_rate, rtc_rtc_fast_clk_src_freq_mhz[i],
|
||||||
|
"CPU clock rate is not equal to configured frequency (%d != %d)",
|
||||||
|
cpu_rate, rtc_rtc_fast_clk_src_freq_mhz[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t rtc_rtc_slow_clk_src[] = {
|
||||||
|
ESP32_RTC_SLOW_CLK_SRC_RC_SLOW,
|
||||||
|
ESP32_RTC_SLOW_CLK_SRC_RC_FAST_D256,
|
||||||
|
#if CONFIG_FIXTURE_XTAL
|
||||||
|
ESP32_RTC_SLOW_CLK_SRC_XTAL32K,
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
uint32_t rtc_rtc_slow_clk_src_freq[] = {
|
||||||
|
ESP32_RTC_SLOW_CLK_SRC_RC_SLOW_FREQ,
|
||||||
|
ESP32_RTC_SLOW_CLK_SRC_RC_FAST_D256_FREQ,
|
||||||
|
#if CONFIG_FIXTURE_XTAL
|
||||||
|
ESP32_RTC_SLOW_CLK_SRC_XTAL32K_FREQ,
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
ZTEST(rtc_clk, test_rtc_slow_src)
|
||||||
|
{
|
||||||
|
struct esp32_clock_config clk_cfg = {0};
|
||||||
|
int ret = 0;
|
||||||
|
uint32_t cpu_rate = 0;
|
||||||
|
|
||||||
|
clk_cfg.cpu.xtal_freq = (DT_PROP(DT_INST(0, DT_CPU_COMPAT), xtal_freq) / MHZ(1));
|
||||||
|
|
||||||
|
for (uint8_t i = 0; i < ARRAY_SIZE(rtc_rtc_slow_clk_src); i++) {
|
||||||
|
clk_cfg.rtc.rtc_slow_clock_src = rtc_rtc_slow_clk_src[i];
|
||||||
|
|
||||||
|
TC_PRINT("Testing RTC SLOW CLK freq: %d MHz\n", rtc_rtc_slow_clk_src_freq[i]);
|
||||||
|
|
||||||
|
ret = clock_control_configure(
|
||||||
|
clk_dev, (clock_control_subsys_t)ESP32_CLOCK_CONTROL_SUBSYS_RTC_SLOW,
|
||||||
|
&clk_cfg);
|
||||||
|
zassert_false(ret, "Failed to set CPU clock source");
|
||||||
|
|
||||||
|
ret = clock_control_get_rate(
|
||||||
|
clk_dev, (clock_control_subsys_t)ESP32_CLOCK_CONTROL_SUBSYS_RTC_SLOW,
|
||||||
|
&cpu_rate);
|
||||||
|
zassert_false(ret, "Failed to get RTC_SLOW clock rate");
|
||||||
|
zassert_equal(cpu_rate, rtc_rtc_slow_clk_src_freq[i],
|
||||||
|
"CPU clock rate is not equal to configured frequency (%d != %d)",
|
||||||
|
cpu_rate, rtc_rtc_slow_clk_src_freq[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ZTEST_SUITE(rtc_clk, NULL, rtc_clk_setup, NULL, NULL, NULL);
|
17
tests/boards/espressif_esp32/rtc_clk/testcase.yaml
Normal file
17
tests/boards/espressif_esp32/rtc_clk/testcase.yaml
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
tests:
|
||||||
|
boards.esp32.rtc_clk:
|
||||||
|
platform_allow:
|
||||||
|
- esp32_devkitc_wrover/esp32/procpu
|
||||||
|
- esp32c3_devkitm
|
||||||
|
- esp32s2_saola
|
||||||
|
- esp32s3_devkitm/esp32s3/procpu
|
||||||
|
boards.esp32.rtc_clk.xtal:
|
||||||
|
platform_allow:
|
||||||
|
- esp32_devkitc_wrover/esp32/procpu
|
||||||
|
- esp32c3_devkitm
|
||||||
|
- esp32s2_saola
|
||||||
|
- esp32s3_devkitm/esp32s3/procpu
|
||||||
|
harness_config:
|
||||||
|
fixture: external_xtal
|
||||||
|
extra_configs:
|
||||||
|
- CONFIG_FIXTURE_XTAL=y
|
Loading…
Add table
Add a link
Reference in a new issue