Audio相关知识总结-转载

1、CODEC:
音频压缩CO+解压缩DEC,CODEC就是多媒体数字信号编解码器,主要负责DAC和ADC。不管是音频加速器,还是I/O控制器,他们输入输出的都是纯数字信号,我们要使用声卡上的Line Out插孔输出信号的话,信号就必须经过声卡上的CODEC的转换处理。可以说,声卡模拟输入输出的品质和CODEC的转换品质有着重大的关系,音频加速器或I/O控制器决定了声卡内部数字信号的质量,而CODEC则决定了模拟输入输出的好坏。

外挂codec(AC107):

AC107是具有I2S/TDM输出转换的高度集成的2通道ADC。它专为高清语音捕获和识别应用平台中的多麦克风阵列而设计。

集成的数字PLL支持大范围的输入/输出频率,它可以从6 // 12-MHz,6.144- / 12.288-MHz,5.6448- / 11.2896-MHz,13MHz,19.2MHz,24.576MHz和其他非标准音频系统时钟。支持音频采样8kHz,11.025kHz,12kHz,16kHz,22.05kHz,24kHz,32kHz,44.1kHz,48kHz,96kHz。

AC107将立体声同步ADC与独立的可编程麦克风偏置电压和麦克风升压放大器集成在一起,可提供有效的通道数据,从而可以消除通道串扰。模拟输入端口MIC1P / N〜MIC2P / N被设计为两个差分麦克风引脚或单端输入引脚。每个通道中都提供独立的数字音量控制器。

AC107可以通过标准I2S或PCM格式在I2S端口上传输其2通道输出数据。同样,一台设备到八台设备可以组合起来,通过一条TDM线传输多达16个通道的输出数据。此外,当AP的I2S格式为常规协议类型时,可以使用一种称为编码模式的新格式来传输16个通道数据。

AC107通过TWI(2线串行接口,与I2C兼容)进行控制。时钟支持高达400 KHz的速率。它仅在从机模式下工作。

AC107特性:

103dB动态范围(A权重)@0dB提升增益
– 85dB THD+N@0dB增强增益
ADC支持的采样率:8kHz〜96kHz
两个全差分麦克风输入
一个数字麦克风SCLK输出@1.024M〜3.072M
PLL支持宽时钟输入6 / 12MHz的,6.144MHz,5.6448MHz,13MHz的,16MHz的,19.2MHz的和24MHz的可编程低噪声麦克风偏置1.8V〜3.0V
<20mW的2-ADC低功耗应用
AC107应用:

智能语音助手系统
语音记录器
数码相机和摄像机
语音会议系统
AC107应用图:

2、数字音频接口
数字音频接口DAI,即Digital Audio Interfaces,顾名思义,DAI表示在板级或板间传输数字音频信号的方式。相比于模拟接口,数字音频接口抗干扰能力更强,硬件设计简单,DAI在音频电路设计中得到越来越广泛的应用。图2-1是一个典型的数字音频系统的电路组成,图中的嵌入式微控制器/DSP中集成了PCM、IIS或AC97音频接口,通过这些接口连接外部的音频编解码器即可实现声音的AD和DA转换,图中的功放完成模拟信号的放大功能。

              图 2-1

下面主要介绍音频设备的3种硬件接口–IIS,PCM和AC97:

2.1 IIS接口
2.1.1 IIS简介
IIS接口(Inter-IC Sound Bus内置集成电路音频总线)是飞利浦在1986年定义(1996年修订)的数字音频传输标准,用于数字音频数据在系统内部器件之间传输,例如编解码器CODEC、DSP、数字输入/输出接口、ADC、DAC和数字滤波器等。它采用了沿独立的导线传输时钟与数据信号的设计,通过将数据和时钟信号分离,避免了因时差诱发的失真,为用户节省了购买抵抗音频抖动的专业设备的费用。

I2S时差性能要优于SPDIF,适合短距离通讯。

2.1.2 IIS特点
支持全双工/半双工。(单工数据传输只支持数据在一个方向上传输;半双工数据传输允许数据在两个方向上传输,但是在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;全双工数据通信允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力。)

支持主/从模式。(主模式:就是主CPU作为主机,向从机(挂载器件)发送接收数据。从模式:就是主CPU作为从机,接收和发送主机(挂载器件)数据。而主从机的分别其实是一个触发的作用,主机主动触发,从机只能被动响应触发。)

