I2S音频总线

I2S音频总线学习

(一)数字音频技术

一、声音的基本概念

    声音是通过一定介质传播的连续的波。 
图1 声波
重要指标:
  1. 振幅:音量的大小
  2. 周期:重复出现的时间间隔
  3. 频率:指信号每秒钟变化的次数

声音按频率分类:
图2 声音的频率(语音信号频率范围:300Hz-3kHz)
声音的传播携带了信息,它是人类传播信息的一种主要媒体。 声音的三种类型:
  1. 波形声音:包含了所有声音形式
  2. 语音:不仅是波形声音,而且还有丰富的语言内涵(抽象→提取特征→意义理解)
  3.  音乐:与语音相比,形式更规范。音乐是符号化的声音。

二、声音的数字化

1.声音信号的类型

  • 模拟信号(自然界、物理)
  • 数字信号(计算机)

2.声音数字化过程

图3 声音数字化过程

3.声音数字化过程示意图

图4 声音数字化过程示意图

4.声音数字化三要素

采样频率

 

量化位数

声道数

每秒钟抽取声波幅度样本的次数

 

每个采样点用多少二进制位表示数据范围

使用声音通道的个数

采样频率越高

声音质量越好

数据量也越大

 

量化位数越多

音质越好

数据量也越大

立体声比单声道的表现力丰富,但数据量翻倍

11.025kHz

22.05 kHz

44.1  kHz

 

8位=256

16位=65536

单声道

立体声

5.声音数字化的数据量

音频数据量=采样频率×量化位数×声道数/8(字节/秒)

采样频率

(kHz)

量化位数

(bit)

数据量(KB/s)

单声道

立体声

11.025

8

10.77

21.35

16

21.53

43.07

22.05

8

21.53

43.07

16

43.07

86.13

44.1

8

43.07

86.13

16

86.13

172.27

三、音频的文件格式

1.WAV文件

WAV是Microsoft/IBM共同开发的PC波形文件。因未经压缩,文件数据量很大。
特点:声音层次丰富,还原音质好

2.MP3文件

MP3(MPEG Audio layer3)是一种按MPEG标准的音频压缩技术制作的音频文件。
特点:高压缩比(11:1),优美音质

3.WMA文件

WMA(Windows Media Audio)是Windows Media格式中的一个子集(音频格式)。
特点:压缩到MP3一半

4.MIDI文件

MIDI(乐器数字接口)是由一组声音或乐器符号的集合。
特点:数据量很小,缺乏重现自然音

四、数字音频压缩标准

1.音频压缩方法概述

图5 
压缩编码技术是指用某种方法使数字化信息的编码率降低的技术

音频信号能压缩的基本依据:

①声音信号中存在大量的冗余度;
②人的听觉具有强音能抑制同时存在的弱音现象。

音频信号压缩编码的分类:

①无损压缩(熵编码)
霍夫曼编码、算术编码、行程编码
②有损压缩
波形编码--PCM、DPCM、ADPCM 、子带编码、矢量量化
参数编码--LPC
混合编码--MPLPC、CELP

2.音频压缩技术标准

分类

标准

说明

电话语

音质量

G.711

采样8kHz,量化8bit,码率64kbps

G.721

采用ADPCM编码,码率32kbps

G.723

采用ADPCM有损压缩,码率24kbps

G.728

采用LD-CELP压缩技术,码率16kbps

调幅广

播质量

G.722

采样16kHz,量化14bit,码率224(64)kbps

高保真

立体声

MPEG

音频

采样44.1kHz,量化16bit,码率705kbps (MPEG三个压缩层次,384-64kbps)

五、声卡

1.声卡的主要功能

声卡是负责录音、播音和声音合成的一种多媒体板卡。其功能包括:
①录制、编辑和回放数字音频文件
②控制和混合各声源的音量
③记录和回放时进行压缩和解压缩
④语音合成技术(朗读文本)
⑤具有MIDI接口(乐器数字接口)

2.芯片类型

  • CODEC芯片(依赖CPU,价格便宜)
  • 数字信号处理器DSP(不依赖CPU)
(二)I2S总线协议

一、I2S总线概述

        音响数据的采集、处理和传输是多媒体技术的重要组成部分。众多的数字音频系统已经进入消费市场,例如数字音频录音带、数字声音处理器。对于设备和生产厂家 来说,标准化的信息传输结构可以提高系统的适应性。I2S(Inter—IC Sound)总线是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准,该总线专责于音频设备之间的数据传输,广泛应用于各种多媒体系统。

