简介:
Alsa是linux声卡的一种驱动框架,类似的还有oss, 简单的说,声卡就是一块外接硬件,用来播放和录音的设备,将处理后的数据通过iis和mcu进行交互,因此,声卡需要2个部分共同作用,即mcu侧和codec侧。典型的音频设计是: 一块电路板上一颗CPU的I2S接口外挂一颗Codec芯片, Codec在外接耳机或功放等. 如下图所示
以播放为例, 在这样一个硬件结构下, 涉及到几个模块:
DMA : 负责把用户空间的音频数据搬移至I2S的FIFO.
I2S : 负责以某个采样频率、采样深度、通道数发送音频数据, 也叫dai (Digital Audio Interface).
AFIx : 负责以某个采样频率、采样深度、通道数接收音频数据, 也称作dai.
DAC : 并把数据通过DAC转换后送给耳机等播放.
播放音频的简单流程:
音频文件数据==>DMA==> I2S (按照某种采样 单双通道等发送)==>AFIx (按照某种采样 单双通道等接受)==>DAC (数模转换)==>音频输出设备
那么,要使整个功能有效,即我们需要实现platform和codec的驱动,linux驱动还是采用通用的做法来解耦合,即分别实现platform 配置mcu侧的i2s和dma的功能,codec实现codec侧的配置和处理功能。但是由于模块化的关系,每个部分的驱动并非一家公司所写