This is an automated email from the ASF dual-hosted git repository.

xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit 6d724b500303038f2a4a60664df3a4d5af8b348b
Author: Tiago Medicci Serrano <[email protected]>
AuthorDate: Wed Aug 30 15:14:38 2023 -0300

    Documentation: Document I2S support on ESP32-S3-DevKitC-1 board
    
    Add documentation about the I2S peripheral support on ESP32-S3. The
    I2S/audio support is demonstrated on the ESP32-S3-DevKitC-1 board.
---
 .../esp32s3-devkit/esp32-audio-config-file.png     | Bin 0 -> 21276 bytes
 .../xtensa/esp32s3/boards/esp32s3-devkit/index.rst | 123 +++++++++++++++++++++
 Documentation/platforms/xtensa/esp32s3/index.rst   |   2 +-
 3 files changed, 124 insertions(+), 1 deletion(-)

diff --git 
a/Documentation/platforms/xtensa/esp32s3/boards/esp32s3-devkit/esp32-audio-config-file.png
 
b/Documentation/platforms/xtensa/esp32s3/boards/esp32s3-devkit/esp32-audio-config-file.png
new file mode 100644
index 0000000000..c51fa32e29
Binary files /dev/null and 
b/Documentation/platforms/xtensa/esp32s3/boards/esp32s3-devkit/esp32-audio-config-file.png
 differ
diff --git 
a/Documentation/platforms/xtensa/esp32s3/boards/esp32s3-devkit/index.rst 
b/Documentation/platforms/xtensa/esp32s3/boards/esp32s3-devkit/index.rst
index 880d4af44a..130cfc8ab2 100644
--- a/Documentation/platforms/xtensa/esp32s3/boards/esp32s3-devkit/index.rst
+++ b/Documentation/platforms/xtensa/esp32s3/boards/esp32s3-devkit/index.rst
@@ -47,6 +47,21 @@ Board LEDs
 There are several on-board LEDs for that indicate the presence of power
 and USB activity.  None of these are available for use by software.
 
+I2S
+===
+
+ESP32-S3 has two I2S peripherals accessible using either the generic I2S audio
+driver or a specific audio codec driver
+(`CS4344 <https://www.cirrus.com/products/cs4344-45-48/>`__ bindings are
+available at the moment). The generic I2S audio driver enables the use of both
+the receiver module (RX) and the transmitter module (TX) without using any
+specific codec. Also, it's possible to use the I2S character device driver
+to bypass the audio subsystem and write directly to the I2S peripheral.
+
+The following configurations use the I2S peripheral::
+  * :ref:`platforms/xtensa/esp32s3/boards/esp32s3-devkit/index:audio`
+  * :ref:`platforms/xtensa/esp32s3/boards/esp32s3-devkit/index:nxlooper`
+
 Configurations
 ==============
 
@@ -58,6 +73,56 @@ All of the configurations presented below can be tested by 
running the following
 Where <config_name> is the name of board configuration you want to use, i.e.: 
nsh, buttons, wifi...
 Then use a serial console terminal like ``picocom`` configured to 115200 8N1.
 
+audio
+-----
+
+This configuration uses the I2S0 peripheral and an externally connected audio
+codec to play an audio file streamed over an HTTP connection while connected
+to a Wi-Fi network.
+
+**Audio Codec Setup**
+
+The CS4344 audio codec is connected to the following pins:
+
+============ ========== ============================================
+ESP32-S3 Pin CS4344 Pin Description
+============ ========== ============================================
+5            MCLK       Master Clock
+16           SCLK       Serial Clock
+7            LRCK       Left Right Clock (Word Select)
+6            SDIN       Serial Data In on CS4344. (DOUT on ESP32-S3)
+============ ========== ============================================
+
+**Simple HTTP server**
+
+Prepare a PCM-encoded (`.wav`) audio file with 16 or 24 bits/sample (sampled at
+16~48kHz). This file must be placed into a folder in a computer that could
+be accessed on the same Wi-Fi network the ESP32 will be connecting to.
+
+Python provides a simple HTTP server. ``cd`` to the audio file folder on the
+PC and run::
+
+    $ python3 -m http.server
+    Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/)
+
+Look for your PC IP address and test playing the prepared audio on your
+browser:
+
+.. figure:: esp32-audio-config-file.png
+          :align: center
+
+After successfully built and flashed, connect the board to the Wi-Fi network::
+
+    nsh> wapi psk wlan0 mypasswd 3
+    nsh> wapi essid wlan0 myssid 1
+    nsh> renew wlan0
+
+Once connected, open NuttX's player and play the file according to the filename
+and the IP address of the HTTP server::
+
+    nsh> nxplayer
+    nxplayer> play http://192.168.1.239:8000/tones.wav
+
 buttons
 -------
 
@@ -149,6 +214,64 @@ nsh
 Basic NuttShell configuration (console enabled in UART0, exposed via
 USB connection by means of CP2102 converter, at 115200 bps).
 
+nxlooper
+--------
+
+This configuration uses the I2S1 peripheral as an I2S receiver and the I2S0
+peripheral as an I2S transmitter. The idea is to capture an I2S data frame
+using an I2S peripheral and reproduce the captured data on the other.
+
+**Receiving data on I2S1**
+
+The I2S1 will act as a receiver (in slave mode, i.e., waiting for the BCLK
+and WS signals from the transmitter), capturing data from DIN, which
+needs to be connected to an external source as follows:
+
+============ ========== =========================================
+ESP32-S3 Pin Signal Pin Description
+============ ========== =========================================
+18           BCLK       Bit Clock (SCLK)
+17           WS         Word Select (LRCLK)
+15           DIN        Data IN
+============ ========== =========================================
+
+**Transmitting data on I2S0**
+
+The I2S0 will act as a transmitter (in master mode, i.e., providing the
+BCLK and WS signals), replicating the data captured on I2S1.
+The pinout for the transmitter is as follows:
+
+========== ========== =========================================
+ESP32 Pin  Signal Pin Description
+========== ========== =========================================
+5          MCLK       Master Clock
+16         BCLK       Bit Clock (SCLK)
+7          WS         Word Select (LRCLK)
+6          DOUT       Data Out
+========== ========== =========================================
+
+.. note:: The audio codec CS4344 can be connected to the transmitter pins
+  to reproduce the captured data if the receiver's source is a PCM-encoded
+  audio data.
+
+**nxlooper**
+
+The ``nxlooper`` application captures data from the audio device with input
+capabilities (the I2S1 in this example) and forwards the audio data frame to
+the audio device with output capabilities (the I2S0 in this example).
+
+After successfully built and flashed, run on the boards' terminal::
+
+  nsh> nxlooper
+  nxlooper> loopback
+
+.. note:: ``loopback`` command default arguments for the channel configuration,
+  data width and sample rate are, respectively, 2 channels,
+  16 bits/sample and 48KHz. These arguments can be supplied to select
+  different audio formats, for instance::
+
+    nxlooper> loopback 2 16 44100
+
 oneshot
 -------
 
diff --git a/Documentation/platforms/xtensa/esp32s3/index.rst 
b/Documentation/platforms/xtensa/esp32s3/index.rst
index 4c6c22629e..72546bdc72 100644
--- a/Documentation/platforms/xtensa/esp32s3/index.rst
+++ b/Documentation/platforms/xtensa/esp32s3/index.rst
@@ -98,7 +98,7 @@ DMA          Yes
 eFuse        No
 GPIO         Yes
 I2C          No
-I2S          No
+I2S          Yes
 LCD          No
 LED_PWM      No
 MCPWM        No

Reply via email to