和PCM相比,I2S更适合立体声系统。当然,IIS的变体也支持多通道的时分复用,因此可以支持多声道。

2.1.3 硬件结构
IIS是比较简单的数字接口协议,没有地址或设备选择机制。

在IIS总线上,只能同时存在一个主设备和从设备。主设备可以是发送设备,也可以是接收设备,或是协调发送设备和接收设备的其它控制设备。在IIS系统中,提供时钟(SCK和WS)的设备为主设备。图2-2是常见的IIS系统框图。在高端应用中,CODEC经常作为IIS的主控设备以精确控制IIS的数据流。

               图 2-2

IIS协议定义三根信号线:时钟信号SCK、左右声道选择信号WS和数据信号SD。

SCK:串行时钟SCLK,也叫位时钟(BCLK),对应数字音频的每一位数据,SCLK都有一个脉冲。模块内的同步信号,从模式时由外部提供,主模式时由内部产生。
SCLK的频率= 声道数 X 采样频率 X 采样位数。
WS:帧时钟LRCK,也称WCLK,声道选择信号,表明数据发送端所选择的声道(WS=0,表示选择左声道;WS=1,表示选择右声道)。一个时钟周期代表一个音频采样点数据,LRCK的频率等于声音的采样频率。
SD:串行数据SDATA,以二进制补码形式在数据线上传输;在WS变化后的第一个SCK脉冲,先传输最高位(MSB, Most Significant Bit)。
MCLK:主时钟,也是以上两个时钟的参考时钟,一个系统应该使用同一的MCLK以保证时钟同步要求。常见频率256fs或384fs。有时为了使系统间能够更好地同步,当I2S配置为主模式(并且SPI_I2SPR寄存器中的MCKOE位置1)时,使用此时钟,该时钟输出频率 256×fs,fs即音频信号采样频率(fs)。
对于系统而言,能够产生SCK和WS的信号端就是主设备,用MASTER表示,简单系统示意图如下:


IIS包括两个声道(Left/Right)的数据,在主设备发出声道选择/字选择(WS)控制下进行左右声道数据切换。通过增加IIS接口的数目或其它IIS设备可以实现多声道(Multi-Channels)应用。

注意SD的数量可以为多个:

1986年SPEC规定为TTL电平,实际使用参考手册,常见的有3.3V和1.8V两种。

2.1.4 操作模式
随着技术的发展,在统一的 I2S接口下,出现了多种不同的数据格式。根据SDATA数据相对于LRCK和SCLK的位置不同,分为左对齐(较少使用)、I2S格式(即飞利浦规定的格式)和右对齐(也叫日本格式、普通格式)。

对于所有数据格式和通信标准而言,始终会先发送最高有效位(MSB 优先)。

发送端和接收端必须使用相同的数据格式,确保发送和接收的数据一致。

IIS的操作模式分为三种:标准IIS模式、左对齐模式和右对齐模式。

(1)标准IIS模式 Phillips Standard
IIS模式是标准左对齐格式再延迟一个时钟位变化来的,时序如下所示:


左右通道的数据MSB均是在WS变化后第二个SCK/BCLK上升沿有效。使用WCLK/LRCLK信号来指示当前正在发送的数据所属的声道,为0时表示左声道数据。LRCLK信号从当前声道数据的第一个位(MSB)之前的一个时钟开始有效。LRCLK信号在BCLK的下降沿变化。发送方在时钟信号BCLK的下降沿改变数据,接收方在时钟信号BCLK的上升沿读取数据。LRCLK频率等于采样频率Fs,一个LRCLK周期(1/Fs)包括发送左声道和右声道数据。

对于这种标准I2S格式的信号无论有多少位有效数据,数据的最高位总是出现在WCLK/LRCK变化(也就是一帧开始)后的第2个BCLK/SCLK脉冲处。这就使得接收端与发送端的有效位数可以不同。如果接收端能处理的有效位数少于发送端,可以放弃数据帧中多余的低位数据;如果接收端能处理的有效位数多于发送端,可以自行补足剩余的位。这种同步机制使得数字音频设备的互连更加方便,而且不会造成数据错位。

在I2s总线中,任何设备都可以通过提供必需的时钟信号成为系统的主导装置,而从属装置通过外部时钟信号来得到它的内部时钟信号,这就意味着必须重视主导装置和数据以及命令选择信号之间的传播延迟,总的延迟主要由两部分组成:

