I2S时序及音频驱动

1.音频采样率及采样精度

1.1采样频率

采样的过程就是将通常的模拟音频信号的电信号转换成二进制码 0 和 1 的过程,这些 0 和 1 便构成了
数字音频文件。图中的正弦曲线代表原始音频曲线,方格代表采样后得到的结果,二者越吻合说明采
样结果越好
I2S时序及音频驱动_第1张图片
采样频率是每秒钟的采样次数,我们常说的 44.1kHz 采样频率就是每秒钟采样 44100 次。理论上采样
频率越高,转换精度越高,目前主流的采样频率是 48kHz。

在数字音频领域,常用的采样率有:
8,000 Hz - 电话所用采样率, 对于人的说话已经足够
11,025 Hz-AM调幅广播所用采样率
22,050 Hz和24,000 Hz- FM调频广播所用采样率
32,000 Hz - miniDV 数码视频 camcorder、DAT (LP mode)所用采样率
44,100 Hz - 音频 CD, 也常用于 MPEG-1 音频(VCD, SVCD, MP3)所用采样率
47,250 Hz - 商用 PCM 录音机所用采样率
48,000 Hz - miniDV、数字电视、DVD、DAT、电影和专业音频所用的数字声音所用采样率
50,000 Hz - 商用数字录音机所用采样率
96,000 或者 192,000 Hz - DVD-Audio、一些 LPCM DVD 音轨、BD-ROM(蓝光盘)音轨、和 HD-DVD (高清晰度 DVD)音轨所用所用采样率

1.2采样精度

量化精度是指对采样数据分析的精度,比如 24bit 量化精度就是指将标准电平信号按照 2 的 24 次方进
行分析,也就是说将图中的纵坐标等分为 2的24次方等分。量化精度越高,声音就越逼真。常见的采样精度一般为2的24次方或者2的16次方。

2.音频编解码芯片

音频设备硬件接口有PCM接口、I2S接口、AC97接口,以下内存以I2S接口为例进行介绍。常用的音频编解码芯片有es8388、WM8960等。

2.1ES8288

ES8388是一种高性能、低功耗、低成本的音频编解码器。它由两路ADC,2通道DAC,话筒放大器、耳机放大器、数字音效、模拟混合和增益功能。
ES8388采用先进的多位Δ∑调制技术实现数字与模拟之间的数据转换。多比特Δ∑调制器使器件对时钟抖动和低带外噪声的灵敏度低。它应用于:MID,MP3, MP4, PMP,无线音频,数码相机,摄像机,GPS领域,蓝牙,便携式音频设备。

ES8388特性:
ADC:
24位,8 khz至96 khz采样频率
95dB动态范围,95dB信噪比,-85dB THD+N
带麦克风放大器的立体声或单声道麦克风接口
自动电平控制和噪声门
2到1模拟输入选择
各种模拟输入混合和增益

DAC:
24位,8 khz至96 khz采样频率
96 dB动态范围,96 dB信噪比,-83dB THD N
40 mw耳机放大器,无噪音,无阻塞选项
立体增强
低音和高音
各种模拟输出混合和增益

I2S时序及音频驱动_第2张图片

I2C/SPI控制接口Pin脚(蓝色pin脚)

网络标号 引脚说明 引脚功能
I2C/SPI_CLK 输入I 28脚 控制时钟输入,同步时钟
I2C/SPI_DAT 输入输出I/0 27脚 控制数据输入输出
I2C_AD/SPI_CE 输入I 26脚 控制悬着或设备地址选择

音频接口(绿色)

网络标号 引脚说明 引脚功能
MCLK 输入I 1脚 主时钟 必须等于fs(音频采样率)的256倍
SCLK 输入输出I\O 5脚 音频数据位时钟 用于同步
LRCK 输入输出I\0 7脚 音频数据左右声道对齐时钟
DSDIN 输入I 6脚 DAC音频数据
ASDOUT 输出0 8脚 ADC音频数据

3.I2S总线

