[Help Needed] Waveshare ESP32-S3-AUDIO-Board: Cold-boot failure of ES7210 (Mic) and LEDs (TCA9555)

Hardware: * Board: Waveshare ESP32-S3-AUDIO-Board (Dual Mic Array)

  • Audio Pipeline: ES7210 (ADC) + ES8311 (DAC) + TCA9555 (I/O Expander)
  • Environment: ESP-IDF / Arduino (I2C SDA=10, SCL=11)

Problem Description: I am experiencing a persistent initialization failure after a cold power cycle. If I flash the official Waveshare firmware first and then "warm-reset" into my custom build, the microphones and LEDs work perfectly. However, if I pull the power and boot directly into my build, the board remains "dead" the Green and Ring LEDs stay OFF, and the ES7210 returns silence/zeros.

The Evidence (Register Dumps): I performed a register dump of the working state (after official firmware) vs. the failing state (after cold boot).

1. TCA9555 (Address 0x20) - The Power/LED Controller:

  • Warm (Working): Reg 0x06: 0x9C | Reg 0x02: 0xFF
  • Cold (Failing): Reg 0x06: 0xFF | Reg 0x02: 0xFF
  • Observation: After cold boot, the expander stays in the default "Input" mode (0xFF), meaning the Power Amp Enable (PA_EN) and Codec Reset pins are likely floating or grounded.

2. ES7210 (Address 0x40) - The Microphone ADC:

  • Warm (Working): Reg 0x00: 0x41 | Reg 0x02: 0xC1
  • Cold (Failing): Reg 0x00: 0x32 | Reg 0x02: 0x02

What I have Tried:

  1. I2C Replay: I’ve attempted to manually write the "Warm" register values (0x9C to 0x06 on 0x20, etc.) at the very start of setup().
  2. Timing: Added delays up to 1000ms to allow power rails to stabilize before I2C initialization.
  3. Clocking: Initialized the I2S driver first to ensure MCLK (GPIO 12) is active before sending I2C commands to the ES7210.

The Issue: Despite replaying these registers, the LEDs do not turn on and the microphones do not capture audio after a power cycle. It seems the TCA9555 is not accepting the configuration or there is a hidden power-sequencing dependency I am missing.

Questions:

  1. Is there a specific "Hard Reset" pin (GPIO) for the TCA9555 that must be toggled before I2C communication is possible?
  2. Does the ES7210 require a specific I2C "handshake" beyond the system and analog power registers to wake from a cold state?
  3. Are there any known power-management quirks with the 3.3V/5V rails on this board during cold boot?

Any help from someone who has successfully initialized this board from a cold state without using the full ESP-ADF components would be greatly appreciated.