文档库 最新最全的文档下载
当前位置:文档库 › I2S和PCM接口

I2S和PCM接口

I2S和PCM接口都是数字音频接口,而蓝牙到cpu以及codec的音频接口都是用PCM接口,是不是两个接口有各自不同的应用呢?先来看下概念。
PCM(PCM-clock、PCM-sync、PCM-in、PCM-out)脉冲编码调制,模拟语音信号经过采样量化以及一定数据排列就是PCM了。理论上可以传输单声道、双声道、立体声和多声道。是数字音频的raw data。
I2S是音频数字化后数据排列的一种格式,所传输的就是PCM,支持单声道和立体声。
PCM是一个通称、混称,I2S是对原始PCM进行数据排序处理,本质就是PCM,可以说I2S是PCM的子集。所以我想蓝牙芯片上的PCM接口同样可以用I2S来传输。CPU和codec上的PCM和I2S接口也是为支持更多硬件提供的资源。
从系统上讲,cpu的dsp出来的都是pcm信号,我称PCM_father,送到DAC可从speaker等放出,至PCM接口出来PCM_son1,至I2S接口出来PCM_son2,然后送至外部codec或其他外设,通话DAC I2S DAC分别对应。以前一直我有个误解,其实手机里常用的codec也就是对PCM和模拟声音信号的转换,不能解码mp3等压缩编码,这个还是要专用dsp或者软件解码来做的。
一般cpu到蓝牙的通话实时音频使用pcm,有的蓝牙芯片内置MP3codec,mp3走uart/usb更合适。
从蓝牙角度讲,蓝牙在制定协议的时候就特意为通话需求制定了一个协议层,专门定义了一种包结构(sco)用于通话,有很好的实时性。而通过uart传输的包一般为alc,用分组传输的方式。两种包的编解使用的软硬件都有些区别。sco包支持的基础码率也是8k的pcm.所以一般蓝牙芯片都会有一个pcm接口。
PCM和I2S的区别在于,pcm一般是固定8k的采样率的单声道音频,最早似乎和固定电话的编码有直接关系,之后所有的话音编码几乎都是在pcm编码基础上再次编码得到的。而I2S则多了一个专门的信号线,采样率也可以配置到较高的频率,如44k。
手机通话时候的编码一般都会被解码成8k采样率的pcm码,高了也没有用。因为本来手机通话的话音频段就是300~3400Hz而已,编码也是按8k采样的。某些手机平台并没有I2S接口,相对来说基本上都会有pcm接口。
A2DP应该还是走的UART,8k的采样率, 而且很多蓝牙芯片都内置mp3 codec,走ACL的UART更合适
我不是做软件的,也没有详细去了解蓝牙的各个profile。所以有些事情可能是不是特别清楚。从硬件角度讲,如7楼说的那样,目前很多蓝牙,芯片内置了mp3解码器,所以mp3格式的音频并不需要bb这边做解码,从我自己经验看,记得只有最开始的时候做蓝牙有考虑这方面问题,后来的蓝牙项目基本上只有话音走pcm,其他的走UART。
硬件上有另外一个问题,就是有的蓝牙的pcm接口其桢信号的频率是固定8k的,虽然它的bit

率是可变。csr的芯片就是这样。那就是说它的采样率只有8k。除非你有用软件做特殊处理。8k采样率的信号只适合话音传输,mp3恐怕不行。不过我不清楚软件,不知道软件协议上有没有相关的方式,让mp3可以在这个桢率上面传输。
现在我们公司平台就是用I2S与蓝牙的PCM相连,很简单,由于平台没有PCM接口,然后节省成本不用CODEC,我搞的是硬件,从硬件上讲是完全可以的,不过软件上肯定要做处理的。
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端输出。