外部时钟和从属装置的内部时钟之间的延迟;
内部时钟和数据信号以及命令选择信号之间的延迟;
对于数据和命令信号的输入,外部时钟和内部时钟的延迟不占据主导地位,它只是延长了有效的建立时间(set—up time)。延迟的主要部分是发送端的传输延迟和设置接收端所需的时间。

T是时钟周期,Tr是最小允许时钟周期,T>Tr这样发送端和接收端才能满足数据传输速率的要求。

对于所有的数据速率,发送端和接收端均发出一个具有固定的传号空号比(mark—space ratio)的时钟信号,所以t LC和tHC是由T所定义的。 t LC和tHC必须大于0.35T,这样信号在从属装置端就可以被检测到。

延迟(tdtr)和最快的传输速度(由Ttr定义)是相关的,快的发送端信号在慢的时钟上升沿可能导致tdtr不能超过tRC而使thtr为零或者负。只有tRC不大于tRCmax的时候(tRCmax>:0.15T),发送端才能保证thtr大于等于0。

为了允许数据在下降沿被记录,时钟信号上升沿及T相关的时间延迟应该给予接收端充分的建立时间(set-up time)。

数据建立时间(set-up time)和保持时间(hold time)不能小于指定接收端的建立时间和保持时间。

(2)左对齐模式 Left Justified Standard
标准左对齐格式的数据的MSB没有相对于BCLK延迟一个时钟。左对齐格式的左右声道数据的MSB在WS边沿变化后SCK/BCLK的第一个上升沿有效。具体如下图所示:

支持16~32bit字长格式。

参考AIC3104手册中关于左对齐介绍,以64fs,16bit左对齐为例。如图,WCLK一个时钟周期采一个样点,BCLK为64fs,即一时钟周期64位数据。WCLK高电平部分对应的SDIN/SDOUT为左声道数据,采用16bit左对齐格式,即MSB为16bit有效数据,LSB的16bit无效,同理WCLK低电平部分对应SDIN/SDOUT为右声道数据,同样MSB为16bit有效数据,LSB为16bit无效数据。

(3)右边对齐模式 Right Justified Standard
也叫日本格式,sony格式,具体对齐方式如下图所示:

与左对齐区别就是有效数据在LSB。接收设备必须事先知道待传数据的字长。

注意:左右对齐模式的WS时钟高电平为左声道,低电平为右声道,刚好与标准IIS相反。

SCK = 采样率(48K、44.1K、16K等) x 字长(16bit、24bit、32bit) x 2(左右两通道)

MCLK/SCK = 384 、256 等需要参考手册说明支持哪种;

2.1.5 ASRC(异步采样频率转换)
异步采样率转换(Asynchronous Sample Rate Convert)是连接设备对采样数据独立处理的基础,设备接口之间采用异步采样率转换可有效去除连接设备之间时钟同步锁定的要求。

ASRC技术可以大幅度抑制恢复出来的时钟JITTER,即便是采用USB自适应模式,恢复后的时钟经ASRC,也能变得焕然一新。

采样率转换可分为同步采样率转换(Synchronous sample rate convert,SSRC)与异步采样率转换(Asynchronous Sample Rate Convert,ASRC)两种。同步采样率转换是指转换前后的码率时钟是同步的、相关的,其码率之比为恒定值;异步采样率转换前后的码率时钟是异步的、独立的,如信号在两个具有独立时钟的数字系统之间传递时,往往需要采用异步采样率转换来实现信号的码率转换。目前,异步采样率转换主要有两类方法实现:第一类是采用基于输入输出码率跟踪监测,用有理数近似表示码率之比,与同步采样转换一样,采用插值-滤波-抽取方法进行计算。第二类是根据输出采样时刻相位来选择多相FIR滤波器组,采用FIR系数高次多项式插值方法降低滤波器系数存储空间。

异步采样率转换的挑战在于:两个设备之间的时钟是异步的,这意味着两时钟频率之比可能是无理数,不能通过简单倍率的插值-滤波-抽取来实现;时钟频率比不是常数,有可能随着环境(如温度)的变换而变化,系统需要通过一定的策略跟踪补偿。采样率转换方法有两种:(1)使用DAC将数字信号Xs(n)变成模拟信号X(t),低通滤波后进行ADC采样,得到Xt(n);(2)通过算法,对Xs(n)信号在数字域作重采样运算直接得到Xt(n),实现采样率转换。方法(1)的性能主要由DAC和ADC决定,属于数模混合设计,依赖于制造工艺,难以得到高性能的实现;方法(2)采用全数字实现,性能主要取决于算法的设计,可在FPGA中实现。

2.2 PCM接口
2.2.1 PCM简介
PCM接口也叫DSP模式音频接口,是一种通信协议。一般用来传输单声道或双声道立体声的数字音频,但是理论上也可以传输多声道的数字音频。数据格式为PCM格式。

PCM:(pulse coded modulation)脉冲编码调制,是通过等时间隔(即采样率时钟周期)采样将模拟信号数字化的方法。通常pcm有4跟信号线:pcm-clk,pcm-sync,pcm-in,pcm-out。在使用pcm之前,应该配置好pcm接口。通常会设定frame sync,bit samples,tristate edge,pcm-sync,Enable GCI mode,Mute等等。市面上有很多codec,分单声道和立体声。举个例子,mc14583是一种单声道的codec,它的作用就是将从mic进来的模拟信号,转换成pcm-in信号,或者将pcm-out的信号变换为模拟信号从spk端输出。

图2-3为4 bit 采样深度的PCM数据量化示意图。

        图 2-3

PCM数字音频接口,即说明接口上传输的音频数据通过PCM方式采样得到的,以区别于PDM方式。在音频领域,PCM接口常用于板级音频数字信号的传输,与IIS相似。PCM和IIS的区别在于数据相对于帧时钟(FSYNC/WS)的位置、时钟的极性和帧的长度。其实,IIS上传输的也是PCM类型的数据,因此可以说IIS不过是PCM接口的特例。

2.2.2 PCM操作模式
PCM模式分为short frame 和long frame两种。long frame 模式下,LRCK脉冲宽度占2个BCLK时钟周期;short frame模式下,LRCK 只占一个BCLK时钟周期,如下图:


相比于IIS接口,PCM接口应用更加灵活。通过时分复用(TDM,Time Division Multiplexing)方式,PCM接口支持同时传输多达N个(N>8)声道的数据,减少了管脚数目(实际上是减少IIS的“组”数,因为每组IIS只能传输两声道数据嘛)。TDM不像IIS有统一的标准,不同的IC厂商在应用TDM时可能略有差异,这些差异表现在时钟的极性、声道配置的触发条件和对闲置声道的处理等。

综合不少厂商的数据手册,笔者发现,在应用PCM音频接口传输单声道数据(如麦克风)时,其接口名称为PCM;双声道经常使用IIS;而TDM则表示传输两个及以上声道的数据,同时区别于IIS特定的格式。

2.2.3 TDM(时分复用)模式
TDM:包括PCM format 和 I2S format,下图是TDM-I2S Mode,在I2S format下传输多channel。

有些IC支持使用一个公共时钟的多路I2S数据输入或输出,但这样的方法显然会增加数据传输所需要的管脚数量。当同一个数据线上传输两个以上通道的数据时,就要使用TDM格式。TDM数据流可以承载多达16通道的数据,并有一个类似于I2S的数据/时钟结构。

每个通道的数据都使用数据总线上的一个槽(Slot),其宽度相当于帧的1/N, 其中N是传输通道的数量。出于实用考虑,N通常四舍五入到最近的2次幂(2、4、8、或16),并且任何多余通道都被空闲。一个TDM帧时钟通常实现为一位宽的脉冲,这与I2S的50%占空比时钟相反。超过25 MHz的时钟速率通常不用于TDM数据,原因是较高的频率会引起印刷电路板设计者要避免的板面布局问题。

TDM常用于多个源馈入一个输入端,或单源驱动多只器件的系统。在前一种情况下,(多源馈入一个输入端),每个TDM源共享一个公共的数据总线。该信源必须配置为在其适用通道期间才驱动总线,而当其它器件在驱动其它总线时,其驱动器要置为三态。

TDM接口还没出现类似飞利浦I2S的其他标准,因此,很多IC都有着自己略微不同的TDM实现方法。这些变化体现在时钟极性、通道配置,以及闲置通道的三态化和驱动上。当然,通常情况下不同IC是可以一起工作的,但系统设计者必须确保一个器件的输出格式要符合另一只器件输入端的预期。

