Skip to content

Commit 0fad2ee

Browse files
FelipeMdeOxiaoxiang781216
authored andcommitted
riscv/common/espressif: Fix spi slave driver
Fix defconfigs and documentation
1 parent 5450b50 commit 0fad2ee

File tree

4 files changed

+100
-11
lines changed

4 files changed

+100
-11
lines changed

Documentation/applications/examples/spislv_test/index.rst

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,12 @@
33

44
A simple example for the device functioning as an SPI slave.
55
This example can be used to validate communication with another device
6-
operating as an SPI master. If the spitool is used on the other device,
6+
operating as an SPI master.
7+
This example contains a hardcoded buffer, which is:
8+
{0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B,
9+
0x0C, 0x0D, 0x0E, 0x0F}. Whenever data is received,
10+
this example will send the same number of bytes received,
11+
consuming the hardcoded buffer in a circular manner.
712
and the following command is sent:
813

914
``spi exch -x 4 deadbeef``
@@ -12,9 +17,7 @@ The expected response in device running spislv_test app is:
1217

1318
.. code-block:: bash
1419
15-
Slave: 4 Bytes reads
16-
Value in hex form from /dev/spislv2: de ad be ef
17-
Slave: Writing value back to /dev/spislv2
20+
Queued for sending to master: 01 02 03 04
1821
1922
2023
This test requires the device to be configured in SPI slave mode.(your

arch/risc-v/src/common/espressif/esp_spi_slave.c

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -541,6 +541,31 @@ static void spislave_setup_tx_dma(struct spislave_priv_s *priv)
541541
}
542542
#endif
543543

