1. PCM接口。
对于不同的数字音频子系统,微处理器或DSP和音频设备之间出现了几个用于数字转换的接口。 最简单的音频接口是 PCM(脉冲编码调制)接口,它由时钟脉冲 (BCLK)、帧同步信号 (FS) 以及接收数据 (DR) 和发送数据 (DX) 组成。 在FS信号的上升沿,数据传输从MSB(Most Valid Bit)字开始,FS频率等于采样率。 然后,FS信号开始传输数据字,并按顺序传输各个数据位,并在一个时钟周期内传输一个数据字。 在发送MSB时,首先将信号电平降低到最小值,以避免在不同的终端接口上使用不同的数据方案时MSB的丢失。
PCM 接口易于实现,原则上能够支持任何数据方案和任何采样率,但每个音频通道都需要一个单独的数据队列。
2. I2S接口。
I2S 接口(Inter-ic Sound)于 20 世纪 80 年代首次被飞利浦用于消费类音频,并在一种称为 LRCLK(左右时钟)的信号机制中进行多路复用,以将两个音频信号转换为单个数据队列。 当 lrclk 为高电平时,传输左声道数据; 当LRCLK为低电平时,将传输正确的通道数据。 与 PCM 相比,IIS 更适合立体声系统。 对于多通道系统,还可以在相同的 BCLK 和 LRCLK 条件下并行执行多个数据队列。
3. AC97接口。
AC97(Audio Codec 1997)是由英特尔、英特尔、Creative Labs、NS、ADI和雅马哈等五家PC制造商联合提出的标准。 与 PCM 和 IIS 不同,AC97 不仅仅是一种数据格式,它还用于音频编码的内部架构规范,它还具有控制功能。 AC97 使用 AC-Link 连接到外部编解码器,其中包括位时钟 (BitCLK)、同步信号校正 (SYNC) 以及从处理器编码到和从处理器(SDATDIN 和 SDATOUT)编码的数据队列。 ac'97 个数据帧以同步脉冲开始,由 12 个 20 位时间段(标准中针对不同目的的服务定义时间段)和 16 位“标记”段组成,总共 256 个数据序列。 例如,时间段“1”和“2”用于访问编码的控制寄存器,而时间段“3”和“4”分别加载左声道和右声道。 “标记”段指示其他哪些段包含有效数据。 将帧拆分为时隙,可以仅通过 4 根线将控制信号和音频数据传输到 9 个音频通道或将它们转换为其他数据流。 与具有分立控制接口的IIS解决方案相比,AC97显著减少了总引脚数。 通常,AC97编解码器采用TQFP48封装。
总结:PCM、I2S和AC97各有优势和应用范围,例如在CD、MD、**Walkman大多使用IIS接口,移动**会使用PCM接口,带音频功能的PDA大多使用与PC相同的AC97编码格式。
音频设备接口包括 PCM、I2S 和 AC97,适用于不同的应用。 对于音频设备,Linux 内核包括 OSS 和 ALSA 两种类型的音频设备驱动框架,前者包含 DSP 和 Mixer 字符设备接口,并在用户空间编程中使用文件操作。 后者基于卡和组件(PCM、混音器等),在用户空间编程中使用 alsalib 代替文件接口。
在音频设备驱动程序中,DMA 几乎总是必需的,并且 DMA 缓冲区逐个拆分为段,其中一个段在执行 DMA 操作时执行。 OSS驱动的阻塞读写具有节流能力,不需要调度用户空间的流量,但需要及时写(**)和读(记录),避免缓冲区下溢或溢出。