mirror of
https://github.com/espressif/esp-idf.git
synced 2025-09-30 19:19:21 +00:00
i2s: support 4 line pdm rx on esp32s3
This commit is contained in:
@@ -18,7 +18,7 @@ This example is going to show how to use the PDM TX and RX mode.
|
||||
|
||||
#### PDM RX
|
||||
|
||||
* A PDM microphone whose `sel` pin is supposed to be pulled down, and connecting its `clk` pin to `EXAMPLE_PDM_RX_CLK_IO`, `data` pin to `EXAMPLE_PDM_RX_DIN_IO`.
|
||||
* For non-ESP32-S3 SoC, a PDM microphone whose `sel` pin is supposed to be pulled down, and connecting its `clk` pin to `EXAMPLE_PDM_RX_CLK_IO`, `data` pin to `EXAMPLE_PDM_RX_DIN_IO`.
|
||||
|
||||
```
|
||||
┌───────────────────────┐ ┌──────────────────┐
|
||||
@@ -36,6 +36,66 @@ This example is going to show how to use the PDM TX and RX mode.
|
||||
└───────────────────────┘ └──────────────────┘
|
||||
```
|
||||
|
||||
* For ESP32-S3 SoC, this example shows how to support 8 PDM microphones, in this case, the connection can be:
|
||||
|
||||
```
|
||||
┌──────────────────┐ ┌─────────────────────────┐ ┌──────────────────┐
|
||||
│ PDM microphone3 │ │ ESP │ │ PDM microphone1 │
|
||||
│ │ PDM clock │ │ PDM clock │ │
|
||||
│ CLK │◄───┬───────────────────┤ EXAMPLE_PDM_RX_CLK_IO ├───────────────────┬───►│ CLK │
|
||||
│ │ │ │ │ │ │ │
|
||||
│ DATA ├────┼────┐ │ EXAMPLE_PDM_RX_DIN_IO │◄─────────────┬────┼────┤ DATA │
|
||||
│ │ │ │ │ │ │ │ │ │
|
||||
│ SEL ├────┼────┼─────────┐ │ │ ┌─────────┼────┼────┤ SEL │
|
||||
│ │ │ │ │ │ │ │ │ │ │ │
|
||||
│ GND ├────┼────┼────┐ │ │ │ │ ┌────┼────┼────┤ GND │
|
||||
│ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||
│ VCC ├────┼────┼────┼────┤ │ │ ├────┼────┼────┼────┤ VCC │
|
||||
└──────────────────┘ │ │ │ │ │ │ │ │ │ │ └──────────────────┘
|
||||
│ │ │ │ │ │ │ │ │ │
|
||||
┌──────────────────┐ │ │ │ │ │ │ │ │ │ │ ┌──────────────────┐
|
||||
│ PDM microphone4 │ │ │ │ │ │ │ │ │ │ │ │ PDM microphone2 │
|
||||
│ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||
│ CLK │◄───┤ │ │ │ │ │ │ │ │ ├───►│ CLK │
|
||||
│ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||
│ DATA ├────┼────┴────┼────┼───►│ EXAMPLE_PDM_RX_DIN1_IO │ │ │ └────┼────┤ DATA │
|
||||
│ │ │ │ │ │ │ │ │ │ │ │
|
||||
│ SEL ├────┼─────────┤ │ │ │ │ ├─────────┼────┤ SEL │
|
||||
│ │ │ │ │ │ │ │ │ │ │ │
|
||||
│ GND ├────┼─────────┤ │ │ │ │ ├─────────┼────┤ GND │
|
||||
│ │ │ │ │ │ │ │ │ │ │ │
|
||||
│ VCC ├────┼─────────┼────┤ │ │ ├────┼─────────┼────┤ VCC │
|
||||
└──────────────────┘ │ │ │ │ │ │ │ │ └──────────────────┘
|
||||
│ │ │ │ │ │ │ │
|
||||
┌──────────────────┐ │ │ │ │ │ │ │ │ ┌──────────────────┐
|
||||
│ PDM microphone7 │ │ │ │ │ │ │ │ │ │ PDM microphone5 │
|
||||
│ │ │ │ │ │ │ │ │ │ │ │
|
||||
│ CLK │◄───┤ │ │ │ │ │ │ ├───►│ CLK │
|
||||
│ │ │ │ │ │ │ │ │ │ │ │
|
||||
│ DATA ├────┼────┐ │ │ │ EXAMPLE_PDM_RX_DIN2_IO │◄───┼────┼────┬────┼────┤ DATA │
|
||||
│ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||
│ SEL ├────┼────┼────┼────┤ │ │ ├────┼────┼────┼────┤ SEL │
|
||||
│ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||
│ GND ├────┼────┼────┤ │ │ │ │ ├────┼────┼────┤ GND │
|
||||
│ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||
│ VCC ├────┼────┼────┼────┤ │ │ ├────┼────┼────┼────┤ VCC │
|
||||
└──────────────────┘ │ │ │ │ │ │ │ │ │ │ └──────────────────┘
|
||||
│ │ │ │ │ │ │ │ │ │
|
||||
┌──────────────────┐ │ │ │ │ │ │ │ │ │ │ ┌──────────────────┐
|
||||
│ PDM microphone8 │ │ │ │ │ │ │ │ │ │ │ │ PDM microphone6 │
|
||||
│ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||
│ CLK │◄───┘ │ │ │ │ │ │ │ │ └───►│ CLK │
|
||||
│ │ │ │ │ │ │ │ │ │ │ │
|
||||
│ DATA ├─────────┴────┼────┼───►│ EXAMPLE_PDM_RX_DIN3_IO │ │ │ └─────────┤ DATA │
|
||||
│ │ │ │ │ │ │ │ │ │
|
||||
│ SEL ├──────────────┤ │ │ │ │ ├──────────────┤ SEL │
|
||||
│ │ │ │ │ │ │ │ │ │
|
||||
│ GND ├──────────────┴────┼────┤ GND ├────┼────┴──────────────┤ GND │
|
||||
│ │ │ │ │ │ │ │
|
||||
│ VCC ├───────────────────┴────┤ VCC ├────┴───────────────────┤ VCC │
|
||||
└──────────────────┘ └─────────────────────────┘ └──────────────────┘
|
||||
```
|
||||
|
||||
#### PDM TX
|
||||
|
||||
* An earphone or a speaker
|
||||
|
@@ -15,7 +15,12 @@
|
||||
#include "i2s_pdm_example.h"
|
||||
|
||||
#define EXAMPLE_PDM_RX_CLK_IO GPIO_NUM_0 // I2S PDM RX clock io number
|
||||
#define EXAMPLE_PDM_RX_DIN_IO GPIO_NUM_2 // I2S PDM RX data in io number
|
||||
#define EXAMPLE_PDM_RX_DIN_IO GPIO_NUM_4 // I2S PDM RX data in io number
|
||||
#if CONFIG_IDF_TARGET_ESP32S3
|
||||
#define EXAMPLE_PDM_RX_DIN1_IO GPIO_NUM_5 // I2S PDM RX data line1 in io number
|
||||
#define EXAMPLE_PDM_RX_DIN2_IO GPIO_NUM_6 // I2S PDM RX data line2 in io number
|
||||
#define EXAMPLE_PDM_RX_DIN3_IO GPIO_NUM_7 // I2S PDM RX data line3 in io number
|
||||
#endif
|
||||
|
||||
#define EXAMPLE_PDM_RX_FREQ_HZ 16000 // I2S PDM RX frequency
|
||||
|
||||
@@ -39,12 +44,27 @@ static i2s_chan_handle_t i2s_example_init_pdm_rx(void)
|
||||
.slot_cfg = I2S_PDM_RX_SLOT_DEFAULT_CONFIG(I2S_DATA_BIT_WIDTH_16BIT, I2S_SLOT_MODE_MONO),
|
||||
.gpio_cfg = {
|
||||
.clk = EXAMPLE_PDM_RX_CLK_IO,
|
||||
#if CONFIG_IDF_TARGET_ESP32S3
|
||||
// Only ESP32-S3 can support 4-line PDM RX
|
||||
.dins = {
|
||||
EXAMPLE_PDM_RX_DIN_IO,
|
||||
EXAMPLE_PDM_RX_DIN1_IO,
|
||||
EXAMPLE_PDM_RX_DIN2_IO,
|
||||
EXAMPLE_PDM_RX_DIN3_IO,
|
||||
},
|
||||
#else
|
||||
.din = EXAMPLE_PDM_RX_DIN_IO,
|
||||
#endif
|
||||
.invert_flags = {
|
||||
.clk_inv = false,
|
||||
},
|
||||
},
|
||||
};
|
||||
#if CONFIG_IDF_TARGET_ESP32S3
|
||||
// Enable all slots for example
|
||||
pdm_rx_cfg.slot_cfg.slot_mode = I2S_SLOT_MODE_STEREO;
|
||||
pdm_rx_cfg.slot_cfg.slot_mask = I2S_PDM_LINE_SLOT_ALL;
|
||||
#endif
|
||||
ESP_ERROR_CHECK(i2s_channel_init_pdm_rx_mode(rx_chan, &pdm_rx_cfg));
|
||||
|
||||
/* Step 3: Enable the rx channels before reading data */
|
||||
|
Reference in New Issue
Block a user