I2S时序及音频驱动
1.音频采样率及采样精度
1.1采样频率
采样的过程就是将通常的模拟音频信号的电信号转换成二进制码 0 和 1 的过程,这些 0 和 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耳机放大器,无噪音,无阻塞选项
立体增强
低音和高音
各种模拟输出混合和增益
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标准时序
左右通道的数据MSB是在WS变化后第二个SCK/BCLK上升沿有效。
WS时钟低电平为左声道,高电平为右声道。
也就是说不管I2S的信号有多少有效数据,数据的最高位都是出现在WCLK(LRCK)变化后的第2个BCLK(SCLK)的脉冲处。
3.2.2 左对齐模式
左对齐格式的左右声道数据的MSB在WS边沿变化后SCK/BCLK的第一个上升沿有效。
3.2.3 右对齐模式
WS 有效区间内右边从 WS 变换后的第一个上升沿
3.2.4 协议格式
协议格式分为 I2S、左对齐(Left)和右对齐(Right)三种格式
I2S 解码方式:数据的最高位总出现在 WS 变换后的第二个脉冲(上升沿,在末尾会 多解出 1 到 2 个 bit,但不会与后面信号的重合);
left 解码方式:WS 有效区间内左边从 WS 变换后的第一个上升沿;
right 解码方式:WS 有效区间内右边从 WS 变换后的第一个上升沿
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
I2S时序及音频驱动相关推荐
- ALSA-ASOC音频驱动框架简述
##ALSA-ASOC音频驱动框架简述 注意:本文只限于讲解ALSA-ASOC音频驱动框架,不深入到寄存器.时序等配置,文章有不足之处,日后逐渐完善补充 另外多谢两位前辈的博客,学到了很多,多谢. h ...
- Linux 音频驱动(二) ASoC音频驱动之Platform驱动
目录 1. 简介 2. 源码分析 2.1. CPU DAI 2.1.1. 数据结构struct snd_soc_dai_driver 2.1.2. 注册CPU DAI:snd_soc_register ...
- I2S传输PCM音频数据分析总结
1.前言 <I2S传输PCM音频数据分析总结>主要是介绍PCM音频数据是如何通过I2S进行传输的,主要是分成2个部分: PCM音频数据介绍 I2S协议介绍 本篇文章主要是以PCM音频数据来 ...
- linux 音频驱动的流程,Intel平台下Linux音频驱动流程分析
[软件框架] 在对要做的事情一无所知的时候,从全局看看系统的拓扑图对我们认识新事物有很大的帮助.Audio 部分的驱动程序框架如下图所示: 这幅图明显地分为 3 级. 上方蓝色系的 ALSA Kern ...
- Linux 音频驱动
Linux 音频驱动 硬件介绍 WM8960与IMX6ULL之间有两个通信接口:I2C和I2S 其中I2C用于配置WM8960 I2S用于音频数据传输 修改设备树文件 编写I2C子节点设备树 code ...
- Linux音频驱动开发概括
原址 1.嵌入式音频系统硬件连接 下图所示的嵌入式设备使用IIS将音频数据发送给编解码器.对编解码器的I/O寄存器的编程通过IIC总线进行. 2.音频体系结构-ALSA ALSA是Advanced L ...
- Linux 音频驱动(一) ASoC音频框架简介
目录 1. ALSA简介 2. ASoC音频驱动构成 3. PCM数据流 4. 数据结构简介 5. ASoC音频驱动注册流程 1. ALSA简介 Native ALSA Application:tin ...
- 一.音频驱动-音频基础知识
在这里记录一下做音频驱动时遇到的音频基础知识 数模转换 我们能听到的音频,都是声波.声波是声音的传播形式,发出声音的物体称为声源.声波是一种机械波,由声源振动产生,声波传播的空间就称为声场.人耳可以听 ...
- Linux 音频驱动(四) ASoC音频驱动之Machine驱动
目录 1. 基本介绍 2. 源码分析 2.1. Machine数据结构 struct snd_soc_dai_link 3. 声卡 3.1. 数据结构struct snd_soc_card 3.2. ...
- Linux 音频驱动(五) ALSA音频驱动之PCM逻辑设备
目录 1. 前言 2. PCM逻辑设备 2.1. 创建 PCM逻辑设备: 2.2. PCM逻辑设备文件操作函数集:snd_pcm_f_ops[] 2.3. Open PCM逻辑设备 2.4. Writ ...
最新文章
- qt vs 不出来dos窗口_VS嵌入QT后,建立QT工程后printf和cout无效,无法产生控制台应用程序窗口,需设置工程属性...
- 原生html小游戏,原生JS实现别踩白块小游戏(一)
- 新书推荐 |《5G安全技术与标准》
- 【数据操作】优化SQL server性能 之 索引 (转上)
- python datetime datetime
- 如何成功清理重建CloudStack环境
- RK3288_Android7.1增加自定义的红外遥控按键流程记录
- linux准备环境,组建自己的Linux-01准备环境
- class with pointer
- 华为交换机debug icmp数据包
- Android 系统分析工具:Systrace
- qq红包裂变式引流?QQ群红包裂变吸粉引流
- word怎么根据点画曲线_word2010如何画直线,曲线,肘形连接符,曲线连接符,等多种直线和曲线类型...
- vm虚拟机搭建click house(单机)
- GokeAudio是一款简约小巧的开源安卓SIP软电话客户端
- shawn0102_播客:留下每年35万美元的工作以学习编码-Shawn Wang访谈
- #路由配置以及华为路由协议优先级
- python单词怎么写_python 写的查单词的脚本
- Java和go加密,解密,Base64失败
- 《数据结构》物联1131-1132同学链接