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.