二、I2S总线规范

I2S总线拥有三条数据信号线:

1、SCK: (continuous serial clock)  串行时钟

         对应数字音频的每一位数据,SCK都有1个脉冲。SCK的频率=2×采样频率×采样位数。

2、WS: (word select)  字段(声道)选择

         用于切换左右声道的数据。WS的频率=采样频率。
         命令选择线表明了正在被传输的声道。 
         WS为“1”表示正在传输的是左声道的数据。 
         WS为“0”表示正在传输的是右声道的数据。 
        WS可以在串行时钟的上升沿或者下降沿发生改变,并且WS信号不需要一定是对称的。在从属装置端,WS在时钟信号的上升沿发生改变。WS总是在最高位传输 前的一个时钟周期发生改变,这样可以使从属装置得到与被传输的串行数据同步的时间,并且使接收端存储当前的命令以及为下次的命令清除空间。 

3、SD: (serial data)  串行数据 

         用二进制补码表示的音频数据。 I2S 格式的信号无论有多少位有效数据,数据的最高位总是被最先传输(在WS变化(也就是一帧开始)后的第2个SCK脉冲处),因此最高位拥有固定的位置,而最 低位的位置则是依赖于数据的有效位数。也就使得接收端与发送端的有效位数可以不同。如果接收端能处理的有效位数少于发送端,可以放弃数据帧中多余的低位数 据;如果接收端能处理的有效位数多于发送端,可以自行补足剩余的位(常补足为零)。这种同步机制使得数字音频设备的互连更加方便,而且不会造成数据错位。 为了保证数字音频信号的正确传输,发送端和接收端应该采用相同的数据格式和长度。当然,对I2S格式来说数据长度可以不同。 

对于系统而言,产生SCK和WS的信号端就是主设备,用MASTER表示,简单系统示意图如图1所示:      
 
图1 简单系统配置和基本接口时序
       
另一个基本的接口时序图可以参看图2所示:  
 
图2 I2S典型的接口时序

4、时序要求

        在IIS总线中,任何设备都可以通过提供必需的时钟信号成为系统的主设备置,而从属设备通过外部时钟信号来得到它的内部时钟信号,这就意味着必须重视主设备和数据以及命令选择信号之间的传播延迟,总的延迟主要由两部分组成:
1.外部时钟和从设备的内部时钟之间的延迟
2.内部时钟和数据信号以及命令选择信号之间的延迟
        对于数据和命令信号的输入,外部时钟和内部时的延迟不占据主导的地位,它只是延长了有效的建立时间(set-up time)。延迟的主要部分是发送端的传输延迟和设置接收端所需的时间。见图3和图4: 
 
图3 Timing for IIS Transmitter

图4  Timing for IIS Receiver
其中:
 
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)不能小于指定接收端的建立时间和保持时间。

5、电气特性

输出电压:

        VL <0.4V     
           VH>2.4V 

输入电压

         VIL=0.8V    
            VIH=2.0V

注:目前使用的TTL电平标准,随着其他IC(LSI)的流行,其他电平也会支持。  


I2S总线

引言

I2S(InterIC Sound Bus)是飞利浦公司针对数字音频设备之间的音频数据传输而制定的一种总线标准,采用沿独立的导线传输时钟与数据信号的设计,通过分离数据和时钟信号,避免了时差诱发的失真。I2S总线简单有效,可以有效提升输出数据的质量,在各种嵌入式音频系统中有广泛应用。但是在嵌入式音频系统设计中,并不是所有的MCU都支持I2S总线格式,再加上I2S还没有统一的接口标准,不同的厂家生产的设备接口也是五花八门,采用软件模拟实现I2S总线可有效解决在不支持其的MCU和设备之间通过I2S总线实现数据传输时出现的问题。

本文通过在以太网数字语音广播系统中软件模拟I2S总线实现语音数据传输,给出了软件模拟实现I2S总线的方法。

1 I2S总线规范

I2S为三线总线,3个信号分别为:

① 串行时钟SCK,也叫位时钟(BCK)。即每发送1位数字音频数据,SCK上都有1个脉冲。SCK的频率=2×采样频率×采样位数。在数据传输过程中,I2S总线的发送器和接收器都可以作为系统的主机来提供系统的时钟频率。

