DAI:Digital Audio Interfaces(音频设备的硬件接口)

  • Post author:
  • Post category:其他




1 P


CM


接口



针对不同的数字

音频

子系统,出现了几种微处理器或


DSP




音频

器件间用于

数字转换的接口




最简单的

音频

接口是


PCM


(脉冲编码调制)接口,该接口由

时钟脉冲(




BCLK


)、帧同步信号(


FS


)及接收数据(


DR


)和发送数据(


DX






组成。在


FS


信号的上升沿,数据传输从


MSB





Most Significant Bit


)字开始,


FS


频率等于采样率。


FS


信号之后开始数据字的传输,单个的数据位按顺序进行传输,


1


个时钟周期传输


1


个数据字。发送


MSB


时,信号的等级首先降到最低,以避免在不同终端的接口使用不同的数据方案时造成


MSB


的丢失。



PCM


接口很容易实现,原则上能够支持任何数据方案和任何采样率,但需要

每个

音频

通道获得一个独立的数据队列






2 IIS



接口(即I2S接口)



IIS


接口(


Inter-IC Sound


)在


20


世纪


80


年代首先被飞利浦用于消费

音频

,并在一个称为


LRCLK





Left/Right CLOCK


)的信号机制中经过多路转换,将两路

音频

信号变成单一的数据队列。当


LRCLK


为高时,左声道数据被传输;


LRCLK


为低时,右声道数据被传输。与


PCM


相比,


IIS


更适合于立体声系统。对于多通道系统,在同样的


BCLK





LRCLK


条件下,并行执行几个数据队列也是可能的。



3 AC

97



接口



AC’97





Audio Codec 1997


)是以


Intel


为首的五个


PC


厂商


Intel





Creative Labs





NS





Analog Device





Yamaha


共同提出的规格标准。与


PCM





IIS


不同,


AC’97



不只是一种数据格式,用于

音频

编码的内部架构规格,它还具有控制功能




AC’97


采用


AC-Link


与外部的编解码器相连,


AC-Link


接口包括

位时钟(




BITCLK


)、同步信号校正(


SYNC


)和从编码到处理器及从处理器中解码(


SDATDIN





SDATAOUT






的数据队列。


AC’97


数据帧以


SYNC


脉冲开始,包括


12





20


位时间段(时间段为标准中定义的不同的目的服务)及


16





“tag”


段,共计


256


个数据序列。例如,时间段


“1”





“2”


用于访问编码的控制寄存器,而时间段


“3”





“4”


分别负载左、右两个

音频

通道。


“tag”


段表示其他段中哪一个包含有效数据。把帧分成时间段使传输控制信号和

音频

数据仅通过


4


根线到达


9




音频

通道或转换成其他数据流成为可能。与具有分离控制接口的


IIS


方案相比,


AC’97


明显

减少了整体管脚数

。一般来说,


AC’97


编解码器采用


TQFP48


封装。



PCM also supports Time Division Multiplexing (TDM) in that several devices can use the bus simultaneously (this is sometimes referred to as network mode).

ASLA – Advanced Sound Linux Architecture

OSS – 以前的Linux音频体系结构,被ASLA取代并兼容

Codec – Coder/Decoder

I2S/PCM/AC97 – Codec与CPU间音频的通信协议/接口/总线

DAI – Digital Audio Interface 其实就是I2S/PCM/AC97

DAC – Digit to Analog Conversion

ADC – Analog to Digit Conversion

DSP – Digital Signal Processor

Mixer – 混音器,将来自不同通道的几种音频模拟信号混合成一种模拟信号

Mute – 消音,屏蔽信号通道

PCM – Pulse Code Modulation 一种从音频模拟信号转换成数字信号的技术,区别于PCM音频通信协议

采样频率 – ADC的频率,每秒采样的次数,典型值如44.1KHZ

量化精度 – 比如24bit,就是将音频模拟信号按照2的24次方进行等分

SSI – Serial Sound Interface

DAPM – Dynamic Audio Power Management

音频编解码器Codec负责处理音频信息,包括ADC,DAC,Mixer,DSP,输入输出以及音量控制等所有与音频相关的功能。

Codec与处理器之间通过I2C总线和数字音频接口DAI进行通信。

I2C总线 – 实现对Codec寄存器数据的读写。

DAI – 实现音频数据在CPU和Codec间的通信。

以Codec作为研究对象,它的输入有Mic(Microphone),PhoneIn电话信号等,输出有耳机HP(HeadPhone),扬声器Speaker和PhoneOut电话信号。另外需要注意在Codec与CPU端间也有音频数字信号的输入输出。

1) 播放音乐

2) 录音

3) 电话

— 打电话 —                                                           — 接听—


4) 通过蓝牙打电话

— 打电话 —                                                           — 接听—



2. 系统架构

Android的音频系统拥有一个比较标准和健全的架构,从上层应用,java framework服务AudioMananger,本地服务AudioFlinger,抽象层AlsaHAL,本地库,再调用external的Alsa-lib外部支持库,最后到底层驱动的codec,可谓”五脏俱全”。

以系统启动AuidoFlinger为例,简要窥探Alsa Sound的组织架构。

Java服务AudioManager作为服务端,本地服务AudioFlinger作为客户端,两者通过Binder机制交互。AudioFlinger对硬件功能的具体实现(比如setMode设置电话/蓝牙/录音等模式)交给硬件抽象层AlsaHAL完成。抽象层可以调用本地标准接口,比如mASLADevice->route,或者直接调用Alsa-lib库去操作底层驱动。

Linux的音频驱动结构相对复杂,源码位于内核目录下的/sound/soc/,其中/codec文件夹下存放与平台无关的编解码器驱动,/imx文件夹下存放于freescale imx平台相关的音频驱动,主要可分为SSI驱动和DAI驱动。

以声卡驱动的数据结构为切入点分析,

1) struct snd_soc_codec – 由与平台无关的codec驱动实现。

2) struct snd_soc_platform – 由与imx平台相关的DAI驱动实现,主要实现了音频数据的DMA传输功能。

3) struct snd_soc_dai_link – 将平台相关的DAI与平台无关的codec联系起来。