2.3 PDM接口
声音通过声学传感器获得模拟信号,经过AD,得到音频数字信号,然后再经过PDM(Pulse Density Modulation)脉冲密度调制(通俗理解就是利用脉冲的密度来表示模拟信号的强度)。

一般MCU接收到PDM需经过以下步骤才能得到音频信号:

传输时只需两根线(clk,data)通常clk在1-3Mhz。

PDM时序图:

2.4 DMIC接口
DMIC接口也称双/立体声数字麦克风接口。


2.5 S/PDIF接口
2.5.1 S/PDIF简介
S/PDIF(Sony/Philips Digital Interface Format) 是SONY、PHILIPS在80年代为一般家用器材所定制出来的一种数字信号传输接口,基本上是以AES/EBU(也称为AES3)专业用数字接口为参考然后做了一些小变动而成的家用版本。可以使用成本比较低的硬件来实现数字信号传输。

该接口广泛应用在CD播放机、声卡及家用电器等设备上,能改善CD的音质,给我们更纯正的听觉效果。该接口传输的是数字信号,所以不会像模拟信号那样受到干扰而降低音频质量。需要注意的是,S/PDIF接口是一种标准,同轴数字接口(Coaxial)和光纤接口(Optical)都属于S/PDIF接口的范畴。

就传输方式而言,SPDIF分为输出(SPDIF OUT)和输入(SPDIF IN)两种。
就传输载体而言,SPDIF又分为同轴和光纤两种,其实信号是相同的,只不过是载体不同,接口和连线外观也有差异。


下图分别为光纤和同轴连接线:

S/PDIF往往被用来传输压缩过的音频讯号,它由 IEC 61937标准而定制。它通常被用在支持杜比技术或DTS 环绕效果的家用DVD影院上。

2.5.2 S/PDIF框图


2.5.3 S/PDIF接口规范详解
为了定制一个统一的接口规格,现如今以IEC 60958标准规范来囊括取代AES/EBU与S/PDIF规范,而IEC 60958定义了三种主要形态:

IEC 60958 TYPE 1 Balanced ── 三线式传输,使用 110 Ohm 阻抗的线材以及 XLR 接头,使用于专业场合。
IEC 60958 TYPE 2 Unbalanced ── 使用 75 Ohm 阻抗的铜轴线以及 RCA 接头,使用于一般家用场合。
IEC 60958 TYPE 2 Optical ── 使用光纤传输以及 F05 光纤接头,也是使用于一般家用场合。
事实上, IEC 60958 有时会简称为 IEC958,而 IEC 60958 TYPE 1 即为 AES/EBU(或者称为 AES3)界面,IEC 60958 TYPE 2 即为 S/PDIF 接口,虽然在 IEC 60958 TYPE 2 的接头规范里是使用 RCA 或者光纤接头,不过近年来一些使用 S/PDIF 的专业器材改用 BNC 接头搭配上 75 Ohm 的同轴线以得到比较好的传输质量,下表为 AES/EBU 与 S/PDIF 的比较表。


(1)IEC 60958使用的编码方法—BMC编码

IEC 60958 在传输数据时使用双相符号编码(Biphase Mark Code),简称 BMC,属于一种相位调制(phase modulation)的编码方法,是将时钟信号和数据信号混合在一起传输的编码方法。

其原理是使用一个两倍于传输比特率(Bit Rate)的时钟频率做为基准,把原本一个位数据拆成两部分,当数据为 1 的时候在其时钟周期内转变一次电位(0->1 或 1->0)让数据变成两个不同电位的数据,变成 10 或 01,而当数据为 0 时则不转变电位,变成 11 或 00。同时每一个位开头的电平与前一个位结尾电平要不同(Preamble 头4位除外),这样接收端才能判别每一个位的边界。

使用 BMC 编码可以让传输端与接收端只需一条数据线就可以将数据正确的传送与接收,并且在收送两端可以保持比较好的同步性,这是由于 BMC 格式的电位极性一定会在两个位周期之间变换,这样接收端可以不用理会实际接收到的电为是 0 或 1,只需判别与上一个电平的极性是相同或相反即可。此外, BMC 编码可以让传输线保持在接近零的平均直流电位,除了可以降低传输需要耗费的功率之外,也可以降低实体电磁干扰,让数据正确性更高。

(2)IEC60958通信协议架构

IEC 60958是一种传递数字音频的接口规范,相比I2S,IEC60958通过一根线同时传递时钟信号和数据信号。
IEC 60958标准传递两channel音频数据的报文格式如下图所示,

