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 检索信息,包括:
- 制造商名称。
- 商品名称。
GetDaiFormats
GetDaiFormats 函数允许 DAI 驱动程序列出其 DAI 支持的格式。支持的格式可能包括多种样本格式、速率等。DAI 驱动程序提供支持的格式,其客户端强制要求在 CreateRingBuffer 函数中使用哪种格式。
DAI 驱动程序会回复 DaiSupportedFormats 向量,其中每个 DaiSupportedFormats 都包含:
- 声道数向量。此列表列出了 DAI 支持的声道数
,例如
<2,4,6,8>。立体声 DAI 会报告包含 一个元素<2>的向量。请注意,如果 DAI 采用一个声道并在其所有输入/输出中输入/输出 其内容(例如,立体声放大器为 2),则它会 报告包含一个元素<1>的向量;如果它支持一个或两个 输入声道,则它会报告包含两个元素<1,2>的向量。 - 样本格式向量。DAI 样本格式,例如
PCM_SIGNED。 - 帧格式向量,例如
I2S或TDM1,或CUSTOM选项,其中DaiFrameFormatCustom单独指定帧配置的每个参数,例如frame_sync_size和sclk_on_raising。 - 速率向量。帧速率,例如 44100、48000 和 96000。
- 每个时隙的位数。DAI 中每个时隙的位数,例如每个时隙 32 位。
- 每个样本的位数向量。样本宽度,例如每个样本 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 个有效组合:
- 16 位时隙,包含 16 位样本
- 32 位时隙,包含 32 位样本
- 32 位时隙,包含 16 位样本
GetRingBufferFormats
与流式接口 GetSupportedFormats 函数相同,请参阅
音频串流接口。
CreateRingBuffer
客户端在 CreateRingBuffer 函数中创建环形缓冲区时,指定要在 DAI 中使用的格式和要在环形缓冲区中使用的格式。
DAI 格式参数指定:
- 声道数。这是 DAI 中的声道数(例如,TDM 总线上的声道数,即“在线”)。
- 要使用的声道位掩码。这些是 DAI 中用于数据传输的声道。例如,如需指定 I2S DAI 中的两个声道,此值必须为 3。
- 样本格式。
- 帧格式。
- 帧速率。
- 每个时隙的位数。
- 每个样本的位数。
环形缓冲区格式参数与流式接口
CreateRingBuffer函数相同,请参阅
音频串流接口。
CreateRingBuffer 成功后,DAI 格式配置即被视为
完成,并且在 RingBuffer 协议
配置完成且 RingBuffer Start 函数被调用后,样本可以通过 DAI 发送。
如需了解环形缓冲区功能的说明,请参阅音频串流 接口。
信号处理
在音频信号处理中定义。