② 帧时钟WS,即命令(声道)选择,用于切换左右声道的数据。WS的频率等于采样频率,由系统主机提供。WS为“1”表示传输的是左声道的数据,WS为“0”表示传输的是右声道的数据。

③ 串行数据信号SD,用于传输二进制补码表示的音频数据。

I2S格式的信号无论有多少位有效数据,数据位的最高位(MSB)总是被最先传输,1次能够发送的数据决定于I2S格式的有效位数。

1个典型的I2S信号时序如图1所示

图1 I2S总线典型时序图

随着技术的发展,在统一的I2S接口下出现了多种不同的数据格式。根据SD信号相对于SCK和WS位置的不同,分为左对齐和右对齐2种格式,如图2和图3所示。

图2 16位有效位数的左对齐格式

图3 16位有效位数的右对齐格式

在上面2种数据传输格式中,当WS为“1”时传输的是左声道的数据,当WS为“0”时传输的是右声道的数据。为了保证数字音频信号的正确传输,发送端和接收端必须采用相同的数据格式。

2 软件模拟I2S

以太网数字语音广播系统主要是指以以太网为传播介质提供音频服务的广播系统,将语音信号以标准IP包的形式在以太网上进行传送,以实现语音广播功能。该系统在PC机端通过麦克风采集语音数据,然后将采集到的语音数据通过以太网发送给嵌入式终端,嵌入式终端将接收到的语音数据进行数/模转换后进行播放。系统实现框图如图4所示[5]。

图4 以太网数字语音广播系统框图

图5 LM3S8962与MS6336的连接图

广播系统终端的MCU LM3S8962将接收到的语音数据通过I2S总线发送给语音解码芯片MS6336进行数/模转换并播放,

LM3S8962和MS6336的连接如图5所示。为了完整还原出语音信号,需要保证软件模拟I2S信号时序严格精确,高低电平的转换采用延时程序实现。MS6336为16位D/A芯片,其I2S时序如图6所示。

图6 MS6336的典型I2S时序图

该系统中的语音数据双声道,16位采样,1个采样点的数据为4字节,1个采样点数据通过MCU发送给MS6336,数据发送流程如图7所示。

图7 1个采样点数据发送流程

软件模拟I2S引脚的定义如下:

#define I2S_WS GPIO_PIN_5//模拟I2S声道选择时钟控制位

#define I2S_BCK GPIO_PIN_6//模拟I2S位时钟控制位

#define I2S_DATA GPIO_PIN_7//模拟I2S数据传送位

根据MS6336的I2S总线格式以及数据发送流程,软件模拟I2S总线的步骤如下:

① 根据语音数据采样率及采样位数计算得到SCK的值和WS的值(WS的值等于采样频率)。

系统采样率为44.1 kHz,则SCK=2×44.1 kHz×103×16=1 411 200 Hz,WS=44 100 Hz。1个SCK时钟周期T=1/SCK=07 μs。采用延时程序模拟SCK时钟周期需要应用示波器来精确延时时间。本系统中一个SCK周期的延时为delayI2S(2)。

② 将WS、BCK和DATA均置为高电平。

③ 选择左右声道。首先发送左声道数据,将WS置低(若发送右声道数据则将WS置高)。

for(ChannelCnt=0;ChannelCnt<2;ChannelCnt++){//双声道选择播放

if(ChannelCnt==0){//右声道选择信号为高电平

HWREG(GPIO_PORTA_BASE + (GPIO_O_DATA + (I2S_WS << 2))) = ~I2S_WS;

}

else{//左声道选择信号为低电平

HWREG(GPIO_PORTA_BASE + (GPIO_O_DATA + (I2S_WS << 2))) = I2S_WS;

}

……

}

④ 选择高低字节。将左声道数据以高低字节的顺序发送,在发送高字节第1位数据之前先发送1个周期的串行时钟。

for(HorLCnt=0;HorLCnt<2;HorLCnt++){//声道数据高低字节选择

if(ChannelCnt==1){//左声道

if(HorLCnt==0){//低字节

c=*(SampleData+1);//SampleData指向音频数据缓冲区首地址,即左声道低字节

delayI2S(2);//发送第一个数据位之前需要延迟一个位时钟周期

}

else{//低字节

c=*SampleData;

}

}

……

}