S/PDIF 与 AES/EBU 主要是用来传递PCM格式的音频信号,例如 48kHz 的 DAT 以及 44.1kHz 的 CD,不过现今也有用来传递压缩过的多声道信号。

标准传递两声道信号的架构如上图所示,最上面为由 192 个框架(Frame)构成的区块(Block)。而每个 Frame 储存了两个声道的一组取样信号(Sample),分为 Channel A 与 Channel B 两个声道。而每组Sample 由一个子框架(Sub Frame)构成,也就是一个 Frame 里有两个 Sub Frame。 Sub Frame 的数据长度为 32 Bits,里头内含了头码(Preamble)、辅助数据(Aux. Data)、音频数据(Audio Data)、以及四个位的信息与检查码。也就是说,一个 Sub Frame 为 32 Bits,也就 4 Bytes,而一个 Frame 为 8 Bytes,而一个 Block 为 192 x 8 = 1536 Bytes,而每个Block 总共可以传递 192 个双声道 Sample。

子框架(Sub Frame)的结构以及每个部分代表的意义如下:

0-3 头码(Preamble): 用来表示一个Sub Frame的开头,有三种型态,分别表示该Sub Frame为Channel A、Channel B或者是一个Block的起始Sub Frame(为Channel A)。
4-7 辅助数据(Aux. Data): 原始此区块的设计是用来传递一些使用者自行添加的信息,不过目前比较常见的用途是当音讯数据超过20Bit取样时,这四个Bit用来储存多出的取样Bit,比如说当要传送24Bit取样的数据时,用来存放末四个Bit的音讯数据。
8-27 音频数据(Audio Data): 存放实际的取样数据,长度为20 Bit,以LSB优先的方式传送,当取样低于20 Bit时,没有用到的LSB Bits要设定为零,举例来说,当我们要传送16 Bit的数据时,只会用到12-27 Bit的位置(LSB在12 Bit),而8-11 Bit为零。
28 有效位(Validity Bit): 此位设定了这一个Sub Frame内的数据是不是正确,如果设定为0,代表此Sub Frame内的数据是正确可被接收的,反之如果此Bit为1,则代表接收端应该忽略此组Sub Frame。比如说CD转盘读取CD数据时若是有某一个Sample读不到就会将代表该组Sample的Sub Frame中的有效位设为1。
29 使用者位(User Bit): 此位为使用者自行定义的位,每组Sample传送一位,直到192组Sample传完后组成192位的信息,两声道各自有一组192位的使用者信息。
30 信道状态位(Channel Status Bit): 此位与使用者位一样,每组Sample传送一位,最后组成两声道各自一组192位的信道状态信息(Channel Status)。这个192位信道状态信息分为专业(Professional)与一般家用(Consumer)两种不同的结构,以第一个位决定,设为1的时候为Professional模式,设为0的时候为Consumer模式。
31 同位检查位(Parity Bit): 同位检查是用来判别是否有奇数个位是发生错误,是一种简便错误检查方法,这边是使用偶位同位检查(Even Parity Check)。
子框架内的头码(Preamble)定义:

头码是用来表示一个Sub Frame的开头,主要有B,M,W(或Z,X,Y)三种组态,各代表不同的意义。M代表此时传送的是A通道(左声道),W代表此时传输的是B通道(右声道),而B比较特殊,代表此时传送的是A通道,并且是一个Block的起始Sub Frame。

在上头的表格里的数据数值是Sub Frame中其它的数据经过BMC编码之后再加到整个Sub Frame前头的数据数值,所以总共是八码,代表四个位的时序。此外比较特别的是除了有X、Y、Z三种组态之外,上面的表格还列出了另外一组与原本数据相位相反的数值,要使用哪一组数值是依照前一组Sub Frame中最尾端的电平而定,当前一组Sub Frame为最尾端的电平0时用左边那一列数值,为1的时后用右边那一列,这样接收端才能正确处理。

在一个区块(Block)中,Preamble为Z组态时代表一个区块的起始点,如下图所示。

信道状态位:

每组Sub Frame中有一位的信道状态位,在一个Block有192组Frame,可以构成192位的信道状态结构(Channel Status Structure),而两声道各自有一组192位的使用者信息。这个192位的信道状态结构主要有两种不同的结构,由第一个位来决定,当第一个位为0时代表一般家用(Consumer)结构,第一个位为1时代表专业用(Professional)结构,分别为下面这两张结构图表。


