tests: drivers: spi: spi_slave: Extend test scope
Add possibility to test all four SPI modes (CPOL, CPHA). Add possibility to test different bitrates. Add tests that checks handling of zero length buffers on master. Signed-off-by: Sebastian Głąb <sebastian.glab@nordicsemi.no>
This commit is contained in:
parent
1868987a2f
commit
b82946fba7
13 changed files with 180 additions and 15 deletions
14
tests/drivers/spi/spi_slave/Kconfig
Normal file
14
tests/drivers/spi/spi_slave/Kconfig
Normal file
|
@ -0,0 +1,14 @@
|
|||
# Copyright (c) 2024 Nordic Semiconductor ASA
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
config TESTED_SPI_MODE
|
||||
int "SPI mode"
|
||||
default 0
|
||||
help
|
||||
SPI mode value (clock polarity and phase) used in the test.
|
||||
0: CPOL 0 (Active high), CPHA 0 (leading)
|
||||
1: CPOL 0 (Active high), CPHA 1 (trailing)
|
||||
2: CPOL 1 (Active low), CPHA 0 (leading)
|
||||
3: CPOL 1 (Active low), CPHA 1 (trailing)
|
||||
|
||||
source "Kconfig.zephyr"
|
9
tests/drivers/spi/spi_slave/README.txt
Normal file
9
tests/drivers/spi/spi_slave/README.txt
Normal file
|
@ -0,0 +1,9 @@
|
|||
In this test suite two instances of the SPI peripheral are connected together.
|
||||
One SPI instance works as a master, second one is configured as a slave.
|
||||
In each test, both instances get identical configuration (CPOL, CPHA, bitrate, etc.).
|
||||
|
||||
Four GPIO loopbacks are required (see overlay for nrf54l15pdk for reference):
|
||||
1. spi22-SPIM_SCK connected with spi21-SPIS_SCK,
|
||||
2. spi22-SPIM_MISO connected with spi21-SPIS_MISO,
|
||||
3. spi22-SPIM_MOSI connected with spi21-SPIS_MOSI,
|
||||
4. spi22-cs-gpios connected with spi21-SPIS_CSN.
|
9
tests/drivers/spi/spi_slave/boards/1mhz.overlay
Normal file
9
tests/drivers/spi/spi_slave/boards/1mhz.overlay
Normal file
|
@ -0,0 +1,9 @@
|
|||
/*
|
||||
* Copyright (c) 2024 Nordic Semiconductor
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
&dut_spi_dt {
|
||||
spi-max-frequency = <1000000>;
|
||||
};
|
9
tests/drivers/spi/spi_slave/boards/250khz.overlay
Normal file
9
tests/drivers/spi/spi_slave/boards/250khz.overlay
Normal file
|
@ -0,0 +1,9 @@
|
|||
/*
|
||||
* Copyright (c) 2024 Nordic Semiconductor
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
&dut_spi_dt {
|
||||
spi-max-frequency = <250000>;
|
||||
};
|
9
tests/drivers/spi/spi_slave/boards/2mhz.overlay
Normal file
9
tests/drivers/spi/spi_slave/boards/2mhz.overlay
Normal file
|
@ -0,0 +1,9 @@
|
|||
/*
|
||||
* Copyright (c) 2024 Nordic Semiconductor
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
&dut_spi_dt {
|
||||
spi-max-frequency = <2000000>;
|
||||
};
|
9
tests/drivers/spi/spi_slave/boards/4mhz.overlay
Normal file
9
tests/drivers/spi/spi_slave/boards/4mhz.overlay
Normal file
|
@ -0,0 +1,9 @@
|
|||
/*
|
||||
* Copyright (c) 2024 Nordic Semiconductor
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
&dut_spi_dt {
|
||||
spi-max-frequency = <4000000>;
|
||||
};
|
9
tests/drivers/spi/spi_slave/boards/500khz.overlay
Normal file
9
tests/drivers/spi/spi_slave/boards/500khz.overlay
Normal file
|
@ -0,0 +1,9 @@
|
|||
/*
|
||||
* Copyright (c) 2024 Nordic Semiconductor
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
&dut_spi_dt {
|
||||
spi-max-frequency = <500000>;
|
||||
};
|
9
tests/drivers/spi/spi_slave/boards/8mhz.overlay
Normal file
9
tests/drivers/spi/spi_slave/boards/8mhz.overlay
Normal file
|
@ -0,0 +1,9 @@
|
|||
/*
|
||||
* Copyright (c) 2024 Nordic Semiconductor
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
&dut_spi_dt {
|
||||
spi-max-frequency = <8000000>;
|
||||
};
|
|
@ -53,7 +53,6 @@
|
|||
dut_spi_dt: test-spi-dev@0 {
|
||||
compatible = "vnd,spi-device";
|
||||
reg = <0>;
|
||||
spi-max-frequency = <4000000>;
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -63,7 +63,6 @@ dut_spi: &spi130 {
|
|||
dut_spi_dt: test-spi-dev@0 {
|
||||
compatible = "vnd,spi-device";
|
||||
reg = <0>;
|
||||
spi-max-frequency = <500000>;
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -57,7 +57,6 @@
|
|||
dut_spi_dt: test-spi-dev@0 {
|
||||
compatible = "vnd,spi-device";
|
||||
reg = <0>;
|
||||
spi-max-frequency = <4000000>;
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -11,7 +11,17 @@
|
|||
#include <zephyr/linker/devicetree_regions.h>
|
||||
#include <zephyr/ztest.h>
|
||||
|
||||
#define SPI_MODE (SPI_MODE_CPOL | SPI_MODE_CPHA | SPI_WORD_SET(8) | SPI_LINES_SINGLE)
|
||||
#if CONFIG_TESTED_SPI_MODE == 0
|
||||
#define SPI_MODE (SPI_WORD_SET(8) | SPI_LINES_SINGLE | SPI_TRANSFER_LSB)
|
||||
#elif CONFIG_TESTED_SPI_MODE == 1
|
||||
#define SPI_MODE (SPI_WORD_SET(8) | SPI_LINES_SINGLE | SPI_TRANSFER_MSB | SPI_MODE_CPHA)
|
||||
#elif CONFIG_TESTED_SPI_MODE == 2
|
||||
#define SPI_MODE (SPI_WORD_SET(8) | SPI_LINES_SINGLE | SPI_TRANSFER_LSB | SPI_MODE_CPOL)
|
||||
#elif CONFIG_TESTED_SPI_MODE == 3
|
||||
#define SPI_MODE (SPI_WORD_SET(8) | SPI_LINES_SINGLE | SPI_TRANSFER_MSB | SPI_MODE_CPHA \
|
||||
| SPI_MODE_CPOL)
|
||||
#endif
|
||||
|
||||
#define SPIM_OP (SPI_OP_MODE_MASTER | SPI_MODE)
|
||||
#define SPIS_OP (SPI_OP_MODE_SLAVE | SPI_MODE)
|
||||
|
||||
|
@ -247,6 +257,57 @@ ZTEST(spi_slave, test_basic_async)
|
|||
test_basic(true);
|
||||
}
|
||||
|
||||
/** Basic test with zero length buffers.
|
||||
*/
|
||||
void test_basic_zero_len(bool async)
|
||||
{
|
||||
size_t len = 8;
|
||||
|
||||
/* SPIM */
|
||||
tdata.bufs[0].buf = buf_alloc(len, true);
|
||||
tdata.bufs[0].len = len;
|
||||
tdata.bufs[1].buf = buf_alloc(len, true);
|
||||
/* Intentionally len was set to 0 - second buffer "is empty". */
|
||||
tdata.bufs[1].len = 0;
|
||||
tdata.sets[0].buffers = &tdata.bufs[0];
|
||||
tdata.sets[0].count = 2;
|
||||
tdata.mtx_set = &tdata.sets[0];
|
||||
|
||||
tdata.bufs[2].buf = buf_alloc(len, true);
|
||||
tdata.bufs[2].len = len;
|
||||
tdata.bufs[3].buf = buf_alloc(len, true);
|
||||
/* Intentionally len was set to 0 - second buffer "is empty". */
|
||||
tdata.bufs[3].len = 0;
|
||||
tdata.sets[1].buffers = &tdata.bufs[2];
|
||||
tdata.sets[1].count = 2;
|
||||
tdata.mrx_set = &tdata.sets[1];
|
||||
|
||||
/* SPIS */
|
||||
tdata.bufs[4].buf = buf_alloc(len, false);
|
||||
tdata.bufs[4].len = len;
|
||||
tdata.sets[2].buffers = &tdata.bufs[4];
|
||||
tdata.sets[2].count = 1;
|
||||
tdata.stx_set = &tdata.sets[2];
|
||||
|
||||
tdata.bufs[6].buf = buf_alloc(len, false);
|
||||
tdata.bufs[6].len = len;
|
||||
tdata.sets[3].buffers = &tdata.bufs[6];
|
||||
tdata.sets[3].count = 1;
|
||||
tdata.srx_set = &tdata.sets[3];
|
||||
|
||||
run_test(true, true, async);
|
||||
}
|
||||
|
||||
ZTEST(spi_slave, test_basic_zero_len)
|
||||
{
|
||||
test_basic_zero_len(false);
|
||||
}
|
||||
|
||||
ZTEST(spi_slave, test_basic_zero_len_async)
|
||||
{
|
||||
test_basic_zero_len(true);
|
||||
}
|
||||
|
||||
/** Setup a transfer where RX buffer on master and slave are shorter than
|
||||
* TX buffers. RX buffers shall contain beginning of TX data and last TX
|
||||
* bytes that did not fit in the RX buffers shall be lost.
|
||||
|
|
|
@ -1,12 +1,42 @@
|
|||
common:
|
||||
depends_on: spi
|
||||
tags: drivers spi
|
||||
harness: ztest
|
||||
harness_config:
|
||||
fixture: gpio_spi_loopback
|
||||
platform_allow: |
|
||||
nrf52840dk/nrf52840 nrf54l15pdk/nrf54l15/cpuapp nrf54h20dk/nrf54h20/cpuapp
|
||||
nrf54h20dk/nrf54h20/cpurad
|
||||
integration_platforms:
|
||||
- nrf52840dk/nrf52840
|
||||
|
||||
tests:
|
||||
drivers.spi_slave.api:
|
||||
depends_on: spi
|
||||
tags: drivers spi
|
||||
harness: ztest
|
||||
harness_config:
|
||||
fixture: gpio_spi_loopback
|
||||
platform_allow: |
|
||||
nrf52840dk/nrf52840 nrf54l15pdk/nrf54l15/cpuapp nrf54h20dk/nrf54h20/cpuapp
|
||||
nrf54h20dk/nrf54h20/cpurad
|
||||
integration_platforms:
|
||||
- nrf52840dk/nrf52840
|
||||
drivers.spi.spi_mode0:
|
||||
extra_configs:
|
||||
- CONFIG_TESTED_SPI_MODE=0
|
||||
extra_args: EXTRA_DTC_OVERLAY_FILE="boards/250khz.overlay"
|
||||
|
||||
drivers.spi.spi_mode1:
|
||||
extra_configs:
|
||||
- CONFIG_TESTED_SPI_MODE=1
|
||||
extra_args: EXTRA_DTC_OVERLAY_FILE="boards/500khz.overlay"
|
||||
|
||||
drivers.spi.spi_mode2:
|
||||
extra_configs:
|
||||
- CONFIG_TESTED_SPI_MODE=2
|
||||
extra_args: EXTRA_DTC_OVERLAY_FILE="boards/1mhz.overlay"
|
||||
|
||||
drivers.spi.spi_mode3:
|
||||
extra_configs:
|
||||
- CONFIG_TESTED_SPI_MODE=3
|
||||
extra_args: EXTRA_DTC_OVERLAY_FILE="boards/2mhz.overlay"
|
||||
|
||||
drivers.spi.spi_4MHz:
|
||||
extra_configs:
|
||||
- CONFIG_TESTED_SPI_MODE=2
|
||||
extra_args: EXTRA_DTC_OVERLAY_FILE="boards/4mhz.overlay"
|
||||
|
||||
drivers.spi.spi_8MHz:
|
||||
extra_configs:
|
||||
- CONFIG_TESTED_SPI_MODE=1
|
||||
extra_args: EXTRA_DTC_OVERLAY_FILE="boards/8mhz.overlay"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue