android下调试声卡驱动之I2S音频通信

一、I2S概述
       I2S(Inter—IC Sound)总线是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准,该总线专责于音频设备之

间的数据传输。由4条线组成的数字音频接口,常用于HiFi,STB便携设备。Tx  和Rx信号线用于音频传输。而位时钟和左右时钟

(LRC)用于同步链接。I2S具有灵活性,因为控制器和解码器都可以控制位时钟和左右时钟。位时钟因采样率和主系统时钟而有不

同。LRCLK与采样率相同。少数设备支持独立的ADC和DAC的LRCLK。这使在不同采样率情况下同步捕获和回放成为可能。

二、I2S总线介绍

       I2S有3个主要信号线分别为:串行时钟帧时钟串行数据。      

       串行时钟:SCLK,也叫位时钟(BCLK),即对应数字音频的每一位数据,BCLK都有1个脉冲。

                         BCLK的频率=2×采样频率×采样位数。 

       帧时钟:LRCK,(也称WS),用于切换左右声道的数据,LRCK的频率 = 采样频率。LRCK为“1”表示正在传输的是右声道的数

                     据,为“0”则表示正在传输的是左声道的数据。LRCK可以在串行时钟的上升沿或者下降沿发生改变,并且LRCK信号不

                     需要一定是对称的。在从属装置端,LRCK在时钟信号的上升沿发生改变。LRCK总是在最高位传输 前的一个时钟周期

                     发生改变,这样可以使从属装置得到与被传输的串行数据同步的时间,并且使接收端存储当前的命令以及为下次的命令

                     清除空间。

      串行数据:SDATA,用二进制补码表示的音频数据。I2S 格式的信号无论有多少位有效数据,数据的最高位总是被最先传输(在

                     LRCK变化(也就是一帧开始)后的第2个BCLK脉冲处),因此最高位拥有固定的位置,而最 低位的位置则是依赖于数据的

                     有效位数。也就使得接收端与发送端的有效位数可以不同。如果接收端能处理的有效位数少于发送端,可以放弃数据帧

                     中多余的低位数 据;如果接收端能处理的有效位数多于发送端,可以自行补足剩余的位(常补足为零)。这种同步机制使

                     得数字音频设备的互连更加方便,而且不会造成数据错位。 为了保证数字音频信号的正确传输,发送端和接收端应该

                     采用相同的数据格式和长度。当然,对I2S格式来说数据长度可以不同。

            有时为了使系统间能够更好地同步,还需要另外传输一个信号MCLK,称为主时钟,也叫系统时钟(Sys Clock),是采样频

      率的256倍或384倍。

三、I2S数据格式

      根据SDATA数据相对于LRCK和BCLK的位置不同,分为左对齐、右对齐和I2S格式(即标准格式),在数据传输中MSB总是第一

个被传输,在这里声明一下提供BCLK和LRCK时钟的为主设备。

     1、在左对齐模式下,MSB可在BCLK的第一个上升沿继LRCLK过渡。

           android下调试声卡驱动之I2S音频通信_第1张图片

     2、在右对齐模式下,LSB可在BCLK的最后一个上升沿LRCLK前过渡。

          android下调试声卡驱动之I2S音频通信_第2张图片

     3、在I2S模式下,MSB可在BCLK继LRCLK一个转型后的第二个上升沿过渡。

         android下调试声卡驱动之I2S音频通信_第3张图片

     4、有些声卡还支持DSP格式,该格式不属于I2S的范畴。

                                                                LRP = 0

         android下调试声卡驱动之I2S音频通信_第4张图片

                                                                LRP = 1

         android下调试声卡驱动之I2S音频通信_第5张图片

四、时钟关系

      在Android系统中,播放的音频文件格式:sample_rate=44.1Khz,sample_length=16,channel=2时,那么BCLK应该为

 2×44.1Khz×16=32xsample_rate,而实际上我们的MCLK=11.289Mhz,BCLK=MCLK/4,ample_rate=LRCK=BCLK/64=44.1Khz,

BCLK和理论计算的值不 符。但是“如果接收端能处理的有效位数少于发送端,可以放弃数据帧中多余的低位数据;如果接收端能处

理的有效位数多于发送端,可以自行补足剩余的位”。

 

 

你可能感兴趣的:(Android底层,Android底层开发)