Matrix

CarlyleLiu‘s Blog

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%