一、前言

两周前接到任务,项目换了一个codec芯片,需要重新移植声卡驱动。

因为之前没有做过声卡驱动移植,所以对音频相关的知识都不怎么了解,为此,在网上搜索了很多资料。

写这篇博客,既是为了分享,也是记个笔记。

后续,我也会把这次移植声卡的前前后后分享出来。

二、音频相关

1、声音的数模转换

大学期间学习过数电模电的小伙伴应该对此概念不会陌生。

数模转换:数字信号与模拟信号之间的转换。

数字信号是在计算机内传输的信号(0/1);模拟信号则是通过一定介质传递的波,它可以由周期和振幅两个重要指标描述。

正常人可以听到的声音频率范围为 20Hz~20KHz。现实存在的声音是模拟量,这对声音保存和长距离传输造成很大的困难,一般的做法是把模拟量转成对应的数字量保存,在需要还原声音的地方再把数字量的转成模拟量。大致过程如下图所示:

图 - 声音的数模转换

模拟量转成数字量一般可以分为三个过程,分别为采样、量化、编码。举一个采正弦波信号的例子:

图 - 正弦波音频信号采样

图中正弦波就是源音频信号,一条条直线就是在进行等距采样。

直线之间的距离大小为t(周期),而t=1/fs(采样率),试想,fs越大,t就越小,那么采到的源音频信号是不是就越多,得到的声音是不是就越清晰。

每条直线长度则决定着该时刻源音频信号的量化值,该量化值有另外一个概念与之挂钩,就是量化位数。量化位数表示每个采样点用多少位表示数据范围,常用有 16bit、 24bit 或 32bit,位数越高最后还原得到的音质越好,数据量也会越大。

2、模数转换的三要素

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

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

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

3、模数转换后的数据量

声音数字化后的数据量计算公式为:

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

这里举个例子:对一个声音信号进行数字化处理,采样频率为16KHz,量化位数为16位,那么:

单声道的音频数据量为:16000 * 16 * 1 / 8 = 32000 字节/秒;

立体声的音频数据量为:16000 * 16 * 2 / 8 = 64000 字节/秒。

4、声卡

声卡是负责录音、播音和声音合成的一种多媒体板卡。其功能包括:

1、录制、编辑和回放数字音频文件;

2、控制和混合各声源的音量;

3、记录和回放时进行压缩和解压缩;

4、语音合成技术(朗读文本);

5、具有MIDI接口(乐器数字接口)。

声卡的芯片类型:

1、CODEC芯片(依赖CPU,价格便宜);

2、数字信号处理器DSP(不依赖CPU)。

三、I2S总线及其协议

1、I2S总线

I2S总线是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准,该总线专责于音频设备之间的数据传输,广泛用于各种多媒体系统。

特点:

①、支持全双工和半双工模式。

②、支持主从模式。

2、接口

I2S总线一般包含三根CLK时钟总线和多达四根的DATA总线。

①、MCLK

主时钟,系统时钟。

计算方法:freq(MCLK)=128/256/512 * fs。目前公司用的512 * fs。

fs为采样频率。

②、SCLK

串行时钟,也叫位时钟BCLK,对应数字音频的每一位数据,SCLK都有一个脉冲,

Freq(SCLK)=声道数*fs*采样位数。

③、字段选择信号WS

字段选择信号WS,也叫LRCLK,用于切换左右声道的数据。WS为0,表示正在传输的是左声道的数据;WS为1,表示正在传输的是右声道的数据。

Freq(WS)=fs。

④、串行数据SD

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

I2S在传输数据的时候,由高位(MSB)到低位(LSB)一次进行传输。

对于系统而言,能够产生SCLK和WS的信号端就是主设备,用MASTER表示。

3、I2S数据格式

I2S共有三种数据格式,左对齐(MSB)、右对齐(LSB)、I2S Philips标准。

对于所有数据格式和通信标准而言,始终会先发送最高有效位(MSB优先)。

发送端和接收端必须使用相同的数据格式,确保发送和接收的数据一致。

①、I2S Philips标准

使用LRCLK信号来指示当前正在发送的数据所属的声道,为0时表示左声道数据。LRCLK信号从当前声道数据的第一个位(MSB)之前的一个时钟开始有效。LRCLK信号在BCLK的下降沿变化。发送方在时钟信号BCLK的下降沿改变数据,接收方在时钟信号BCLK的上升沿读取数据。正如上文所说,LRCLK频率等于采样频率Fs,一个LRCLK周期(1/Fs)包括发送左声道和右声道数据。

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

②、左对齐(MSB)

在LRCLK发生翻转的同时开始传输数据。该标准较少使用。注意此时LRCLK为1时,传输的是左声道数据,这刚好与I2S Philips标准相反。左对齐(MSB)标准时序图如下所示:

③、右对齐(LSB)

声音数据LSB传输完成的同时,LRCLK完成第二次翻转(刚好是LSB和LRCLK是右对齐的,所以称为右对齐标准)。注意此时LRCLK为1时,传输的是左声道数据,这刚好与I2S Philips标准相反。右对齐(LSB)标准时序图如下所示:

