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#
Configure the Power Manager in Simplicity Studio to allow PS2 entry.
Add and enable the ULP I²S component in your project.
Use
sl_si91x_power_manager_add_ps_requirement()to request PS2.Power down unused HP peripherals and enable RAM retention as needed.
Allocate ULP memory for DMA buffers to preserve audio data.
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#
Reinitialize the I²S peripheral using
sl_si91x_i2s_init().Reinitialize ULP GPIOs for I²S and wake-up sources (
DEBUGINIT()for debug output).Restore configuration settings that are not retained during sleep, such as FIFO thresholds and callback registrations.
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 streamingTip: 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 recordingTip: 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 stateNote: 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 operationThis 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:
WiSeConnect SDK I²S Peripheral Examples
SL Si91x – ULP I²S Primary
SL Si91x – I²S Secondary
SL Si91x – I²S Loopback