Inter-IC Sound (I²S) Low-Power Instance#

The ultra-low-power (ULP) Inter-IC Sound (I²S) peripheral enables energy-efficient audio processing on the SiWx917 system-on-chip (SoC). The ULP I²S instance operates within the ULP subsystem and can remain active in power state 2 (PS2), supporting always-on audio scenarios while the rest of the system remains in sleep mode.

The Power Manager coordinates:

  • Power-state transitions (PS4, PS3, PS2, PS1)

  • Peripheral enable and disable operations

  • RAM retention

  • Wake-up source configuration

This section explains how to use ULP I²S for low-power audio streaming and how to manage GPIO and power transitions correctly.

Pin Selection: ULP GPIO vs HP GPIO#

Selecting the correct general-purpose input/output (GPIO) pins is essential for reliable I²S communication in low-power modes. Using incompatible GPIO types can disrupt audio data flow or increase power consumption.

ULP GPIO#

  • Use ULP GPIO pins for ULP I²S signals in PS2:

    • DIN (Data In)

    • DOUT (Data Out)

    • BCLK / SCLK (Bit Clock)

    • WS / LRCLK (Word Select)

  • ULP GPIO pins remain active in PS2 and are optimized for low leakage.

  • This configuration is recommended for always-on audio designs.

High-Power (HP) GPIO#

  • HP GPIOs are not active in PS2 and can increase current consumption.

  • If HP GPIOs are used:

    • Reconfigure them before entering PS2 if state retention is required.

    • Restore their configuration on wake-up.

  • Prefer ULP GPIOs whenever PS2 audio operation is required.

Achieving Low-Power Operation (PS2 and PS1)#

To run I²S in low-power mode, you must configure the Power Manager and related system resources appropriately. Correct configuration ensures that ULP I²S operates efficiently in PS2 while maintaining reliable audio performance.

Steps to Enable ULP I²S in PS2#

  1. Configure the Power Manager in Simplicity Studio to allow PS2 entry.

  2. Add and enable the ULP I²S component in your project.

  3. Use sl_si91x_power_manager_add_ps_requirement() to request PS2.

  4. Power down unused HP peripherals and enable RAM retention as needed.

  5. Allocate ULP memory for DMA buffers to preserve audio data.

  6. Configure wake-up sources, such as ULP GPIO, timers, or wireless events.

// Deinitialize I²S before entering low power
sl_si91x_i2s_deinit(I2S_INSTANCE_USED); // Disables I²S peripheral
// Add PS2 requirement to enter low-power mode
sl_si91x_power_manager_add_ps_requirement(SL_SI91X_POWER_MANAGER_PS2);
// ... MCU enters PS2 sleep state ...

Note: In PS2, only ULP peripherals, such as ULP I²S and ULP GPIO, remain active.

Reconfiguring Peripherals After Wake Up#

When the SiWx917 device wakes from PS2, reinitialize and reconfigure both I²S and GPIO peripherals. This ensures consistent audio operation and prevents data loss after power transitions.

Procedure#

  1. Reinitialize the I²S peripheral using sl_si91x_i2s_init().

  2. Reinitialize ULP GPIOs for I²S and wake-up sources (DEBUGINIT() for debug output).

  3. Restore configuration settings that are not retained during sleep, such as FIFO thresholds and callback registrations.

  4. Resume audio transfers or streaming operations.

sl_si91x_i2s_init(I2S_INSTANCE_USED, &sl_i2s_config); // Reinitialize I²S
DEBUGINIT(); // Reinitialize GPIOs for debug output
sl_si91x_i2s_configure_power_mode(I2S_INSTANCE_USED, I2S_POWER_MODE);
// Restore configuration and resume audio streaming

Tip: Store configuration data in retained RAM to shorten wake-up time and restore settings quickly.

Practical Example Flow#

This example demonstrates how to transition the I²S subsystem between high-power (PS4) and low-power (PS2) modes and then resume continuous audio streaming.

Step 1. Start in PS4 (High Power)#

Initialize I²S and perform standard audio streaming or recording operations.

sl_i2s_config = sl_i2s_ulp_config;
sl_si91x_i2s_init(I2S_INSTANCE_USED, &sl_i2s_config);
DEBUGINIT(); // Initialize GPIOs for debug output
sl_si91x_i2s_configure_power_mode(I2S_INSTANCE_USED, I2S_POWER_MODE);
// Perform audio playback or recording

Tip: Use PS4 mode for setup and testing to verify system operation before transitioning to low-power states.

Step 2. Switch to PS2 (Low Power)#

Before entering PS2, disable unused peripherals, configure RAM retention, and prepare I²S for low-power operation. Use ULP memory for DMA buffers when required.

sl_si91x_i2s_deinit(I2S_INSTANCE_USED); // Disable I²S peripheral and clear buffers
sl_si91x_power_manager_add_ps_requirement(SL_SI91X_POWER_MANAGER_PS2); // Enter PS2
// MCU enters PS2 low-power state

Note: In PS2, only ULP I²S and ULP GPIO peripherals remain operational.

Step 3. Wake Up and Resume Operation#

After waking from PS2, reinitialize peripherals and restore settings to continue seamless audio streaming.

sl_si91x_i2s_init(I2S_INSTANCE_USED, &sl_i2s_config); // Reinitialize I²S
DEBUGINIT(); // Reinitialize GPIOs for debug output
sl_si91x_i2s_configure_power_mode(I2S_INSTANCE_USED, I2S_POWER_MODE);
// Resume playback or capture operation

This flow ensures continuous and reliable I²S communication while maintaining optimal energy efficiency during power transitions.

Additional Recommendations#

  • Verify that ULP GPIOs are mapped correctly for I²S signals (DIN, DOUT, BCLK, and WS).

  • Use a logic analyzer to confirm signal activity and alignment during low-power transitions.

  • Keep debug logging enabled during development to validate power-state behavior.

  • Review the Power Manager API documentation for detailed control of power states and wake-up sources.

References#

For detailed implementation examples, see: