音频硬件基础
<p><span style="font-size:16px;">1、CODEC:<br />音频压缩CO+解压缩DEC,CODEC就是多媒体数字信号编解码器,主要负责DAC和ADC。不管是音频加速器,还是I/O控制器,他们输入输出的都是纯数字信号,我们要使用声卡上的Line Out插孔输出信号的话,信号就必须经过声卡上的CODEC的转换处理。可以说,声卡模拟输入输出的品质和CODEC的转换品质有着重大的关系,音频加速器或I/O控制器决定了声卡内部数字信号的质量,而CODEC则决定了模拟输入输出的好坏。</span></p>
<p><span style="font-size:16px;">2、数字音频接口<br />
数字音频接口DAI,即Digital Audio Interfaces,顾名思义,DAI表示在板级或板间传输数字音频信号的方式。相比于模拟接口,数字音频接口抗干扰能力更强,硬件设计简单,DAI在音频电路设计中得到越来越广泛的应用。图2-1是一个典型的数字音频系统的电路组成,图中的嵌入式微控制器/DSP中集成了PCM、IIS或AC97音频接口,通过这些接口连接外部的音频编解码器即可实现声音的AD和DA转换,图中的功放完成模拟信号的放大功能。</span></p>
<p><span style="font-size:16px;"></span></p>
<p><span style="font-size:16px;"> 图 2-1</span></p>
<p><span style="font-size:16px;">下面主要介绍音频设备的3种硬件接口–IIS,PCM和AC97:</span></p>
<p><span style="font-size:16px;">(1)IIS接口<br />
IIS接口(Inter-IC Sound Bus内置集成电路音频总线)是飞利浦在1986年定义(1996年修订)的数字音频传输标准,用于数字音频数据在系统内部器件之间传输,例如编解码器CODEC、DSP、数字输入/输出接口、ADC、DAC和数字滤波器等。</span></p>
<p><span style="font-size:16px;">IIS是比较简单的数字接口协议,没有地址或设备选择机制。在IIS总线上,只能同时存在一个主设备和发送设备。主设备可以是发送设备,也可以是接收设备,或是协调发送设备和接收设备的其它控制设备。在IIS系统中,提供时钟(SCK和WS)的设备为主设备。图2-2是常见的IIS系统框图。在高端应用中,CODEC经常作为IIS的主控设备以精确控制IIS的数据流。</span></p>
<p><span style="font-size:16px;"></span></p>
<p><span style="font-size:16px;"> 图 2-2</span></p>
<p><span style="font-size:16px;">IIS包括两个声道(Left/Right)的数据,在主设备发出声道选择/字选择(WS)控制下进行左右声道数据切换。通过增加IIS接口的数目或其它IIS设备可以实现多声道(Multi-Channels)应用。</span></p>
<p><span style="font-size:16px;">(2)PCM接口<br />
PCM (Pulse Code Modulation) 是通过等时间隔(即采样率时钟周期)采样将模拟信号数字化的方法。图2-3为4 bit 采样深度的PCM数据量化示意图。</span></p>
<p><span style="font-size:16px;"></span></p>
<p><span style="font-size:16px;"> 图 2-3</span></p>
<p><span style="font-size:16px;">PCM数字音频接口,即说明接口上传输的音频数据通过PCM方式采样得到的,以区别于PDM方式。在音频领域,PCM接口常用于板级音频数字信号的传输,与IIS相似。PCM和IIS的区别在于数据相对于帧时钟(FSYNC/WS)的位置、时钟的极性和帧的长度。其实,IIS上传输的也是PCM类型的数据,因此可以说IIS不过是PCM接口的特例。</span></p>
<p><span style="font-size:16px;">相比于IIS接口,PCM接口应用更加灵活。通过时分复用(TDM, Time Division Multiplexing)方式,PCM接口支持同时传输多达N个(N>8)声道的数据,减少了管脚数目(实际上是减少IIS的“组”数,因为每组IIS只能传输两声道数据嘛)。TDM不像IIS有统一的标准,不同的IC厂商在应用TDM时可能略有差异,这些差异表现在时钟的极性、声道配置的触发条件和对闲置声道的处理等。</span></p>
<p><span style="font-size:16px;">综合不少厂商的数据手册,笔者发现,在应用PCM音频接口传输单声道数据(如麦克风)时,其接口名称为PCM;双声道经常使用IIS;而TDM则表示传输两个及以上声道的数据,同时区别于IIS特定的格式。</span></p>
<p><span style="font-size:16px;">(3)AC97接口<br />
AC’97是音频编解码器(Audio Codec)’97的缩写。AC97标准最早是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封装。<br />
<br />
PCM、IIS和AC97各有其优点和应用范围,例如在CD、MD、MP3随身听多采用IIS接口,移动电话会采用PCM接口,具有音频功能的PDA则多使用和PC一样的AC’97编码格式。</span></p>
<p><span style="font-size:16px;">3、FIFO<br />
FIFO存储器(外设存储器设备)是一个先入先出的双口缓冲器,即第一个进入其内的数据第一个被移出,其中一个存储器的输入口,另一个口是存储器的输出口。主要有三个方面的作用:1)对连续的数据流进行缓存,防止在进机和存储操作时丢失数据;2)数据集中起来进行进机和存储,可避免频繁的总线操作,减轻CPU的负担;3)允许系统进行DMA操作,提高数据的传输速度。这是至关重要的一点,如果不采用DMA操作,数据传输将达不到传输要求,而且大大增加CPU的负担,无法同时完成数据的存储工作。</span></p>
<p><span style="font-size:16px;">4、DMA<br />
DMA的英文拼写是“Direct Memory Access”,汉语的意思就是直接内存访问,是一种不经过CPU而直接从内存存取数据的数据交换模式。PIO模式下硬盘和内存之间的数据传输是由CPU来控制的;而在DMA模式下,CPU只须向DMA控制器下达指令,让DMA控制器来处理数据的传送,数据传送完毕再把信息反馈给CPU,这样就很大程度上减轻了CPU资源占有率。</span></p>
<p><span style="font-size:16px;">DMA主要是考虑到RAM和外设之间拷贝大量数据时提升性能的一种硬件策略。数据交互,需要一个数据的源地址和目的地址,类似memcpy()函数。DMA也不能例外,它也必须提供源、目的寄存器,只不过其内部是靠硬件实现的从而达到更高效的数据交互目的而已。这里可以假想DMA是一种数据传输过程中的"桥梁",DMA的源寄存器存放的就是我们要拷贝的数据的开始位置地址,DMA的目的寄存器存放的我们要拷贝数据的目的地址。这样硬件DMA就帮助我们高效完成了数据的传输。</span></p>
<p><span style="font-size:16px;">总线接口控制器负责与系统总线通信,设置IIS控制器相关的寄存器、工作模式等。系统通过总线控制音频数据流的输入、输出。音频数据的发送和接收都通过一个先进先出的队列(FIFO)作为缓冲。但是,FIFO不能保证声音的连续播放,所以,需要使用DMA。</span></p>
<p><br />
<span style="font-size:16px;"></span></p>
<p><span style="font-size:16px;">5、中断和DMA驱动模型<br />
(1)DMA 传送方式的优先级高于程序中断,两者的区别主要表现在对CPU的干扰程度不同。中断请求不但使CPU停下来,而且要CPU执行中断服务程序为中断请求服务,这个请求包括了对断点和现场的处理以及CPU与外设的传送,所以CPU付出了很多的代价;DMA请求仅仅使CPU暂停一下,不需要对断点和现场的处理,并且是由DMA控制外设与主存之间的数据传送,无需CPU的干预,DMA只是借用了一点CPU的时间而已。还有一个区别就是,CPU对这两个请求的响应时间不同,对中断请求一般都在执行完一条指令的时钟周期末尾响应,而对DMA的请求,由于考虑它的高效性,CPU在每条指令执行的各个阶段之中都可以让给DMA使用,是立即响应。</span></p>
<p><span style="font-size:16px;">(2)在音频设备驱动中,几乎必须使用DMA,而DMA的缓冲区会被分割成一个一个的段,每次 DMA操作进行其中的一段,因此DMA的操作模型对于声音子系统的处理有着特别关键的作用。</span></p>
<p><span style="font-size:16px;">不管是AC97还是IIS音频驱动,其过程都是通过有限状态机来进行状态切换。数据传输有一个重要机制就是使用双BUFFER作为数据缓冲,作用是一个BUFFER由DMA负责传送,另一个BUFFER由CPU做数据搬移,从而提高效率。第一次启动的时候两个缓冲区都填满,但只有一个交给DMA,在IST中进行接下来的数据转换和搬移,这样就可以保证传送的连续性,避免数据搬移的时候DMA空置停机。因为DMA传输是不占用CPU的,所以在CPU进行数据转换和搬移的时候DMA也在进行,这样codec一直有数据播放就不会有播放停顿现象。</span></p>
<p><span style="font-size:16px;">DMA的硬件实现,不同的CPU略有不同。有的嵌入式芯片做的简单,不支持DMA地址的链式连接,有的则支持,但不影响具体实现。他们相同的点是:<br />
<br />
a. 一般一个DMA有N个子CHANNEL<br />
b. 每一个CHANNEL都可以互不干扰的独立运转或者停机,自有一个状态机。<br />
c. DMA使用一个总的DMA 中断通知CPU,然后由软件负责查找具体某个CHANNEL。</span></p>
<p><span style="font-size:16px;">双声道系统中的声音驱动,DMA运作都是采用两个通道独立完成录、放的操作,并且每个通道都采用双BUFFER的策略,来保证DMA和CPU可以近乎同时的工作,互不影响。而且,一个在高层支持多个流的声音驱动也要注意对DMA这个硬件设备的操作要保持互斥。在实际驱动的实现过程中,这种双通道、双BUFFER的驱动有很多细节要注意,要注意处理好几大类关系:</span></p>
<p><span style="font-size:16px;">1)硬件 DMA和硬件CODEC之间的关系</span></p>
<p><span style="font-size:16px;">在整个放音声音数据传输系统中有:</span></p>
<p><span style="font-size:16px;">APP buffer——>DMA buffer——>IIS(AC97) FIFO——>CODEC</span></p>
<p><span style="font-size:16px;">APP负责提供数据,DMA负责数据传输,其实就是要把数据搬运到类似IIS或者AC97间的FIFO中,IIS负责成帧传递数据,最后由CODEC还原。录音则反之。</span></p>
<p><span style="font-size:16px;">一般来讲,IIS和CODEC要在DMA启动前准备好,而启动DMA和IIS的顺序,往往会导致一些数据的丢失,这是关注的一点。</span></p>
<p><span style="font-size:16px;">2)DMA与APP buffer之间的关系</span></p>
<p><span style="font-size:16px;">还原处理时:APP往往提供很大的数据包,比如16K,而DMA由于设计的需要,一般取到4K,就比较大了。</span></p>
<p><span style="font-size:16px;">启动DMA开始工作的条件是:</span></p>
<p><span style="font-size:16px;">填充完毕两个DMA BUFFER<br />
IIS准备好<br />
当DMA完成搬运后,会产生DMA的中断,而在中断处理中,要注意以下问题:<br />
启动第二个BUFFER,继续让DMA工作,如果不能启动就要DMA停机了。<br />
CPU负责检查是否还有足够的数据给DMA,如果有,够填充几个DMA BUFFER。<br />
DMA停机的条件是:</span></p>
<p><span style="font-size:16px;">没有更多的BUFFER可供搬运<br />
强制停机<br />
在实践过程中,要拿捏好DMA启动和停机的条件,因为驱动一般都是多线程运转的,一定要注意对DMA操作时的互斥,防止出现异常或者死锁。</span></p>
<p><span style="font-size:16px;">另外,DMA BUFFER的大小,直接关系到采样的频率,对于一些实时应用很重要。比如:VOIP中需要20ms 的打包周期,就需要限制DMA BUFFER的大小,从而控制中断时间,及时为VOIP提供周期打包数据。</span></p>
<p><span style="font-size:16px;">3)DMA多CHANNEL之间的关系</span></p>
<p><span style="font-size:16px;">如果同时启动录音和放音CHANNEL,那么在DMA的中断处理中要注意区分是谁的数据,并且要及时启动各自CHANNEL的第二个BUFFER,防止采集数据丢失或者放音停顿。</span><br />
</p>
<p>非常好的电子资料,内容详实,有参考价值,谢谢分享</p>
页:
[1]