Lazy loaded image
i.MX6UL fsl-sai 驱动分析:真实 DMA vs 模拟 DMA
Words 1053Read Time 3 min
2026-3-6

一、概述

fsl-sai 是 Freescale/NXP i.MX6UL 内核自带的 SAI (Synchronous Audio Interface) 驱动,位于 sound/soc/fsl/fsl_sai.c。它作为 ASoC 框架中的 CPU DAI 驱动,负责配置 I2S 硬件接口和 DMA 传输参数。
与我们之前实现的 fake_platform.c(使用 hrtimer 模拟 DMA)不同,fsl-sai 驱动使用真实的硬件 DMA 控制器(SDMA 或 EDMA)进行音频数据传输,这是生产环境中的标准做法。
💡
关键区别:fsl-sai 是 CPU DAI 驱动,不是 Platform 驱动。Platform 层由独立的 dmaengine_pcm 或 imx-pcm-dma 提供。

二、DMA 传输和缓冲区管理

2.1 DMA 初始化流程

fsl-sai 驱动在 probe 阶段注册 DMA 支持:
  • imx_pcm_dma_init:i.MX 平台专用,支持 SDMA multi-FIFO 模式
  • devm_snd_dmaengine_pcm_register:通用 dmaengine 框架,适用于 EDMA 等控制器

2.2 DMA 参数配置(hw_params)

fsl_sai_hw_params() 中配置 DMA 传输参数:
关键参数:
  • dma_params->addr:SAI 数据寄存器的物理地址(TDR0/RDR0)
  • dma_params->maxburst:每次 DMA 请求传输的数据量(默认 6 words)
  • peripheral_config:SDMA 专用配置(multi-FIFO 模式)

2.3 硬件 FIFO 和 Watermark

SAI 硬件提供 FIFO 缓冲区,通过 watermark 触发 DMA 请求:
工作原理:
  1. TX:当 FIFO 剩余空间 ≤ watermark 时,硬件发出 DMA 请求
  1. RX:当 FIFO 数据量 ≥ watermark 时,硬件发出 DMA 请求
  1. DMA 控制器响应请求,自动搬运 maxburst 个字
  1. DMA 完成后更新缓冲区指针,触发 period_elapsed 回调

三、与 fake_platform.c 的对比

3.1 架构差异

  • fsl-sai:CPU DAI 驱动,负责配置 I2S 硬件接口和 DMA 参数
  • fake_platform:Platform 驱动,负责 PCM 缓冲区管理和数据传输模拟
💡
在真实系统中,fsl-sai 需要配合独立的 Platform 驱动(如 imx-pcm-dma)使用,两者分工明确。

3.2 DMA 实现对比

fake_platform.c(hrtimer 模拟):
fsl-sai(真实 DMA):

3.3 关键差异总结

驱动角色:fake_platform 是 Platform 驱动,fsl-sai 是 CPU DAI 驱动
数据传输:fake_platform 使用 hrtimer 模拟,fsl-sai 使用硬件 DMA(SDMA/EDMA)
缓冲区管理:fake_platform 手动更新 hw_ptr,fsl-sai 由 DMA 引擎自动更新
CPU 占用:fake_platform 每个 period 触发中断,fsl-sai 仅 DMA 完成时中断,CPU 占用更低
适用场景:fake_platform 用于 QEMU 测试和学习,fsl-sai 用于生产环境

四、fsl-sai 驱动解析

4.1 驱动角色定位

fsl-sai 在 ASoC 三层架构中的定位:
  • CPU DAI 驱动:配置 SAI 硬件接口(I2S 格式、时钟、同步模式)
  • DMA 参数提供者:通过 snd_soc_dai_init_dma_data 向 Platform 层提供 DMA 配置
  • 硬件抽象层:使用 regmap 访问 SAI 寄存器,支持多种 SoC 变体

4.2 关键数据结构

struct fsl_sai 包含:regmap 寄存器访问、时钟管理、DMA 参数(dma_params_tx/rx)、SDMA 配置、同步模式标志等。

五、总结

通过对比 fsl-sai 和 fake_platform.c,我们可以清晰地看到真实硬件 DMA 与软件模拟的区别:
  1. fsl-sai 作为 CPU DAI 驱动,专注于配置 I2S 硬件接口和提供 DMA 参数
  1. 真实 DMA 由硬件自动完成数据传输,CPU 占用极低,适合生产环境
上一篇
Data Structure and Algorithm
下一篇
用面试拷问嵌入式技术栈

Comments
Loading...