数字音频接口 (DAI)

DAI 接口是由 DAI 驱动程序公开的 FIDL 协议。DAI 接口控制用于音频数据传输的 DAI 链接的配置。

符号和术语

  • 所有索引均从 0 开始。
  • 包含 n 个元素的向量表示为 <x0,x1,...,xn-1>,例如,包含两个元素 5 和 6 的 向量表示为 <5,6>。
  • 向量可以嵌套,即 <<5,6>,<7,8>> 表示包含 2 个向量的向量。
术语 定义
DAI 数字音频接口。音频硬件之间的接口,例如: 控制器和编解码器之间的 TDM 或 PDM 链接。
帧同步 用于标记帧边界的 DAI 信号,也称为 LRCLK、SYNC。
Sclk 用于标记数据线位传输的 DAI 信号,: 也称为 SCK、BCLK。
Mclk 主时钟,有时需要提供给 DAI 的 DAI 信号。有时 Sclk 用作 Mclk(或 Mclk 在 DAI 中派生自 Sclk)。
帧 DAI 中数据、 帧同步和 sclk 的单个时间点的表示形式。
帧格式 帧的数据、帧同步和 sclk 排列,例如数据线中相对于样本的帧同步位置。
时隙 在帧内,为样本保留的位。时隙可能比保存样本所需的时隙大,例如,32 位时隙保存 24 位或 16 位样本。
声道 音频样本的单个来源或目标,通常由单个扬声器呈现或由单个麦克风捕获。每个帧都将在固定数量的时隙中包含样本,用于相同固定数量的声道。
样本 在特定时间获取的声音的数字表示形式。

基本操作

DAI 客户端负责配置 DAI。提供 DAI 接口的驱动程序(以下称为 DAI 驱动程序)会公布支持的格式,并允许创建用于音频样本传输的环形缓冲区。

请注意,DAI 驱动程序应执行自己的关闭操作,就像 任何其他驱动程序一样(请参阅驱动程序部分)。

协议定义

DAI 协议在 dai.fidl 和 dai_format.fidl 的 FIDL 中定义。

dai_connector.fidl 提供与 DAI 协议服务器的直接连接。

重置

客户端可以随时通过发出 Reset 函数来重置 DAI。

GetInfo

GetInfo 函数从 DAI 检索信息,包括:

  1. 制造商名称。
  2. 商品名称。

GetDaiFormats

GetDaiFormats 函数允许 DAI 驱动程序列出其 DAI 支持的格式。支持的格式可能包括多种样本格式、速率等。DAI 驱动程序提供支持的格式,其客户端强制要求在 CreateRingBuffer 函数中使用哪种格式。

DAI 驱动程序会回复 DaiSupportedFormats 向量,其中每个 DaiSupportedFormats 都包含:

  1. 声道数向量。此列表列出了 DAI 支持的声道数 ,例如 <2,4,6,8>。立体声 DAI 会报告包含 一个元素 <2> 的向量。请注意,如果 DAI 采用一个声道并在其所有输入/输出中输入/输出 其内容(例如,立体声放大器为 2),则它会 报告包含一个元素 <1> 的向量;如果它支持一个或两个 输入声道,则它会报告包含两个元素 <1,2> 的向量。
  2. 样本格式向量。DAI 样本格式,例如 PCM_SIGNED。
  3. 帧格式向量,例如 I2S 或 TDM1,或 CUSTOM 选项,其中 DaiFrameFormatCustom 单独指定帧配置的每个参数,例如 frame_sync_size 和 sclk_on_raising。
  4. 速率向量。帧速率,例如 44100、48000 和 96000。
  5. 每个时隙的位数。DAI 中每个时隙的位数,例如每个时隙 32 位。
  6. 每个样本的位数向量。样本宽度,例如每个样本 24 位。

在单个 DaiSupportedFormats 中,支持所提供参数的任意组合。

当无法使用一个 DaiSupportedFormats 描述 DAI 支持的所有组合时,DAI 会在返回的向量中返回多个 DaiSupportedFormats。例如,如果一个 DaiSupportedFormats 允许 48KHz 下的 32 位样本和 96KHz 下的 16 位样本,但不允许 96KHz 下的 32 位样本,则 DAI 将回复 2 个 DaiSupportedFormats: <<32bits>,<48KHz>> 和 <<16bits>,<96KHz>>。为简单起见,此示例忽略了速率和每个样本的位数以外的参数。如果 DAI 支持 48 或 96KHz 下的 16 或 32 位样本,则 DAI 将 回复 1 个 DaiSupportedFormats:<<16bits,32bits>,<48KHz,96KHz>>。

此外,假设每个样本的位数始终小于或等于每个时隙的位数。因此,DAI 可以报告 <<16bits_per_slot,32bits_per_slot>,<16bits_per_sample,32bits_per_sample>> ,这并不意味着它报告 16 位 样本上的 32 位样本有效,它仅指定 3 个有效组合:

  1. 16 位时隙,包含 16 位样本
  2. 32 位时隙,包含 32 位样本
  3. 32 位时隙,包含 16 位样本

GetRingBufferFormats

与流式接口 GetSupportedFormats 函数相同,请参阅 音频串流接口。

CreateRingBuffer

客户端在 CreateRingBuffer 函数中创建环形缓冲区时,指定要在 DAI 中使用的格式和要在环形缓冲区中使用的格式。

DAI 格式参数指定:

  1. 声道数。这是 DAI 中的声道数(例如,TDM 总线上的声道数,即“在线”)。
  2. 要使用的声道位掩码。这些是 DAI 中用于数据传输的声道。例如,如需指定 I2S DAI 中的两个声道,此值必须为 3。
  3. 样本格式。
  4. 帧格式。
  5. 帧速率。
  6. 每个时隙的位数。
  7. 每个样本的位数。

环形缓冲区格式参数与流式接口 CreateRingBuffer函数相同,请参阅 音频串流接口。

CreateRingBuffer 成功后,DAI 格式配置即被视为 完成,并且在 RingBuffer 协议 配置完成且 RingBuffer Start 函数被调用后,样本可以通过 DAI 发送。

如需了解环形缓冲区功能的说明,请参阅音频串流 接口。

信号处理

在音频信号处理中定义。