而实际使用上,上面这两个图表只能当做参考使用,因为信道状态结构有许多种不同的版本,到目前为止世面上许多不同器材所遵循的版本也不尽相同,甚至有一些器材会忽略不处理信道状态。

(3)IEC61937通信协议架构

相比IEC 60958只能传递2个channel的音频数据,IEC 61937可以传递更复杂的音频数据,如MPEG2那种多声道, AC3 或DTS。

IEC 61937报文格式如下:

Pa,Pb,Pc,Pd均为16bit数据,是IEC 61937的Preamble word,分别封装在IEC 60958 标准的1个Sub Frame中。
Pa,Pb是sync word,其值是固定的。Pc包含数据类型和传递给接受者的信息。Pd为Burst-payload的长度。

Pc的信息如下表:


Data type如下:


2.5.4 数据处理
由于SPDIF传输的是音频数据,速率很低,一般都是K级别的。为了从BMC编码后的数据恢复出音频数据,我们可以用一个较高频率的时钟(比如100M)去采样SPDIF接口上输入的信号。得到其沿变化的最小时间间隔(N个时钟周期)。这样在每个沿变化后或者计时到时间间隔N后, 重新清零计数器开始计时到N-1时采样一位 数据。用一个8位的移位寄存器,去连续接收数据,再根据子框架内的头码(Preamble)定义 去识别出Fame 头。同时根据BMC的编码方法 “在其时钟周期内转变一次电位(0->1或1->0)让数据变成两个不同电位,变成10或01,而当数据为0则不转变电位,变成11或00。”去将BMC变化后的数据转换为实际的音频数据。

2.6 AC97接口
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封装。
  
PCM、IIS和AC97各有其优点和应用范围,例如在CD、MD、MP3随身听多采用IIS接口,移动电话会采用PCM接口,具有音频功能的PDA则多使用和PC一样的AC’97编码格式。

3、FIFO
FIFO存储器(外设存储器设备)是一个先入先出的双口缓冲器,即第一个进入其内的数据第一个被移出,其中一个存储器的输入口,另一个口是存储器的输出口。主要有三个方面的作用:

1)对连续的数据流进行缓存,防止在进机和存储操作时丢失数据;
2)数据集中起来进行进机和存储,可避免频繁的总线操作,减轻CPU的负担;
3)允许系统进行DMA操作,提高数据的传输速度。这是至关重要的一点,如果不采用DMA操作,数据传输将达不到传输要求,而且大大增加CPU的负担,无法同时完成数据的存储工作。
4、DMA
DMA的英文拼写是“Direct Memory Access”,汉语的意思就是直接内存访问,是一种不经过CPU而直接从内存存取数据的数据交换模式。PIO模式下硬盘和内存之间的数据传输是由CPU来控制的;而在DMA模式下,CPU只须向DMA控制器下达指令,让DMA控制器来处理数据的传送,数据传送完毕再把信息反馈给CPU,这样就很大程度上减轻了CPU资源占有率。

DMA主要是考虑到RAM和外设之间拷贝大量数据时提升性能的一种硬件策略。数据交互,需要一个数据的源地址和目的地址,类似memcpy()函数。DMA也不能例外,它也必须提供源、目的寄存器,只不过其内部是靠硬件实现的从而达到更高效的数据交互目的而已。这里可以假想DMA是一种数据传输过程中的"桥梁",DMA的源寄存器存放的就是我们要拷贝的数据的开始位置地址,DMA的目的寄存器存放的我们要拷贝数据的目的地址。这样硬件DMA就帮助我们高效完成了数据的传输。

总线接口控制器负责与系统总线通信,设置IIS控制器相关的寄存器、工作模式等。系统通过总线控制音频数据流的输入、输出。音频数据的发送和接收都通过一个先进先出的队列(FIFO)作为缓冲。但是,FIFO不能保证声音的连续播放,所以,需要使用DMA。


DMA详细介绍见:https://www.cnblogs.com/alantu2018/p/9140585.html
        https://www.cnblogs.com/kevin-heyongyuan/articles/11062016.html

