学习笔记 --- LINUX声卡设备UDA1341的控制原理

时间:2020-12-29 04:31:15

声卡与CPU的连接:

学习笔记 --- LINUX声卡设备UDA1341的控制原理

可以知道声卡与CPU之间有两组接口:

1 IIS 接口,专门传音频数据

2 控制 接口,传控制信号(调整音量,声道设置等),不同的声卡有不同的接口,UDA1341是L3接口,WM9876是IIC接口


声卡的采样:

学习笔记 --- LINUX声卡设备UDA1341的控制原理


可以知道录音的时候有如下概念:

1 采样频率

2 采样左声道还是右声道

3 采样通过ADC采集模拟信号转换成数字信号,ADC有一个转换精度

那么可以知道录音的文件大小和上面这几个相关了。

IIS总线如何传输音频:

学习笔记 --- LINUX声卡设备UDA1341的控制原理



播放:内存音频数据  -- IIS控制器 -- 声卡DA转换 -- 喇叭

录音:MIC -- 声卡AD转换 -- IIS控制器 -- 内存音频数据

这里IIS具体怎么控制的,先看UDA1341这个声卡的管脚:

学习笔记 --- LINUX声卡设备UDA1341的控制原理

IIS组连接的CPU IIS控制器管脚:

I2SSCLK   位时钟

I2SLRCK   左右声道音频数据切换

I2SSDI       音频数据输入

I2SSDO     音频数据输出

IIS控制器时序:

学习笔记 --- LINUX声卡设备UDA1341的控制原理

IIS控制器有两种格式传输,上面是过了一个位时钟再传,此时LRCK为低电平表示左声道,下面这种是立即传送,不需要等一个位时钟,此时LRCK为高电平表示左声道。

时序可以知道:

传送数据:位时钟一个时钟信号传送一位数据,那么16位精度就需要16个时钟才能完成一个通道的一个采样点数据的传送。

左右通道的数据切换:通过LRCK信号线。

S3C2440 IIS控制器最大只能有16位精度,所以如果外接声卡只有8位就只需要传送8位数据,另外8位写0,所以一个采样点数据的传送需要的位时钟的个数由控制器最大支持的精度所决定的,不足位补0。

学习笔记 --- LINUX声卡设备UDA1341的控制原理


IIS就是这样传送音频数据的,下面说下控制接口,这里的UDA1341是L3接口:

L3MODE   模式:低电平表示传送设备地址BIT【7-2】,和传送类型BIT【1-0】,高电平时表示数据

L3CLOCK   时钟,一个时钟传送一个位

L3DATA       数据,8BIT

学习笔记 --- LINUX声卡设备UDA1341的控制原理

传送地址的时序 :

学习笔记 --- LINUX声卡设备UDA1341的控制原理

传送数据的时序:

学习笔记 --- LINUX声卡设备UDA1341的控制原理

L3MODE为高电平时传送的数据,这个格式就是8位数据,很简单,再看L3MODE为低电平时传送的地址和传送类型,此时数据线上的格式:

BIT【7-2】 表示设备地址,这个设备地址类似于IIC从设备的地址,L3总线也可以挂很多设备,上面每个设备有自己的地址,这里说的UDA1341的设备地址为000101

BIT【1-0】 表示传送类型:这个类型就相当于要设置的寄存器的地址,只不过这里简化了,把他分成了两位来表示4个寄存器。发送完这个后,后面发送的数据就是寄存器的值。

这两个位对应设置些什么?

学习笔记 --- LINUX声卡设备UDA1341的控制原理

可以看出,只有三个寄存器,不同的寄存器设置不同的内容,详细参考UDA1341的文档:

学习笔记 --- LINUX声卡设备UDA1341的控制原理

设置好这些寄存器之后,就可以进行音频读写了。