前言
今天学习韦老师的驱动视频,写到了IIS协议相关的内容,虽然目前工作中没有直接用到,但是也做个记录吧,万一以后用到,也方便快速回忆。下面的章节内容大概分为:
(1)IIS协议介绍(参考链接:https://blog.csdn.net/q2519008/article/details/80413695)
(2)IIS是音频数据传输的协议标准,只负责传输声音数据,控制数据传输的接口却有很多种,比如我们这次要讲的UDA1341声卡的L3控制接口,一般GPIO引脚来做控制(参考链接:https://blog.csdn.net/fight_onlyfor_you/article/details/69382526)
正文
IIS协议介绍
I2S(Inter—IC Sound)总线, 又称 集成电路内置音频总线,是数字音频设备之间的音频数据传输而制定的一种总线标准,该总线专门用于音频设备之间的数据传输,广泛应用于各种多媒体系统。
我们先来看一下I2S的时序图:
我们可以看出来,I2S主要有3种信号:
(1)LRCK:控制当前传输的是左声道还是右声道数据,上图是电平为低代表左声道, 电平为高代表右声道
(2)SCLK:每一个时钟传输1bit的数据
(3)SD:数据脉冲,从上图可以看出来,在SCLK开始的第一个时钟周期,并没有传输数据,这是I2S的标准格式,另外还有一种MSB格式,就是从第一个SCLK时钟就开始传输数据,如下图所示:
下面我们再看一下I2S的硬件接口:
硬件原理图和我上面提到的3种信号有点区别,SD信号分为了SDI(接收数据)和SDO(发送数据)。另外还有一条CDCLK信号,这个是芯片的系统时钟线。
假如内存中存有一个WAV格式的音频文件,那么他是怎么准守I2S格式进行输出的呢?
上图中的每个声道数据只有8位(当然也可以是16或者24位的数据,理论上数据位越多代表的精度越高,声音的失真也就更小了),但是一个声道是16个SCLK时钟,所以前8位是数据,后8位用0填充。当然了,也可以设置为每个声道是8个SCLK时钟。
UDA1314的L3控制接口
上面一小节讲到的I2S协议只是用来传输音频数据的,但是在电子设备中我们是可以控制播放的是左声道还是右声道,又或者调节音量,这些控制信息应该还要有一些其它的接口来完成。这就是这一小节要讲的内容了。
现在有很多种控制接口了,比如WM8976用的是I2C接口或者自定义的用3根线做的接口;还有我们接下来要讲的UDA1341用到的L3接口(和前面的3线接口不一样)。
我们先看一下L3接口的硬件原理图:
上图可以看出来,L3接口一共用到3条线:
(1)L3MODE
这个是控制当前处于什么模式。为0时,是地址模式(address mode);为1时,是数据模式(data transfer mode)
(2)L3CLOCK
每个时钟传输一位数据
(3)L3DATA
当L3MODE=1时,L3DATA传输的是数据。
当L3MODE=0时,L3DATA传输的是地址。
上图是从UDA1341芯片手册截出来的图,我们可以看到地址数据一共有8位,其中,bit7~2这6位表示地址,bit1~.0表示传输的类型,也就是指明接下来所传输内容是什么类型的,而传输类型有以下4种:
1)00:DATA0 控制音量,或者访问扩展的地址。自动放大控制(AGC)、MIC的灵敏度控制等。具体怎么控制不同的功能,可以参考下图:
2)01:DATA1 回读一些信息。(即L3接口可以发出一些数据也可以读回一些数据)。
3)10:STATUS 状态信息,复位,时钟、数据输入格式(数据位宽)等。更具体的信息可以参考下表:
bit7不同的值,其它几位就有不用的含义。比如我们看一下代表输入数据格式的IF2 IF1 IF0:
4)11:保留,未使用
下面“盗用”别人的图,能更加直观的清楚上面所讲的内容:
结语
目前项目中还没遇到音频驱动的内容,就先了解一下协议和控制接口的内容,后续有相关的项目可以继续补充完善。