I2S接口规范
I2S(Inter-IC Sound Bus)是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准。在飞利浦公司的I2S标准中,既规定了硬件接口规范,也规定了数字音频数据的格式。I2S有3个主要信号:
1、串行时钟SCLK,也叫位时钟,即对应数字音频的每一位数据,SCLK有1个脉冲。SCLK的频率=2×采样频率×采样位数
2、 帧时钟LRCK,用于切换左右声道的数据。LRCK为“1”表示正在传输的是左声道的数据,为“0”则表示正在传输的是右声道的数据。LRCK的频率等于采样频率。
3、串行数据SDATA,就是用二进制补码表示的音频数据。
有时为了使系统间能够更好地同步,还需要另外传输一个信号MCLK,称为主时钟,也叫系统时钟(Sys Clock),是采样频率的256倍或384倍。一个典型的I2S信号见图1。

图1 :I2S信号
I2S格式的信号无论有多少位有效数据,数据的最高位总是出现在LRCK变化(也就是一帧开始)后的第2个SCLK脉冲处。这就使得接收端与发送端的有效位数可以不同。如果接收端能处理的有效位数少于发送端,可以放弃数据帧中多余的低位数据;如果接收端能处理的有效位数多于发送端,可以自行补足剩余的位。这种同步机制使得数字音频设备的互连更加方便,而且不会造成数据错位。
随着技术的发展,在统一的 I2S接口下,出现了多种不同的数据格式。根据SDATA数据相对于LRCK和SCLK的位置不同,分为左对齐(较少使用)、I2S格式(即飞利浦规定的格式)和右对齐(也叫日本格式、普通格式)。这些不同的格式见图2和图3。

图2:几种非I2S格式

图3:几种I2S格式

了保证数字音频信号的正确传输,发送端和接收端应该采用相同的数据格式和长度。当然,对I2S格式来说数据长度可以不同。
有了这些背景知识,让我们用示波器来观察一下CT7160的输出波形。图4中的波形是采用Creative原厂的EEPROM ini文件,选择Dolby Prologic方式时的I2S接口输出。可以测得LRCK的频率是48KHz,SCLK的频率是2.304MHz,也就是说采样频率是48KHz,数据位数是24bit,数据格式是右对齐。

图6:LS-220输出的数字音频信号
然而CT7160采用的音频DAC CS4331接受的是16bit或18bit的I2S格式信号,而不是右对齐的信号。难道Creative在设计时选错了元件?仔细想想,这却是一个“歪打正着”的设计。从图中我们可以看到,音频数据的有效位数大概是18位左右。目前在DVD中,Dolby AC-3编码的6个声道均采用16位的精度。LS-220对AC-3信号进行Down-mix,形成Dolby Pro logic的输出,这个过程进行的是数字混音。数字混音最简单的方法就是将两个数据相加,两个16位的数据相加,就产生了17位的结果。随着在混音过程中加入其他声道的信号,以及选取不同的混合比例(就是乘以不同的系数),得到的结果将具有20位以上的有效数据。让我们参考一下图2和图3,如果让一个18位的I2S接收器接收一个24位的右对齐信号,会发生怎样的结果呢?数据发生错位,所有的数据左移1位,最高位被挤到上一帧成了最低位。可是我们听到的音频输出却一切正常,这又是为什么呢?
原来,LS-220的输出虽然有24bit的宽度,但这24bit并不都是有效数据。我们并不清楚LS-220在Dolby Pro logic方式下输出的有效位数到底是多少,但有一点是肯定的,那就是这个有效位数一定小于24。这样一来第24位和第23位永远是相同的,第24位被挤到上一帧,由第23位取而代之成为最高位,对音频输出就不会产生不良影响。这就像在C语言程序中用整数型变量表示字节型数据一样,高8位永远是相同的0或1。
同时,在外部时钟方式下,无论输入信号有多少位,CS4331只取其中的18位,也就是说,LS-220输出的数据中,只有第23位到第6位被CS4331真正接收了(图6中红线圈出的部分)。这样一来,数据错位虽然存在,但对音频输出是没有影响的。大家还可以看到,LS-220输出的低位数据被CS4331丢掉了一部分。只要实际有效数据达到16bit左右,人耳听到的就是圆润清晰的声音,再多的数据只是提供更多的细节而已。如果Creative真的在CT7160上使用24位精度的DAC,倒是成本过高,有违低价DVD的精神了。


