I2S (Inter-IC Sound) 总线是飞利浦公司提出的一种用于数字音频设备之间进行音频数据传输的总线。和 I2C、 SPI 这些常见的通信协议一样, I2S 总线用于主控制器和音频 CODEC 芯片之间传输音频数据。I2S 接口需要 3 根信号线(如果需要实现收和发,那么就要 4 根信号线,收和发分别使用一根信号线):

  • SCK: 串行时钟信号,也叫位时钟(BCLK),音频数据的每一位数据都对应一个 SCK,立体声都是双声道的,因此 SCK=2×采样率×采样位数
    比如采样率为 44.1KHz、 16 位的立体声音频,那么 SCK=2× 44100× 16=1411200Hz=1.4112MHz
  • WS: 字段(声道)选择信号,也叫做帧时钟(LRCK),用于切换左右声道数据,为“1”表示正在传输左声道的数据,为“0”表示正在传输右声道的数据
    WS 的频率等于采样率,比如采样率为 44.1KHz 的音频, WS=44.1KHz
  • SD: 串行数据信号,也就是实际的音频数据,若要同时实现放音和录音,就需要 2 根数据线
    比如 WM8960 的 ADCDAT 和 DACDAT,就是分别用于录音和放音

不管音频数据是多少位的,数据的最高位都是最先传输的。数据的最高位总是出现在一帧开始后(LRCK变化)的第 2 个 SCK 脉冲处。另外,有时为了使音频 CODEC 芯片与主控制器之间能够更好的同步,会引入另外一个叫做 MCLK 的信号,也叫做主时钟或系统时钟,一般是采样率的 256 倍或 384 倍。

3.1声音数字化三要素

采样频率:每秒钟抽取声波幅度样本的次数。采样频率越高,声音质量越好,数据量也越大。常用的采样频率有11.025KHz,22.05KHz,44.1KHz,48KHz,96KHz等。

量化位数:每个采样点用多少二进制位表示数据范围。量化位数也叫采样位数。量化位数越多,音质越好,数据量也越大。常用的采样位数有8位,16位,24位,32位等。

声道数:使用声道的个数。立体声比单声道的表现力丰富,但是数据量翻倍。常用的声道数有单声道,立体声(左声道和右声道)。

音频数据量=采样频率(Hz) * 量化位数 * 声道数 / 8,单位:字节/秒

3.2 I2S的时序

3.2.1标准时序

I2S时序及音频驱动_第3张图片
左右通道的数据MSB是在WS变化后第二个SCK/BCLK上升沿有效。

WS时钟低电平为左声道,高电平为右声道。

也就是说不管I2S的信号有多少有效数据,数据的最高位都是出现在WCLK(LRCK)变化后的第2个BCLK(SCLK)的脉冲处。

3.2.2 左对齐模式

I2S时序及音频驱动_第4张图片
左对齐格式的左右声道数据的MSB在WS边沿变化后SCK/BCLK的第一个上升沿有效。

3.2.3 右对齐模式

I2S时序及音频驱动_第5张图片
WS 有效区间内右边从 WS 变换后的第一个上升沿

3.2.4 协议格式

协议格式分为 I2S、左对齐(Left)和右对齐(Right)三种格式

I2S 解码方式:数据的最高位总出现在 WS 变换后的第二个脉冲(上升沿,在末尾会 多解出 1 到 2 个 bit,但不会与后面信号的重合);

left 解码方式:WS 有效区间内左边从 WS 变换后的第一个上升沿;

right 解码方式:WS 有效区间内右边从 WS 变换后的第一个上升沿
I2S时序及音频驱动_第6张图片

4. 音频驱动

4.1 OSS音频设备驱动

4.2 ALSA音频设备驱动

4.3 总结

音频设备接口包括 PCM、IIS 和 AC97 等,分别适用于不同的应用场合。针对音频设备,Linux 内核中
包含了两类音频设备驱动框架,OSS 和 ALSA,前者包含 dsp 和 mixer 字符设备接口,在用户空间的编程
中,完全使用文件操作;后者以 card 和组件(PCM、mixer 等)为主线,在用户空间的编程中不使用文件
接口而使用 alsalib。
在音频设备驱动中,几乎必须使用 DMA,而 DMA 的缓冲区会被分割成一个一个的段,每次 DMA
操作进行其中的一段。OSS 驱动的阻塞读写具有流控能力,在用户空间不需要进行流量方面的定时工
作,但是它需要及时地写(播放)和读(录音),以免出现缓冲区的 underflow 或 overflow。

5. 驱动调试

1.硬件上确定i2c总线
2.确定i2c总线是否能够正常读写
该总线下的其他i2c设备是否能够正常读写
3.确定该i2c设备的从地址

常见错误
地址错误 地址左移
频率错误 延时错误
硬件错误 开漏输出 上拉电阻

未完待续……

参考文章:
https://blog.csdn.net/dop102/article/details/124102743
https://blog.csdn.net/Chuangke_Andy/article/details/122494425
https://blog.csdn.net/weixin_59145105/article/details/119137204

你可能感兴趣的:(Linux驱动,音视频,嵌入式,linux)