一些基本概念
声音
- 振幅:音量大小
- 频率:尖锐程度
次声波 | 可听声波 | 超声波 |
---|---|---|
<20Hz | 20Hz ~ 20kHz | >20kHz |
语音信号频率范围:300Hz ~ 3kHz
数字化
模拟信号 –> 采样 –> 量化 –> 编码 –> 数字信号
采用频率 | 位数 | 声道数 |
---|---|---|
11.025kHz | 8 bit = 256 | 单声道 |
22.05kHz | 16 bit = 65536 | 立体声 |
44.1kHz |
Note: 立体声即两声道
Note: 立体声也可8bit、也可11.025kHz。
音频数据量=采样频率x量化位数x声道数 B/s
* 采用频率:11.025kHz 22.05kHz *44.1kHz* 48kHz
* 位数:8bit 16bit
* 声道数:单声道 立体声
数字音频压缩(编解码)
IIS
I2S(英语:Inter-IC Sound或Integrated Interchip Sound)是IC间传输数字音频数据的一种接口标准,采用序列的方式传输2组(左右声道)数据。I2S常被使用在发送CD的PCM音频数据到CD播放器的DAC中。由于I2S将数据信号和时钟频率信号分开发送,它的抖动(jitter)有损十分地小。
音响数据的采集、处理和传输是多媒体技术的重要组成部分。众多的数字音频系统已经进入消费市场,I2S(Inter—IC Sound)总线, 又称 集成电路内置音频总线,是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准,该总线专责于音频设备之间的数据传输,广泛应用于各种多媒体系统。它采用了沿独立的导线传输时钟与数据信号的设计,通过将数据和时钟信号分离,避免了因时差诱发的失真,为用户节省了购买抵抗音频抖动的专业设备的费用。
I2S总线接口可作为一个编码解码接口与外部8/16位的立体声音频解码电路(CODEC IC)相连,从而实现微唱片和便携式应用。它支持I2S数据格式和MSB-Justified 数据格式。I2S总线接口为先进先出队列FIFO的访问提供DMA传输模式来取代中断模式,可同时发送和接收数据,也可只发送或接收数据。
I2S总线规范
在飞利浦公司的I2S标准中,既规定了硬件接口规范,也规定了数字音频数据的格式。
I2S由3条传输线组成:
* 比特时钟频率线(*BCLK*: bit clock line) 或串行时钟(SCLK); BCLK的频率=2×采样频率×采样位数。 Note:2个声道
* 左右时钟频率线(*LRCLK*:left right clock line) 或字元选择线(WS:word select line)
* *至少* 一条串行复合数据线(SDATA:time-multiplexed data)就是用二进制补码表示的音频数据。
也有可能找到以下这些线:
* 主时钟频率:256个典型的左右时钟频率线(MCLK= 256*LRCLK) (也有是384倍,即MCLK=384*LRCLK)
* 上传数据的复合消息(multiplex)线
I2S由前述的比特时钟频率、字元时钟频率和数据三条线所组成。当新的数据被放到数据在线时,比特时钟频率就会跳动一次。I2S的数据线允许两个轨道的数据同时发送,而字元选择时钟频率能让接收设备知道现在正在发送轨道1或轨道2的数据。每个轨道可传输32位的数据,所以显而易见地,字元选择时钟频率和声音的采样率时钟频率是相同的。比特时钟频率即是采样率时钟频率的64倍,44.1KHz x 2个声道 x 32位 = 2.8224MHz。
LRCLK
LRCLK为“1”表示正在传输的是右声道的数据,为“0”则表示正在传输的是左声道的数据。(也可配置为LRCLK为“1”时表示传输左声道,“0”传输右声道 )LRCLK必须与BCLK保持同步,通常LRCLK的下降沿同步于BCLK下降沿,LRCK的频率等于采样频率。
LRCLK可以在串行时钟的上升沿或者下降沿发生改变,并且LRCLK信号不需要一定是对称的。在从属装置端,LRCLK在时钟信号的上升沿发生改变。LRCLK总是在最高位传输前的一个时钟周期发生改变,这样可以使从属装置得到与被传输的串行数据同步的时间,并且使接收端存储当前的命令以及为下次的命令清除空间。
SDATA
I2S的数据是采用二进制 补码 表示音频数据,从高比特(MSB)发送至低比特(LSB),从字元选择时钟频率的左端开始,加上 一个比特时钟 频率的延迟,即数据将比字元选择时钟频率要慢一个比特时钟频率。(飞利浦规定的格式,I2S格式, 最常用的吧 )
也有左校正(Left Justified, 较少使用 )的I2S数据流,它没有比特时钟频率的延迟,数据和字元选择时钟频率是同步的。
右校正(Right Justified,也叫日本格式、普通格式)则是数据比字元选择时钟频率快一个比特时钟频率。
I2S发送端在BCLK下降沿发送数据、I2S接收端在BCLK上升沿接收数据
这就使得接收端与发送端的有效位数可以不同。如果接收端能处理的有效位数少于发送端,可以放弃数据帧中多余的低位数据;如果接收端能处理的有效位数多于发送端,可以自行补足剩余的位。这种同步机制使得数字音频设备的互连更加方便,而且不会造成数据错位。
为了保证数字音频信号的正确传输,发送端和接收端应该采用相同的数据格式。当然,对I2S格式来说数据长度可以不同。
时序要求
(略)
其他
master 的问题
对于系统而言,产生BCLK和LRCLK的信号端就是主设备(master)
+-------------+ +----------+
| Transmitter | --> | Receiver |
| (master) | --> | (slave) |
| | --> | |
+-------------+ +----------+
+-------------+ +----------+
| Transmitter | <-- | Receiver |
| (slave) | <-- | (master) |
| | --> | |
+-------------+ +----------+
+-----------+
| Controler |
| (master) |
+------+-+--+
| |
+-------------+ | | +----------+
| Transmitter | <-+-+---> | Receiver |
| (slave) | <---+---> | (slave) |
| | --------> | |
+-------------+ +----------+
note: 画得太难看了。不可取!
SDATA 的实际情况
I2S标准上规定的SD线,应该是复合的( 双向的? ),如STM32中的I2S SD就是采用inout类型的。
市场上许多音频codec芯片的I2S都是采用4个IO口,其中SD线分为ADCDAT线与DACDAT线,如WM8987。
把LRCLK分为ADCLRC和DACLRC两个IO口。如WM8731
个人鄙见,要符合标准,当然还要适合市场的实际情况(兼容市场的情况)
多通道的I2S
或许可以参考SPI、IIC之类的总线,添加一个sel信号,添加一些开关电路,进行通道选择。
PDM
脉冲密度调制
Q & A
- 线性音频输出?