Matrix

CarlyleLiu‘s Blog

Introduction

在许多情况下,音频功能不作为独立设备存在。它是一种能力,与其他功能一起构成了一个“复合”设备。一个很好的例子 DVD-ROM 播放器就是音频、数据存储和传输控制功能的集合。音频功能因此位于设备类层次结构中的接口级别。它由多个接口组成,共同实现音频功能的接口。

音频功能被认为是一个“closed box”,具有非常独特的和定义良好的接口到 outside world。音频功能通过它们的音频接口进行寻址。每个音频功能都必须有一个 AudioControl 接口可以有 0 个或多个 AudioStreaming 和 0 个或多个 MIDI Streaming 接口。AudioControl(AC)接口用于访问 function 的音频控件,而 AudioStreaming (AS) 接口用于将音频流传入和传出 function。 MIDI streaming (MS) 接口可用于将 midi 数据流传输到和输出音频功能。单个 AudioControl 接口以及属于同一音频功能的 AudioStreaming 和 MIDI Streaming 接口的集合称为 Audio Interface Collection(AIC)。一个设备可以同时激活多个音频接口集合(AIC)。这些集合用于控制位于同一 composite device 中的多个独立音频功能。通过标准 USB 接口关联机制来描述音频接口集合,通过接口关联描述符 (IAD) 来表示接口绑定。

注:所有与 MIDI 相关的信息被分组在一个单独的文档中,MIDI 设备的通用串行总线设备类定义被认为是本规范的一部分。因此,本文档的其余部分将不再提及 MIDI Streaming 接口及其细节。 下图说明了这个概念:

阅读全文 »

OTG接口与转换器

OTG是"On The Go"的英文缩写,字面上可以理解为“安上即可用”。USB传输是主从结构,一切USB传输都有Host发起。比如在开发板上可以插入U盘,这时开发板作为USB Host。但是开发板要跟PC通信,开发板就要作为USB Device。开发板要作为USB Host、USB Device两种角色,可以使用OTG插口:它可以根据硬件电路自动识别自己的角色,切换为USB Host或USB Deivce。

OTG插口有多种形态,常用的有Micro USB、Type C,如下:

阅读全文 »

UAC 拓扑结构

UAC 规范描述了以下类型的标准单元和终端,这些单元和终端被认为足以代表当前和近期可用的大多数视频功能:

  • 输入终端 - Input Terminal (IT)
  • 输出终端 - Output Terminal (OT)
  • 混音器单元 - Mixer Unit (MU)
  • 选择器单元 - Selector Unit (SU)
  • 特性单元 - Feature Unit (FU)
  • 采样速率转换单元 - Sampling Rate Converter Unit (RU)
  • 特效单元 - Effect Unit (EU)
  • 处理单元 (PU) - Processing Unit (PU)
  • 扩展单元 (XU) - Extension Unit (XU)

除了单元和终端外,还引入了时钟实体的概念。定义了三种类型的时钟实体

  • 时钟源 - Clock Source (CS)
  • 时钟选择器 - Clock Selector (CX)
  • 时钟倍频器 - Clock Multiplier (CM)
阅读全文 »

测试方法

  • 两块板子之间通过 I2S 通信,其中一块板子配置为 Slave 另一块板子为 Master

  • Master 板端执行 arecord | aplay 或者 gstream 命令

    1
    2
    arecord -Dhw:2,0 -r 44100 -c 8 -f S32_LE | aplay -Dhw:2,0 -c 8 -r 44100 -f S32_LE
    gst-launch-1.0 alsasrc device=device_input_split ! alsasink device=device_output sync=false

  • Slave 通过 aplay 播放一段 wav 文件

  • 通过示波器抓取 Master 板的 I2S 输入和输出端的波形间隔来测量虚拟声卡的 Latency

阅读全文 »

XRUN 是缓冲区不足或溢出,X 代表不足或溢出。在这两种情况下,都表明系统速度不够快,未能及时处理来自 ALSA 音频缓冲区的数据,因此丢失了一些数据。当我们以非常小的缓冲区大小运行时,声卡应该非常快地处理传入缓冲区的数据,否则就溢出 overrun 了。有些芯片无法适应较小的缓冲区大小,因此我们必须增加缓冲区长度以减轻声音芯片的工作量。通常,xruns 可以听到爆裂声或爆裂声。

阅读全文 »

ASoC 架构的设计方式是平台和编解码器类驱动程序必须绑定在一起才能构建音频设备。这种绑定可以在所谓的机器驱动程序或设备树中完成,每一个机器驱动程序和设备树都是与特定机器相关的。也就是说,机器驱动程序针对特定系统,并且不同的板卡需要不同的机器驱动程序。

阅读全文 »

平台驱动程序可以注册 PCM 驱动程序、CPU DAI 驱动程序及其操作函数,为 PCM 组件预分配缓冲区,并根据需要设置回放和采集操作。换言之,平台驱动程序包含该平台的音频引擎和音频接口驱动程序(如 I2S、AC97 和 PCM)。

平台驱动程序以构成平台的 SoC 为目标。它涉及平台的 DMA(即音频数据在 SoC 中的每个块之间如何传输)和 CPU DAI(即 CPU 向编解码器发送音频数据的路径或 CPU 从编解码器获得音频数据的路径)。

平台驱动程序有两个重要的数据结构体:structsnd_soc_component_driver 和 structsnd_soc_dai_driver。前者负责 DMA 数据管理,后者负责 DAI 的参数配置。当然,前文在讨论编解码器类驱动程序时已经描述过这两种数据结构体,因此,本节将仅介绍与平台代码相关的附加概念。

阅读全文 »
0%