I2S总线规范
在飞利浦公司的I2S标准中,既规定了硬件接口规范,也规定了数字音频数据的格式。
I2S有3

个主要信号:
1.串行时钟SCLK,也叫位时钟(BCLK),即对应数字音频的每一位数据,SCLK都有1个脉冲。SCLK的频率=2×采样频率×采样位数
2.帧时钟LRCK,用于切换左右声道的数据。LRCK为“1”表示正在传输的是左声道的数据,为“0”则表示正在传输的是右声道的数据。LRCK的频率等于采样频率。
3.串行数据SDATA,就是用二进制补码表示的音频数据。
4.有时为了使系统间能够更好地同步,还需要另外传输一个信号MCLK,称为主时钟,也叫系统时钟(Sys Clock),是采样频率的256倍或384倍。
串行数据(SD)
I2S格式的信号无论有多少位有效数据,数据的最高位总是出现在LRCK变化(也就是一帧开始)后的第2个SCLK脉冲处。这就使得接收端与发送端的有效位数可以不同。如果接收端能处理的有效位数少于发送端,可以放弃数据帧中多余的低位数据;如果接收端能处理的有效位数多于发送端,可以自行补足剩余的位。这种同步机制使得数字音频设备的互连更加方便,而且不会造成数据错位。
随着技术的发展,在统一的 I2S接口下,出现了多种不同的数据格式。根据SDATA数据相对于LRCK和SCLK的位置不同,分为左对齐(较少使用)、I2S格式(即飞利浦规定的格式)和右对齐(也叫日本格式、普通格式)。
为了保证数字音频信号的正确传输,发送端和接收端应该采用相同的数据格式和长度。当然,对I2S格式来说数据长度可以不同。
字段(声道)选择(WS)
命令选择线表明了正在被传输的声道。
WS为“1”表示正在传输的是左声道的数据。
WS为“0”表示正在传输的是右声道的数据。
WS可以在串行时钟的上升沿或者下降沿发生改变,并且WS信号不需要一定是对称的。在从属装置端,WS在时钟信号的上升沿发生改变。WS总是在最高位传输前的一个时钟周期发生改变,这样可以使从属装置得到与被传输的串行数据同步的时间,并且使接收端存储当前的命令以及为下次的命令清除空间。
电气规范:
输出电压: VL <0.4V VH>2.4V
输入电压: VIL=0.8V VIH=2.0V
注:目前使用的TTL电平标准,随着其他IC(LSI)的流行,其他电平也会支持。
时序要求:
在I2s总线中,任何设备都可以通过提供必需的时钟信号成为系统的主导装置,而从属装置通过外部时钟信号来得到它的内部时钟信号,这就意味着必须重视主导装置和数据以及命令选择信号之间的传播延迟,总的延迟主要由两部分组成:
外部时钟和从属装置的内部时钟之间的延迟
内部时钟和数据信号以及命令选择信号之间的延迟
对于数据和命令信号的输入,外部时钟和内部时钟

的延迟不占据主导的地位,它只是延长了有效的建立时间(setup time)。延迟的主要部分是发送端的传输延迟和设置接收端所需的时间。
T是时钟周期,Tr是最小允许时钟周期,T>Tr这样发送端和接收端才能满足数据传输速率的要求。
对于所有的数据速率,发送端和接收端均发出一个具有固定的传号空号比(mark—space ratio)的时钟信号,所以tLC和tHC是由T所定义的。 tLC和tHC必须大于0.35T,这样使信号在从属装置端可以被检测到。
延迟(tdtr)和最快的传输速度(由Ttr定义)是相关的,快的发送端信号在慢的时钟上升沿可能导致tdtr不能超过tRC而使thtr为零或者负。只有tRC不大于tRCmax的时候(tRCmax>:0.15T),发送端才能保证thtr大于等于0。
为了允许数据在下降沿被记录,时钟信号上升沿及T相关的时间延迟应该给予接收端充分的建立时间(set-up time)。
数据建立时间(set-up time)和保持时间(holdtime)不能小于指定接收端的建立时间和保持时间。

相关文档