I2S på ESP32, har nån använt?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
JanErik
Inlägg: 3165
Blev medlem: 11 februari 2008, 17:15:58
Ort: Vasa, Finland

I2S på ESP32, har nån använt?

Inlägg av JanErik »

Har kopplat upp en ESP32 på I2S-bussen i min gamla hembyggda DAC och försökt lyssna av trafiken,
Mellan DIR9001 (S/P-DIF-dekoder) och PCM1794 (DAC).

Denna kod enligt exempel från nätet,

Kod: Markera allt

// Include I2S driver
#include <driver/i2s.h>

// Connections to I2S
#define I2S_WS 25
#define I2S_SD 33
#define I2S_SCK 32

// Use I2S Processor 0
#define I2S_PORT I2S_NUM_0

// Define input buffer length
#define bufferLen 64
int32_t sBuffer[bufferLen];

void i2s_install() {
  // Set up I2S Processor configuration
  const i2s_config_t i2s_config = {
    .mode = i2s_mode_t(I2S_MODE_SLAVE | I2S_MODE_RX),
    .sample_rate = 48000, //44100,
    .bits_per_sample = i2s_bits_per_sample_t(24),
    .channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT,
    .communication_format = i2s_comm_format_t(I2S_COMM_FORMAT_STAND_I2S),
    .intr_alloc_flags = 0,
    .dma_buf_count = 8,
    .dma_buf_len = bufferLen,
    .use_apll = false
  };

  i2s_driver_install(I2S_PORT, &i2s_config, 0, NULL);
}

void i2s_setpin() {
  // Set I2S pin configuration
  const i2s_pin_config_t pin_config = {
    .bck_io_num = I2S_SCK,
    .ws_io_num = I2S_WS,
    .data_out_num = -1,
    .data_in_num = I2S_SD
  };

  i2s_set_pin(I2S_PORT, &pin_config);
}

void setup() {
  // Set up Serial Monitor
  Serial.begin(115200);
  Serial.println(" ");

  delay(1000);

  // Set up I2S
  i2s_install();
  i2s_setpin();
  i2s_start(I2S_PORT);

  delay(500);
}

void loop() {
  // Get I2S data and place in data buffer
  static int counter = 0;
  size_t bytesIn = 0;
  esp_err_t result = i2s_read(I2S_PORT, &sBuffer, bufferLen, &bytesIn, portMAX_DELAY);

  if (result == ESP_OK)
  {
    counter++;
    if(counter == 1000) {
      counter = 0;
      for(int i = 0; i < bytesIn/4; i++) {
        Serial.println(sBuffer[i]);
      }
    }
  }
}
Men resultatet ser inte riktigt vettigt ut, detta när den tar mot en 1kHz sinus från Youtube,

Kod: Markera allt

-1441792
16771840
-1376256
16772352
-1245184
16772864
-1114112
16773376
-983040
16771328
-1507328
16771328
-1507328
16771584
-1441792
16771584
-1441792
16772096
-1310720
16772352
-1245184
16772864
-1114112
16773376
-983040
16771328
-1507328
16771328
-1507328
Med uppspelningen pausad ger den helt korrekt nollor hela tiden.
hawkan
Inlägg: 3056
Blev medlem: 14 augusti 2011, 10:27:40

Re: I2S på ESP32, har nån använt?

Inlägg av hawkan »

Jag tror det fungerar men du avkodar inte det du läser på rätt sätt. Jag vet inte vad som är rätt sätt.
Tittar du på positiva och negativa talen i en decimal to binary konverter ser du att det är samma tal fast skiftat en byte.
Tar man alla positiva tal ser man att det skiljer några bitar mellan de, samma bitar hela tiden. Så datan du läser
är för 1 kHz med lite spridning runt omkring.
Så lista ut vad det är för data du läser och vad du ska göra för att få det i kHz.
Å andra sidan kan jag vara helt fel ute med vad det är för data.
JanErik
Inlägg: 3165
Blev medlem: 11 februari 2008, 17:15:58
Ort: Vasa, Finland

Re: I2S på ESP32, har nån använt?

Inlägg av JanErik »

Ok, antog att det var typ PCM.
Mr Andersson
Inlägg: 1405
Blev medlem: 29 januari 2011, 21:06:30
Ort: Lapplandet

Re: I2S på ESP32, har nån använt?

Inlägg av Mr Andersson »

Ser ut som att du samplar med 24 bitar men läser det som 32 bitar.
JanErik
Inlägg: 3165
Blev medlem: 11 februari 2008, 17:15:58
Ort: Vasa, Finland

Re: I2S på ESP32, har nån använt?

Inlägg av JanErik »

Ökade till att sampla 32 bit och fick nåt som liknar sinus, nu dumpar jag bort en hel del data eftersom serieporten verkar storkna om jag dumpar allt;

Kod: Markera allt

-1376256
-1376256
-1245184
-1245184
-1179648
-1179648
1114112
1114112
1179648
1179648
1310720
1310720
1376256
1376256
327680
327680
131072
131072
-65536
-65536
-262144
-262144
-1441792
-1441792
-1376256
-1376256
-1245184
-1245184
-1179648
-1179648
1048576
1048576
1179648
1179648
1310720
1310720
1376256
1376256
327680
327680
131072
131072
-65536
-65536
-262144
-262144
-1441792
-1441792
-1376256
-1376256
-1245184
-1245184
-1179648
-1179648
1048576
1048576
1179648
Skriv svar