Linux声卡驱动

了解、学习Linux声卡驱动,并在Tiny4412上实现声音的播放和录制。

1.声卡基础

1.1 基本概念

记得是初中还是高中物理,里面说过声音是由物体振动产生,然后通过空气传播到耳朵里。
把耳朵换成咪头,声音振动咪头,改变了咪头两端的电压,ADC再采集电压,就记录了音频数据;反之,将记录的数据通过DAC转成电压,通过运放放大,就使喇叭振动就产生了声音。
这整个过程,涉及声音质量的参数有三个:

  • 采样频率:就是单位时间内ADC采集的次数,一般是8kHz~96kHz;
  • 转换精度:就是每次ADC采集或者DAC转换的精度。一般有8bit、16bit、24bit;
  • 通道数:就是单声道、双声道;

在Linux声卡驱动的发展中,最开始使用的声卡驱动框架是OSS(Open Sound System)。
从2.6版本开始,ALSA(Advanced Linux Sound Architecture)成为Linux内核中默认的标准音频驱动程序集,OSS则被标记为废弃。
OSS和ALSA的主要区别:

  • OSS:提供基于ioctl等原始编程接口访问设备;
  • ALSA:除了提供基于ioctl等原始编程接口,还专门为简化应用程序的编写提供了相应的函数库,相对OSS更加方便;

后面编写的驱动,将采用ALSA框架。

1.2音频编解码芯片

一般来说,大多数SOC都不包含音频的转换,可能是因为功耗、模数干扰等考虑,因此大多数都是外接了一个音频编解码芯片(Codec)。
音频文件从Flash加载到RAM中,再由DMA将其通过I2S发送给Codec,再由Codec的DAC变成模拟信号,驱动功放使喇叭播放声音;同时,SOC通过I2C(有些Codec不是I2C,而是其它的接口)设置Codec的寄存器,调整声音大小等。

因此,整个声卡框架涉及的驱动可能有SOC的DMA、I2S、I2C以及Codec驱动。

2.硬件接口

Tiny4412的声卡部分原理图如下,所采用的codec芯片为WM8960,该电路大致可分为四部分:

① IIS接口,负责Exynos4412和WM8960之间的数据传输

FunctionSOCCodecNote
DateXi2sCDCLK0MCLK系统时钟
Xi2sSCLK0BCLK数据时钟
Xi2sLRCK0DACLRC左右声道切换
Xi2sSDO0_0DATDAT数据输出(播放)
Xi2sSDI0ADCDAT数据输入(录音)

 
② I2C接口,负责Exynos4412对WM8960寄存器的配置

FunctionSOCCodecNote
ControlXi2cSCL0SCLKI2C时钟
Xi2cSDA0SDINI2C数据

③ 录音
采用咪头和耳机接口进行录音;

④ 播放
采用耳机接口播放音频,另外还有一个耳机插入检测Earphone_detect

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一口Linux

众筹植发

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值