Pulse Code Modulation (PCM) Usage Scenarios#

Pulse Code Modulation (PCM) on SiWx917 enables low-latency, synchronous digital audio for applications that require deterministic timing, simple framing, and consistent sample delivery. Typical use cases include telephony, voice pipelines, narrowband audio processing, modem-style audio streams, and communication with external codecs or digital signal processors (DSPs).

This section describes common PCM usage scenarios and provides recommended configurations for each.

Scenario 1: Voice Communication System#

This scenario shows how to configure PCM for digital telephony and related applications. It highlights the standard telephony sampling rate and full-duplex operation, which are critical for two-way voice communication.

Description#

Implement a voice communication system using PCM for digital telephony, Voice over Internet Protocol (VoIP) systems, or intercom devices.

Configuration#

  • Mode: Primary

  • Sample Rate: 8 kHz (standard telephony rate)

  • Bit Depth: 16-bit

  • Frame Size: 16-bit

  • Transfer Type: Full-duplex (simultaneous transmit and receive)

Use Case#

// Voice communication PCM configuration
sl_i2s_xfer_config_t voice_config = {
  .mode = SL_I2S_MASTER,
  .sync = SL_I2S_SYNC,
  .protocol = SL_PCM_PROTOCOL,
  .resolution = SL_I2S_RESOLUTION_16,
  .data_size = SL_I2S_DATA_SIZE16,
  .sampling_rate = SL_I2S_SAMPLING_RATE_8000,
  .transfer_type = SL_I2S_TRANSMIT | SL_I2S_RECEIVE
};

// Initialize PCM for voice communication
status = sl_si91x_i2s_init(I2S_INSTANCE, &i2s_handle);
status = sl_si91x_i2s_configure_power_mode(i2s_handle, SL_I2S_FULL_POWER);
status = sl_si91x_i2s_configure_transfer(i2s_handle, &voice_config);

Applications#

  • Digital telephony systems

  • VoIP endpoints

  • Intercom devices

  • Two-way radio systems

Scenario 2: High-Quality Audio Recording#

This scenario focuses on capturing professional-quality audio using PCM. The configuration prioritizes fidelity through higher sample rates and bit depth.

Description#

Configure PCM for high-quality audio recording applications that require professional audio fidelity.

Configuration#

  • Mode: Secondary

  • Sample Rate: 48 kHz (professional audio standard)

  • Bit Depth: 24-bit

  • Frame Size: 24-bit

  • Transfer Type: Receive only

Use Case#

// High-quality audio recording PCM configuration
sl_i2s_xfer_config_t recording_config = {
  .mode = SL_I2S_SLAVE,
  .sync = SL_I2S_SYNC,
  .protocol = SL_PCM_PROTOCOL,
  .resolution = SL_I2S_RESOLUTION_24,
  .data_size = SL_I2S_DATA_SIZE32,
  .sampling_rate = SL_I2S_SAMPLING_RATE_48000,
  .transfer_type = SL_I2S_RECEIVE
};

// Buffer for high-quality audio data
uint32_t audio_buffer[AUDIO_BUFFER_SIZE];

// Initialize PCM for recording
status = sl_si91x_i2s_init(I2S_INSTANCE, &i2s_handle);
status = sl_si91x_i2s_configure_transfer(i2s_handle, &recording_config);

// Start audio recording
status = sl_si91x_i2s_receive_data_blocking(i2s_handle, audio_buffer, AUDIO_BUFFER_SIZE);

Applications#

  • Professional audio recording equipment

  • Audio data loggers

  • Music production interfaces

  • Sound analysis systems

Scenario 3: Audio Playback System#

This scenario demonstrates how to configure PCM for high-quality audio playback. It uses CD-quality settings, which balance fidelity and efficiency for media applications.

Description#

Implement PCM for audio playback in multimedia devices or audio streaming systems.

Configuration#

  • Mode: Primary

  • Sample Rate: 44.1 kHz (CD quality)

  • Bit Depth: 16-bit

  • Frame Size: 16-bit

  • Transfer Type: Transmit only