5、中断和DMA驱动模型
(1)DMA 传送方式的优先级高于程序中断,两者的区别主要表现在对CPU的干扰程度不同。中断请求不但使CPU停下来,而且要CPU执行中断服务程序为中断请求服务,这个请求包括了对断点和现场的处理以及CPU与外设的传送,所以CPU付出了很多的代价;DMA请求仅仅使CPU暂停一下,不需要对断点和现场的处理,并且是由DMA控制外设与主存之间的数据传送,无需CPU的干预,DMA只是借用了一点CPU的时间而已。还有一个区别就是,CPU对这两个请求的响应时间不同,对中断请求一般都在执行完一条指令的时钟周期末尾响应,而对DMA的请求,由于考虑它的高效性,CPU在每条指令执行的各个阶段之中都可以让给DMA使用,是立即响应。

(2)在音频设备驱动中,几乎必须使用DMA,而DMA的缓冲区会被分割成一个一个的段,每次 DMA操作进行其中的一段,因此DMA的操作模型对于声音子系统的处理有着特别关键的作用。

不管是AC97还是IIS音频驱动,其过程都是通过有限状态机来进行状态切换。数据传输有一个重要机制就是使用双BUFFER作为数据缓冲,作用是一个BUFFER由DMA负责传送,另一个BUFFER由CPU做数据搬移,从而提高效率。第一次启动的时候两个缓冲区都填满,但只有一个交给DMA,在IST中进行接下来的数据转换和搬移,这样就可以保证传送的连续性,避免数据搬移的时候DMA空置停机。因为DMA传输是不占用CPU的,所以在CPU进行数据转换和搬移的时候DMA也在进行,这样codec一直有数据播放就不会有播放停顿现象。

DMA的硬件实现,不同的CPU略有不同。有的嵌入式芯片做的简单,不支持DMA地址的链式连接,有的则支持,但不影响具体实现。他们相同的点是:

a. 一般一个DMA有N个子CHANNEL
b. 每一个CHANNEL都可以互不干扰的独立运转或者停机,自有一个状态机。
c. DMA使用一个总的DMA 中断通知CPU,然后由软件负责查找具体某个CHANNEL。
双声道系统中的声音驱动,DMA运作都是采用两个通道独立完成录、放的操作,并且每个通道都采用双BUFFER的策略,来保证DMA和CPU可以近乎同时的工作,互不影响。而且,一个在高层支持多个流的声音驱动也要注意对DMA这个硬件设备的操作要保持互斥。在实际驱动的实现过程中,这种双通道、双BUFFER的驱动有很多细节要注意,要注意处理好几大类关系:

1)硬件 DMA和硬件CODEC之间的关系

在整个放音声音数据传输系统中有:

APP buffer——>DMA buffer——>IIS(AC97) FIFO——>CODEC

APP负责提供数据,DMA负责数据传输,其实就是要把数据搬运到类似IIS或者AC97间的FIFO中,IIS负责成帧传递数据,最后由CODEC还原。录音则反之。

一般来讲,IIS和CODEC要在DMA启动前准备好,而启动DMA和IIS的顺序,往往会导致一些数据的丢失,这是关注的一点。

2)DMA与APP buffer之间的关系

还原处理时:APP往往提供很大的数据包,比如16K,而DMA由于设计的需要,一般取到4K,就比较大了。

启动DMA开始工作的条件是:

填充完毕两个DMA BUFFER
IIS准备好
当DMA完成搬运后,会产生DMA的中断,而在中断处理中,要注意以下问题:
启动第二个BUFFER,继续让DMA工作,如果不能启动就要DMA停机了。
CPU负责检查是否还有足够的数据给DMA,如果有,够填充几个DMA BUFFER。
DMA停机的条件是:

没有更多的BUFFER可供搬运
强制停机
在实践过程中,要拿捏好DMA启动和停机的条件,因为驱动一般都是多线程运转的,一定要注意对DMA操作时的互斥,防止出现异常或者死锁。

另外,DMA BUFFER的大小,直接关系到采样的频率,对于一些实时应用很重要。比如:VOIP中需要20ms 的打包周期,就需要限制DMA BUFFER的大小,从而控制中断时间,及时为VOIP提供周期打包数据。

3)DMA多CHANNEL之间的关系

如果同时启动录音和放音CHANNEL,那么在DMA的中断处理中要注意区分是谁的数据,并且要及时启动各自CHANNEL的第二个BUFFER,防止采集数据丢失或者放音停顿。
————————————————
版权声明:本文为CSDN博主「houxiaoni01」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/houxiaoni01/article/details/79224887

你可能感兴趣的:(音视频编解码,音视频)