概念
在集成电路中,数字音频通信中,通常使用I2S、PCM等协议的接口
I2S
I2S通信也是Master-Slave模式,Master设备只能有1个,slave模式可以有多个
I2S物理连接线
主要由5条线,如下:
MCLK:主时钟,一般由Master提供,提供基础稳定的频率
BCLK: 位时钟,一个BCLK时钟信号通常代表一位bit数据收发,由Master设备提供
LRCLK或者WCLK:片选时钟信号,确定发送的数据时左/右通道的数据
DIN/DOUT:数据收发引脚,发送数据二进制的补码,每一帧代表一个bit位
DIN、DOUT虽然写在了一起,但是他们是两条独立的引脚
但是不同厂商对不同音频通道的音频数据收发,也有可能变化,比如telechips对7.1通道的音频数据,就有11个引脚,除了时钟信号3条线之外,有8条线专门的数据线
I2S时钟信号
时钟信号3条线,他们发出的信号频率都是可以确定的:
LRCLK信号一个周期代表一帧的数据,那么他的频率肯定对应采样率,
R
a
t
e
L
R
C
L
K
=
S
a
m
p
l
e
R
a
t
e
Rate_{LRCLK} = SampleRate
RateLRCLK=SampleRate
BCLK信号一个周期代表一个Bit数据,那么它的频率就等于一个LRCLK周期内的频率,也就是 R a t e B C L K = R a t e L R C L K ∗ C h a n n e l s ∗ B i t f o r m a t Rate_{BCLK}=Rate_{LRCLK} * Channels * Bit_{format} RateBCLK=RateLRCLK∗Channels∗Bitformat,其中 B i t f o r m a t Bit_{format} Bitformat一个音频数据占用的bit数
MCLK信号由Master设备提供,频率比BCLK大,通常BCLK都是由MCLK分频而来的
标准、左对齐、右对齐
标准模式
在WCLK信号有效后,BCLK的第二个周期的上升沿数据位有效,数据位先MSB高位Bit,后低位LSB的Bit
左对齐 Left Justified Standard
在WCLK信号有效后,BCLK的第一个周期的上升沿数据位有效,也是先MSB,后LSB
右对齐 Right Justified Standard
注意:1. 上面讲到在WCLK信号有效后,不同产商可能对于这个有效不一样,有的是上升沿,有的时下降沿有效等;2. 标准模式与左右对齐模式,在片选信号WCLK的理解是不一样的,比如标准模式WCLK的高电平代表左通道,那左右对齐的的WCLK高电平代表右声道
如何发送多通道数据
看了上面的I2S介绍后,WCLK可能只能发送2通道的数据,设计之初也是这样的,但随着音频立体声的扩展,如5.1、7.1等多个通道数据扩展后,I2S也引入TDM时分复用技术,扩展到多通道数据的收发;
TDM的slot槽概念
slot槽的概念是针对DIN/DOUT数据引脚上的,一个slot表示一个通道的一帧数据,比如5.1通道数据,其采样Bit时24,那么一个槽slot就代表5.1通道其中一个通道的24bit的数据;通常:
slot num:槽的个数,一个WCLK周期内,槽的个数,slot_num >= channels
slot width:槽的宽度,也就是一个采样点的数据Bit位数,如上面的5.1通道例子,24bit,但是通常收发时不一定时24bit,有可能是32bit,多余bit位会补充0
在I2S通信下使用TDM技术,也会有各种模式:标准模式、左对齐和右对齐模式
TDM之标准模式
在LRCLK有效后,BCLK的第二个周期的上升沿,数据信号开始有效,先发送偶数通道的数据,在LRCK信号变化后,在发送奇数通道的数据
上图中每个slot不在是bit位了,它表示某个通道的一帧数据
TDM之LEFT模式
在LRCLK有效后,BCLK的第1个周期的上升沿
TDM之Right模式
PCM协议
pcm协议引脚和I2S一帧,但是可以把LRCLK理解位帧同步信号fs
DSP A 、DSP B模式
DSP A通常又叫短帧模式,DSP B又叫长帧模式,由于各个厂家对这两种模式定义不一样,所以并没有一个统一的标准,这里简单介绍下,通用的模式:
在fs同步帧有效后,BCLK的第二个周期DIN/DOUT开始有效,slot依次发送channel数据
在fs同步帧有效后,BCLK的第1个周期DIN/DOUT开始有效,slot依次发送channel数据
按照上述的发送时序图,可推断:
标准模式: R a t e B C L K = R a t e L R C L K ∗ ( 1 + s l o t _ n u m ∗ s l o t _ w i d t h ) 标准模式:Rate_{BCLK} = Rate_{LRCLK} * (1 + slot\_num*slot\_width) 标准模式:RateBCLK=RateLRCLK∗(1+slot_num∗slot_width)
左右对齐模式: R a t e B C L K = R a t e L R C L K ∗ ( s l o t _ n u m ∗ s l o t _ w i d t h ) 左右对齐模式:Rate_{BCLK} = Rate_{LRCLK} * ( slot\_num*slot\_width) 左右对齐模式:RateBCLK=RateLRCLK∗(slot_num∗slot_width)
本文大量参考了这篇文章,感谢!