544+
/****************************************************************************
545+
* Name: spi_slave_prepare_data
546+
*
547+
* Description:
548+
* Prepare the SPI Slave controller for transmitting data in CPU-controlled
549+
* mode. This function resets the SPI Slave hardware, writes the data to
550+
* the TX buffer, and resets the TX FIFO.
551+
*
552+
* Input Parameters:
553+
* priv - Private SPI Slave controller structure
554+
* nbits_to_send - Number of bits to send in the next transaction
555+
*
556+
* Returned Value:
557+
* None.
558+
*
559+
****************************************************************************/
560+
561+
static inline void spi_slave_prepare_data(struct spislave_priv_s *priv,
562+
ssize_t nbits_to_send)
563+
{
564+
spi_ll_slave_reset(priv->ctx.hw);
565+
spi_ll_write_buffer(priv->ctx.hw, priv->tx_buffer, nbits_to_send);
566+
spislave_cpu_tx_fifo_reset(priv->ctx.hw);
567+
}
568+
544569
/****************************************************************************
545570
* Name: spislave_prepare_next_tx
546571
*
@@ -558,12 +583,15 @@ static void spislave_setup_tx_dma(struct spislave_priv_s *priv)
558583

559584
static void spislave_prepare_next_tx(struct spislave_priv_s *priv)
560585
{
586+
uint32_t nbits_to_send;
587+
561588
if (priv->tx_length != 0)
562589
{
563590
#ifdef CONFIG_ESPRESSIF_SPI2_DMA
564591
spislave_setup_tx_dma(priv);
565592
#else
566-
spi_slave_hal_prepare_data(&priv->ctx);
593+
nbits_to_send = priv->nbits * priv->tx_length;
594+
spi_slave_prepare_data(priv, nbits_to_send);
567595
#endif
568596
priv->is_tx_enabled = true;
569597
}
@@ -572,11 +600,15 @@ static void spislave_prepare_next_tx(struct spislave_priv_s *priv)
572600
spiwarn("TX buffer empty! Disabling TX for next transaction\n");
573601

574602
#ifndef CONFIG_ESPRESSIF_SPI2_DMA
575-
spislave_cpu_tx_fifo_reset(priv->ctx.hw);
603+
memset(priv->tx_buffer, 0, sizeof(priv->tx_buffer));
604+
spi_slave_prepare_data(priv, priv->ctx.rcv_bitlen);
576605
#endif
577606

578607
priv->is_tx_enabled = false;
579608
}
609+
610+
spi_ll_slave_set_rx_bitlen(priv->ctx.hw, priv->ctx.rcv_bitlen);
611+
spi_ll_slave_set_tx_bitlen(priv->ctx.hw, priv->ctx.rcv_bitlen);
580612
}
581613

582614
/****************************************************************************
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
#
2+
# This file is autogenerated: PLEASE DO NOT EDIT IT.
3+
#
4+
# You can use "make menuconfig" to make any modifications to the installed .config file.
5+
# You can then do "make savedefconfig" to generate a new defconfig file that includes your
6+
# modifications.
7+
#
8+
# CONFIG_NSH_ARGCAT is not set
9+
# CONFIG_NSH_CMDOPT_HEXDUMP is not set
10+
# CONFIG_SPI_EXCHANGE is not set
11+
CONFIG_ARCH="risc-v"
12+
CONFIG_ARCH_BOARD="esp32c6-devkitc"
13+
CONFIG_ARCH_BOARD_COMMON=y
14+
CONFIG_ARCH_BOARD_ESP32C6_DEVKITC=y
15+
CONFIG_ARCH_CHIP="esp32c6"
16+
CONFIG_ARCH_CHIP_ESP32C6=y
17+
CONFIG_ARCH_CHIP_ESP32C6WROOM1=y
18+
CONFIG_ARCH_INTERRUPTSTACK=2048
19+
CONFIG_ARCH_RISCV=y
20+
CONFIG_ARCH_STACKDUMP=y
21+
CONFIG_BOARDCTL_RESET=y
22+
CONFIG_BOARD_LOOPSPERMSEC=15000
23+
CONFIG_BUILTIN=y
24+
CONFIG_DEBUG_FULLOPT=y
25+
CONFIG_DEBUG_SYMBOLS=y
26+
CONFIG_DEV_ZERO=y
27+
CONFIG_ESPRESSIF_ESP32C6=y
28+
CONFIG_ESPRESSIF_SPI2=y
29+
CONFIG_ESPRESSIF_SPI2_CSPIN=15
30+
CONFIG_ESPRESSIF_SPI2_SLAVE=y
31+
CONFIG_EXAMPLES_HELLO=y
32+
CONFIG_EXAMPLES_SPISLV=y
33+
CONFIG_FS_PROCFS=y
34+
CONFIG_IDLETHREAD_STACKSIZE=2048
35+
CONFIG_INIT_ENTRYPOINT="nsh_main"
36+
CONFIG_INTELHEX_BINARY=y
37+
CONFIG_LIBC_PERROR_STDOUT=y
38+
CONFIG_LIBC_STRERROR=y
39+
CONFIG_NFILE_DESCRIPTORS_PER_BLOCK=6
40+
CONFIG_NSH_ARCHINIT=y
41+
CONFIG_NSH_BUILTIN_APPS=y
42+
CONFIG_NSH_FILEIOSIZE=512
43+
CONFIG_NSH_READLINE=y
44+
CONFIG_NSH_STRERROR=y
45+
CONFIG_PREALLOC_TIMERS=0
46+
CONFIG_RR_INTERVAL=200
47+
CONFIG_SCHED_BACKTRACE=y
48+
CONFIG_SCHED_WAITPID=y
49+
CONFIG_SPI_SLAVE=y
50+
CONFIG_SPI_SLAVE_DRIVER=y
51+
CONFIG_START_DAY=29
52+
CONFIG_START_MONTH=11
53+
CONFIG_START_YEAR=2019
54+
CONFIG_SYSTEM_DUMPSTACK=y
55+
CONFIG_SYSTEM_NSH=y
56+
CONFIG_TESTING_GETPRIME=y
57+
CONFIG_TESTING_OSTEST=y
58+
CONFIG_UART0_SERIAL_CONSOLE=y

boards/risc-v/esp32c6/esp32c6-devkitm/configs/spislv/defconfig

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,19 +21,15 @@ CONFIG_ARCH_STACKDUMP=y
2121
CONFIG_BOARDCTL_RESET=y
2222
CONFIG_BOARD_LOOPSPERMSEC=15000
2323
CONFIG_BUILTIN=y
24-
CONFIG_DEBUG_FEATURES=y
2524
CONFIG_DEBUG_FULLOPT=y
26-
CONFIG_DEBUG_SPI=y
27-
CONFIG_DEBUG_SPI_ERROR=y
28-
CONFIG_DEBUG_SPI_INFO=y
29-
CONFIG_DEBUG_SPI_WARN=y
3025
CONFIG_DEBUG_SYMBOLS=y
3126
CONFIG_DEV_ZERO=y
3227
CONFIG_ESPRESSIF_ESP32C6=y
3328
CONFIG_ESPRESSIF_SPI2=y
3429
CONFIG_ESPRESSIF_SPI2_CSPIN=15
3530
CONFIG_ESPRESSIF_SPI2_SLAVE=y
3631
CONFIG_EXAMPLES_HELLO=y
32+
CONFIG_EXAMPLES_SPISLV=y
3733
CONFIG_FS_PROCFS=y
3834
CONFIG_IDLETHREAD_STACKSIZE=2048
3935
CONFIG_INIT_ENTRYPOINT="nsh_main"

0 commit comments

Comments
 (0)