⑤ 开始传输音频数据(音频数据的传输在SCK下降沿准备数据,在SCK的上升沿发

送给数据接收端)。将采样点左声道数据的高字节最高位送给SD,设置SCK为低电平,此时为SCK的下降沿,数据准备好。延时半个SCK周期以后将 SCK置为高电平,此时SD线上的数据发送给数据接收端,延时半个SCK周期。依次将左声道剩余位数据按照最高位的方式发送出去。

for(BitCnt=0;BitCnt<8;BitCnt++){//1次传送的数据长度为8位,先传送高字节再传送低字节置时钟线SCK为低,开始准备数据位

HWREG(GPIO_PORTA_BASE + (GPIO_O_DATA + (I2S_BCK << 2))) = ~I2S_BCK;

if((c<

HWREG(GPIO_PORTA_BASE + (GPIO_O_DATA + (I2S_DATA << 2))) = I2S_DATA;

}

else{

HWREG(GPIO_PORTA_BASE + (GPIO_O_DATA + (I2S_DATA << 2))) = ~I2S_DATA;

}

delayI2S(1); //延时半个SCK时钟周期置时钟线为高,开始传输数据位

HWREG(GPIO_PORTA_BASE + (GPIO_O_DATA + (I2S_BCK << 2))) = I2S_BCK;

delayI2S(1);//延时半个时钟周期

}

⑥ 当将1个采样点的左声道的数据发送完以后,延时2个SCK周期,然后发送右声道的数据(同左声道数据的发送过程)。

根据以上的过程对每个采样点的数据进行处理,就可以实现通过软件模拟I2S总线传输音频数据了。以上实现的是典型I2S时序模拟,而左对齐和右对齐2种格式只是时序稍有差异,模拟实现过程同典型I2S总线模拟实现过程基本相同。

结语

在以太网数字语音广播系统中应用软件模拟实现I2S总线时序,能够成功地实现语音信号的数据传输,实现语音信号的实时广播,表明了软件模拟实现 I2S总线的可行性,为解决不支持I2S总线的MCU和各种I2S总线设备间的通信提供了一种可行的方法。但是,在应用软件模拟实现I2S的以太网数字语 音广播系统实时播放语音信号时,存在一些噪声,表明在采用软件模拟实现I2S的时序精确性上存在一些欠缺。


I2S总线和格式

I2S(Inter-IC Sound Bus)是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准。在飞利浦公司的I2S标准中,既规定了硬件接口规范,也规定了数字音频数据的格式。I2S有3个主要信号:

1、串行时钟SCLK,也叫位时钟BCLK,即对应数字音频的每一位数据,SCLK有1个脉冲。SCLK的频率=2×采样频率×采样位数。

2、帧时钟LRCK,用于切换左右声道的数据。LRCK为“0”表示正在传输的是左声道的数据,为“1”则表示正在传输的是右声道的数据。LRCK的频率等于采样频率。

3、串行数据SDATA,就是用二进制补码表示的音频数据。

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

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

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

非I2S格式如图:

I2S格式如图:

对非I2S格式而言,为了保证数字音频信号的正确传输,发送端和接收端应该采用相同的数据格式和长度。对I2S格式来说数据长度可以不同。而且帧时钟LRCK高低电平对应左右声道的意义也不同?

注意I2S总线和I2S格式的区别,I2S总线是一种总线标准,I2S格式是飞利浦制定的数据格式。在统一的I2S总线接口下,出现了左对齐和右对齐等非I2S格式。

在 我们系统Android中,设置sample_rate=44.1Khz,sample_length=16,channel=2;那么BCLK应该为 2×44.1Khz×16=32xsample_rate,而实际上 MCLK=11.289Mhz,BCLK=MCLK/4,sample_rate=LRCK=BLK/64=44.1Khz,BCLK和理论计算的值不 符。引用“如果接收端能处理的有效位数少于发送端,可以放弃数据帧中多余的低位数据;如果接收端能处理的有效位数多于发送端,可以自行补足剩余的位”,因 此这是可以解释的。

PCM协议

PCM(PCM-clock、PCM-sync、PCM-in、PCM-out)脉冲编码调制,模拟语音信号经过采样量化以及一定数据排列就是PCM了。理论上可以传输单声道,双声道立体声和多声道。是数字音频的raw data.


从时序图可以看出,I2S左右声道分别为高低电平,PCM只有一个起始信号,左声道数据紧跟右声道.

你可能感兴趣的:(linux设备驱动,嵌入式软件)