Use Case#

// Audio playback PCM configuration
sl_i2s_xfer_config_t playback_config = {
  .mode = SL_I2S_MASTER,
  .sync = SL_I2S_SYNC,
  .protocol = SL_PCM_PROTOCOL,
  .resolution = SL_I2S_RESOLUTION_16,
  .data_size = SL_I2S_DATA_SIZE16,
  .sampling_rate = SL_I2S_SAMPLING_RATE_44100,
  .transfer_type = SL_I2S_TRANSMIT
};

// Audio data buffer
uint16_t audio_samples[PLAYBACK_BUFFER_SIZE];

// Initialize PCM for playback
status = sl_si91x_i2s_init(I2S_INSTANCE, &i2s_handle);
status = sl_si91x_i2s_configure_transfer(i2s_handle, &playback_config);

// Play audio data
status = sl_si91x_i2s_send_data_blocking(i2s_handle, audio_samples, PLAYBACK_BUFFER_SIZE);

Applications#

  • Audio players and media devices

  • Sound systems and amplifiers

  • Notification and alert systems

  • Audio streaming devices

Scenario 4: Real-Time Audio Processing#

This scenario explains how to configure PCM for real-time audio processing. It emphasizes low-latency, bidirectional streaming with direct memory access (DMA).

Description#

Configure PCM for real-time audio processing applications that require minimal latency.

Configuration#

  • Mode: Primary

  • Sample Rate: 32 kHz

  • Bit Depth: 32-bit

  • Frame Size: 32-bit

  • Transfer Type: Full-duplex with DMA

Use Case#

// Real-time processing PCM configuration
sl_i2s_xfer_config_t realtime_config = {
  .mode = SL_I2S_MASTER,
  .sync = SL_I2S_ASYNC,
  .protocol = SL_PCM_PROTOCOL,
  .resolution = SL_I2S_RESOLUTION_32,
  .data_size = SL_I2S_DATA_SIZE32,
  .sampling_rate = SL_I2S_SAMPLING_RATE_32000,
  .transfer_type = SL_I2S_TRANSMIT | SL_I2S_RECEIVE
};

// Callback for real-time processing
void pcm_realtime_callback(uint32_t event) {
  if (event == SL_I2S_RECEIVE_COMPLETE) {
    // Process incoming audio data
    process_audio_data(rx_buffer, FRAME_SIZE);
    
    // Send processed data
    sl_si91x_i2s_send_data_non_blocking(i2s_handle, tx_buffer, FRAME_SIZE);
  }
}

// Initialize real-time PCM processing
status = sl_si91x_i2s_init(I2S_INSTANCE, &i2s_handle);
status = sl_si91x_i2s_register_event_callback(i2s_handle, pcm_realtime_callback);
status = sl_si91x_i2s_configure_transfer(i2s_handle, &realtime_config);

Applications#

  • Audio effects processors

  • Real-time audio filters

  • Echo cancellation systems

  • Audio conferencing systems

Scenario 5: Industrial Control Communication#

This scenario demonstrates how PCM can support reliable digital communication in industrial environments. It highlights bidirectional transfer and error handling.

Description#

Use PCM for industrial control applications that require reliable digital communication.

Configuration#

  • Mode: Secondary

  • Sample Rate: 16 kHz

  • Bit Depth: 16-bit

  • Frame Size: 16-bit

  • Transfer Type: Bidirectional with error handling

Use Case#

// Industrial control PCM configuration
sl_i2s_xfer_config_t control_config = {
  .mode = SL_I2S_SLAVE,
  .sync = SL_I2S_SYNC,
  .protocol = SL_PCM_PROTOCOL,
  .resolution = SL_I2S_RESOLUTION_16,
  .data_size = SL_I2S_DATA_SIZE16,
  .sampling_rate = SL_I2S_SAMPLING_RATE_16000,
  .transfer_type = SL_I2S_TRANSMIT | SL_I2S_RECEIVE
};

