22.6.2. I2S DMA

22.6.2.1. 概述

该示例工程展示了使用I2S外设配合DMA传输音频数据, 并通过板载的codec进行播放的功能。

22.6.2.2. 工作流程

  1. 根据音频采样率,配置系统音频时钟MCLK

  2. 配置I2S外设: - 使能MCLK输出给Codec - 设置音频数据格式(位宽、通道数) - 配置DMA传输模式 - 使能DMA请求

  3. 配置Codec: - 设置音频数据格式和采样率 - 配置Codec的工作模式为播放模式 - 配置音频输出路径(如耳机输出)

  4. 配置DMA: - 设置源地址为音频数据缓冲区 - 设置目标地址为I2S发送FIFO - 配置传输大小和传输宽度

  5. 启动I2S外设和DMA传输: - 使能I2S外设 - 启动DMA传输

  6. DMA自动将音频数据传输到I2S的TX FIFO

  7. 播放完毕后关闭DMA传输和I2S外设

22.6.2.3. 工程配置

  • 在文件 CMakeLists.txt 中,根据开发板原理图,设置匹配的audio codec类型:

    • WM8960: set(CONFIG_CODEC "wm8960")

    • SGTL5000: set(CONFIG_CODEC "sgtl5000")

22.6.2.4. 硬件设置

  • 连接3.5mm耳机到音频编解码芯片的 耳机 接口

22.6.2.5. 已知问题

  • 在部分开发板上使用codec的耳机接口播放音频时可能出现串扰,比如通过耳机的左声道播放单声道音频时,在右声道耳机上能听到微弱的声音

22.6.2.6. 注意事项

  • Audio codec的时钟与配置顺序:

    • 大多数Audio codec需要I2S接口提供MCLK作为主时钟源

    • MCLK必须首先配置并使能,Codec工作后才能通过I2C接口配置它的工作参数

22.6.2.7. 运行现象

当工程正确运行后,可以观察到以下现象:

  1. 串口终端输出信息:

    I2S DMA example
    I2C bus is ready
    i2s dma play finished
    
  2. 耳机会循环播放示例音频