音频总线之I2S总线介绍及相关协议相关推荐

  1. FTP主动被动介绍,相关协议整理

    1.什么是FTP协议: FTP(File Transfer Protocol,文件传输协议) 是  TCP/IP 协议组中的协议之一.FTP协议包括两个组成部分,其一为 FTP服务器,其二为 FTP客 ...

  2. I2S音频总线学习(二)I2S总线协议

    I2S音频总线学习(二)I2S总线协议 一.I2S总线概述 音响数据的采集.处理和传输是多媒体技术的重要组成部分.众多的数字音频系统已经进入消费市场,例如数字音频录音带.数字声音处理器.对于设备和生产 ...

  3. I2S总线学习:I2S数据格式

    (一)数字音频技术 一.声音的基本概念 声音是通过一定介质传播的连续的波. 图1 声波 重要指标: 振幅:音量的大小 周期:重复出现的时间间隔 频率:指信号每秒钟变化的次数 声音按频率分类: 图2 声 ...

  4. Linux音频驱动之四:I2S 总线操作接口

    本文是基于mini2440开发板Linux版本号是linux-2.6.32.2的学习笔记 一. I2S driver 的probe函数 映射虚拟内存,IIS寄存器的起始地址是:0x55000000 s ...

  5. python 开发板 i2s_[Craftor原创] I2S总线接口设计(Verilog)

    本文有Craftor原创,转载请保留出处. I2S是数字音频的接口,这里不用多说,请读者自己查阅相关资料. 本文中要设计的是FPGA与数字音频芯片的I2S接口时序.简单点说,就是通过FPGA向音频芯片 ...

  6. 物理层、数据链路层间的PHY、MAC、MII、RMII、SMII、GMII、RGMII以及I2S总线、SFP接口

    物理层与数据链路层间的PHY.MAC.MII.RMII.SMII.GMII.RGMII 一.PHY(Physical Layer,物理层) 二.MAC(Media Access Control.媒体访 ...

  7. 从0学起的esp-idf之旅——i2s总线理解与运用

    i2s总线理解与运用 I2S总线基础概念 I2S概念 PCM音频数据 转换成PCM格式的三个参数 采样频率(声音周期量化) 采样位数(声音的幅度量化) 声道数(单声道,立体声) I2S总线通讯方式 I ...

  8. 以太网扫盲(一)各种网络总线 mii总线,mdio总线介绍

    本文主要介绍以太网的MAC(Media Access Control,即媒体访问控制子层协议)和PHY(物理层)之间的MII(Media Independent Interface ,媒体独立接口), ...

  9. 【计算机原理与接口技术(UNIX)⑬】——总线概述【总线与总线标准、总线结构、ISA、PCI、IDE】

    ✅ 通过对 [计算机与UNIX汇编原理 ① ~ ⑫]的学习,我们已经大致掌握了汇编程序设计的相关知识 接下来,我将其分栏名改为 [计算机原理与接口技术(UNIX) ],重点将放在 "计算机原 ...

  10. 航天总线测试系统软件,总线仿真测试平台软件

    产品介绍: FZ-BEST是一款综合了ARINC664.FC-AE.ARINC818.ARINC429.1553B等总线仿真测试平台,主要面向航空/航天.车辆以及船舶等应用领域,提供协议分析.总线仿真 ...

最新文章

  1. android values-v21 style 报错,Android 4.4 以上实现透明导航栏和状态栏 Translucent system bar...
  2. Python Qt GUI设计:QPrinter打印图片类(基础篇—21)
  3. POJ-1837 Balance
  4. 『计算机视觉』经典RCNN_其一:从RCNN到Faster-RCNN
  5. LUA upvalue使用陷阱一例
  6. windows中 修改某种文件图标 的方法 (备忘)
  7. 【朝夕技术专刊】Core3.1WebApi_Filter-Authorize详解
  8. xunit-ICollectionFixture
  9. 滴滴试行“选择路线”功能 乘客可自主选择行驶路线
  10. cocos2d-x 是男人就下100层 附源码
  11. activemq后台管理 看topic消息_「Java」 - SpringBoot amp; ActiveMQ
  12. 在苹果 Mac上接收和暂停或停止接收通知操作方法?
  13. Corel Painter 2022 for Mac(初学者可驾驭的绘画软件)
  14. TFS2010物理迁移workspace恢复
  15. 解析数论导轮中的数学实验(python)
  16. 如何使用python游戏开发模块—pygame?
  17. ​Linux 系统 tar 文件压缩打包命令
  18. 前端:一篇彻底搞懂vuex中dispatch与commit的使用及差异
  19. gcc与cmake、qmake与make、ninja
  20. 70句计算机英语,爱英优选:70句成人英语日常口语大全

热门文章

  1. 多线程抓取链家网数据
  2. HTML5+CSS3 Pink老师课后作业——小米logo过渡切换的实现
  3. cboard企业版源码_数据可视化BI平台——CBoard的部署与使用(笔记整理)
  4. Mac adobe PS、AI、PR、AN安装包
  5. 禁忌搜索算法代码注释
  6. 初级程序员面试题总结(一):
  7. 如何测试服务器端口是否能够访问(使用telnet命令)
  8. IC卡防批量复制破解 Mifare卡一卡一密方案说明 门禁卡校园卡水卡会员卡防破解方案
  9. 鸢尾花数据集的可视化
  10. caffe face 实现人脸相似度识别 c++版本