I'm attempting to interface a MEMS Microphone with an ESP32 through a CS8406.

I am aware that the ESP32 has a well-documented I2S hardware interface however for my project I cannot use it. (It's going to connect to a smartwatch I developed in which only I2C and UART are broken out, also the I2S pins are being used to write data to a display from the 70s..... it ate a lot of other pins as well, but very worth it!)

The protocol I'm using to transport the Audio data is I2C.

I have had a hard time finding anything other than the datasheet on this chip and I want to know if anyone has ever used it with its built-in I2C protocol.
I've attempted to make the connections according to the datasheet in Cirrus Logic CS8406

Here are my questions:

Is this a reasonable workaround or are there other methods?
Has anyone used this chip, and if so could you offer any advice?


Here is my schematic enter image description here

  • \$\begingroup\$ This chip can't send audio data over I2C (and I doubt any chip can, as this protocol is totally unsuitable for that). The I2C interface is for control only. \$\endgroup\$
    – Eugene Sh.
    Jul 19, 2021 at 16:14
  • \$\begingroup\$ Oh ok, that's definitely something I missed. Thank you so much! \$\endgroup\$
    – Caleb
    Jul 19, 2021 at 16:20

1 Answer 1


The design will not work, there is just so many incompatibilities all over it.

  • The microphone does not output I2S but PDM.

  • The mic PDM output is connected to I2S input of CS8406, so it is incompatible.

  • The CS8406 is basically a I2S-to-SPDIF converter, or digital audio interface transmitter.

  • The CS8406 is controlled by I2C interface, it cannot transfer audio via I2C interface.

  • the CS8406 TXP pin is the digital audio output which uses the SPDIF protocol, yet it goes to a transistor which drives a speaker as if it were analog audio.

  • \$\begingroup\$ Thanks! If you have any suggestions on either a codec/chip, ADC/DAC, or other means to get audio data over I2c or UART, I'd greatly appreciate it! \$\endgroup\$
    – Caleb
    Jul 19, 2021 at 16:53
  • \$\begingroup\$ @Caleb What kind of audio data? Amount of channels? Bit depth? Sampling rate? Have you calculated how much bits per second that is to transfer, and can the UART or I2C interfaces of ESP32 reach it? \$\endgroup\$
    – Justme
    Jul 20, 2021 at 7:25
  • \$\begingroup\$ I've decided it would probably be easier to scrap the codec idea and instead take readings from an analog mems microphone. i'm attempting to obtain 1 second voice data (wake word/comands) at either 44Khz or 96kHz (96 preferred). The UART and I2C Interfaces can reach it. \$\endgroup\$
    – Caleb
    Jul 20, 2021 at 17:31

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.