22.6.2. I2S DMA
22.6.2.1. Overview
This example demonstrates the functionality of using I2S peripheral with DMA to transfer audio data and playback through the onboard codec.
22.6.2.2. Workflow
Configure system audio clock (MCLK) according to the audio sampling rate
Configure I2S peripheral: - Enable MCLK output to Codec - Set audio data format (bit width, number of channels) - Configure DMA transfer mode - Enable DMA request
Configure Codec: - Set audio data format and sampling rate - Configure Codec to playback mode - Configure audio output path (e.g., headphone output)
Configure DMA: - Set source address to audio data buffer - Set destination address to I2S TX FIFO - Configure transfer size and width
Start I2S peripheral and DMA transfer: - Enable I2S peripheral - Start DMA transfer
DMA automatically transfers audio data to I2S TX FIFO
Disable DMA transfer and I2S peripheral when playback is complete
22.6.2.3. Project Configuration
In
CMakeLists.txt, set the appropriate audio codec type according to your board schematic:WM8960:
set(CONFIG_CODEC "wm8960")SGTL5000:
set(CONFIG_CODEC "sgtl5000")
22.6.2.4. Hardware Settings
Connect a 3.5mm headphone to the headphone jack of the audio codec chip
22.6.2.5. Known Issues
On some development boards, there might be audio crosstalk when using the codec’s headphone interface. For example, when playing mono audio through the left channel, a faint sound might be heard in the right channel headphone.
22.6.2.6. Important Notes
Audio codec clock and configuration sequence:
Most Audio codecs require MCLK from the I2S interface as their master clock source
MCLK must be configured and enabled first before the codec’s working parameters can be configured through I2C interface
22.6.2.7. Running the Example
When the project runs correctly, you should observe:
Terminal output:
I2S DMA example I2C bus is ready i2s dma play finished
The headphone will play the sample audio in a loop