// Error handling for industrial applications
sl_status_t pcm_industrial_transfer(uint16_t *tx_data, uint16_t *rx_data, uint32_t length) {
  sl_status_t status;
  uint32_t retry_count = 0;
  
  do {
    status = sl_si91x_i2s_transfer_data(i2s_handle, tx_data, rx_data, length);
    if (status != SL_STATUS_OK) {
      retry_count++;
      // Implement error recovery
      sl_si91x_i2s_deinit(I2S_INSTANCE);
      sl_si91x_i2s_init(I2S_INSTANCE, &i2s_handle);
    }
  } while ((status != SL_STATUS_OK) && (retry_count < MAX_RETRIES));
  
  return status;
}

Applications#

  • Industrial automation systems

  • Process control interfaces

  • Sensor data acquisition

  • Machine-to-machine communication

Scenario 6: Audio Codec Interface#

This scenario shows how to connect PCM with external audio codecs for analog-to-digital and digital-to-analog conversion. It focuses on high-resolution audio configurations.

Description#

Interface with external audio codecs using PCM for analog-to-digital and digital-to-analog conversion.

Configuration#

  • Mode: Primary

  • Sample Rate: 96 kHz (high-resolution audio)

  • Bit Depth: 24-bit

  • Frame Size: 32-bit (with padding)

  • Transfer Type: Full-duplex

Use Case#

// Audio codec interface PCM configuration
sl_i2s_xfer_config_t codec_config = {
  .mode = SL_I2S_MASTER,
  .sync = SL_I2S_SYNC,
  .protocol = SL_PCM_PROTOCOL,
  .resolution = SL_I2S_RESOLUTION_24,
  .data_size = SL_I2S_DATA_SIZE32,
  .sampling_rate = SL_I2S_SAMPLING_RATE_96000,
  .transfer_type = SL_I2S_TRANSMIT | SL_I2S_RECEIVE
};

// Codec interface functions
void init_external_codec(void) {
  // Initialize external codec via I2C/SPI
  codec_set_sample_rate(96000);
  codec_set_bit_depth(24);
  codec_enable_pcm_interface();
}

// PCM codec interface
status = sl_si91x_i2s_init(I2S_INSTANCE, &i2s_handle);
init_external_codec();
status = sl_si91x_i2s_configure_transfer(i2s_handle, &codec_config);

Applications#

  • High-resolution audio systems

  • Professional audio interfaces

  • Measurement and test equipment

  • Audio development platforms

Best Practices#

1. Buffer Management#

  • Allocate buffers according to sampling rate and frame size.

  • Use circular buffers for continuous streaming.

  • Monitor buffer usage to avoid underrun and overrun conditions.

2. Timing Considerations#

  • Use stable clock sources for consistent audio sampling.

  • Account for jitter and synchronization accuracy.

  • Use DMA for throughput efficiency and minimal latency.

3. Error Handling#

  • Monitor PCM driver status codes.

  • Implement error recovery for underrun, overrun, and timeouts.

  • Reinitialize PCM after power transitions.

4. Power Management#

  • PCM operates in the High-Performance (HP) domain only.

  • Optimize power states (PS4, PS3) for performance or efficiency needs.

5. Pin Configuration#

  • Ensure FSYNC, BCLK, and DIN/DOUT are correctly assigned.

  • Verify signal integrity with a logic analyzer.

  • Add pull-ups or pull-downs as needed for stability.

Troubleshooting Common Issues#

Frame Sync Problems#

  • Verify FSYNC polarity and width settings.

  • Check MSB and LSB transmission alignment.

  • Ensure consistent frame size on all devices.

Clock Issues#

  • Validate BCLK frequency and duty cycle.

  • Check clock jitter and synchronization across devices.

  • Confirm clock source stability.

Data Integrity#

  • Monitor for FIFO underruns and overruns.

  • Verify bit depth, sample rate, and format alignment.

  • Use shielded cables and solid grounding to reduce noise.