AudioCodec 使用指南
1. 模块介绍
1.1. 术语定义
术语 | 定义 |
---|---|
PCM | 脉冲编码调制 |
PDM | 脉冲密度调制 |
SDM | Sigma Delta Modulation |
DF | 抽值滤波器 |
IF | 插值滤波器 |
HDF | 高通滤波器 |
DVC | 数字音量控制器 |
DMICI/F | 数字MIC接口 |
1.2. 模块 简介
AudioCodec是一个内置在SOC内部的音频codec模块。该模块内部集成了ADC、DMIC音频输入和PWM音频 输出,经过数字信号的处理,实现音频信号的录入以及播放等功能。该模块还具有以下特性:
- 支持1路模拟音频输入
- 支持数字DMIC立体声输入
- 支持2路单端输出(立体声),或1路差分输出(单声道)
- 无DAC设计,输出采用PWM输出
- 输入和输出通路均支持数字音量控制
2. AudioCodec配置
2.1. 内核配置
按照ALSA的框架设计,AudioCodec的数据传输使用DMA方式,需要DMA-engine的支持,所以在menuconfig 中需要打开DMA-engine的驱动支持。
Device Drivers--->
[*] DMA Engine support--->
<*> Artinchip SoCs DMA support
在menuconfig中打开ALSA框架的支持,使能AIC的AudioCodec驱动
Device Drivers--->
<*> Sound card support--->
<*> Advanced Linux Sound Architecture--->
<*> ALSA for SoC audio support--->
<*> ArtInChip CODEC Support
2.2. DTS配置
2.2.1. d211配置
codec: codec@18610000 {
#sound-dai-cells = <0>;
compatible = "artinchip,aic-codec-v1.0";
reg = <0x18610000 0x400>;
interrupts = <GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&cmu CLK_CODEC>;
resets = <&rst RESET_CODEC>;
dmas = <&dma DMA_CODEC>, <&dma DMA_CODEC>;
dma-names = "rx", "tx";
};
codec-analog {
#sound-dai-cells = <0>;
compatible = "artinchip,codec-analog";
dmas = <&dma 15>, <&dma DMA_CODEC>;
dma-names = "rx", "tx";
};
xxx/board.dts中的配置
&codec {
pinctrl-names = "default";
pinctrl-0 = <&amic_pins>, <&dmic_pins_a>, <&spk_pins_b>;
pa-gpios = <&gpio_f 13 GPIO_ACTIVE_LOW>;
status = "okay";
};
根据实际的板级配置,设置pinctrl-0的值。
3. 调试指南
4. 测试指南
4.1. 测试环境
4.1.1. 硬件
- 测试板:带有DMIC的测试板
- PC:用于和测试板交互
- 串口线:连接测试板的调试串口
4.1.2. 软件
- PC端串口终端软件
- alsa-lib和alsa-utils第三方软件包
4.2. 创建声卡
AudioCodec是SOC内置的codec,所以在AudioCodec的驱动中,已直接创建声卡,不需要再单独编写machine驱动。在按照 AudioCodec配置 配置后,内核会创建出名aic-SoundCard的声卡,对此声卡进行操作即可。
4.3. 音频测试
4.3.1. 配置音频路径
AudioCodec的音频通路中,存在较多的开关,混音器,数字音量调节器,多路选择器等器件。所以在执行 播放或录音任务前,需要先配置音频路径,使音频数据可以正确流通。
4.3.1.1. 自动配置
在SDK的target/aic16xx/perxx/rootfs_overlay/var/lib/alsa目录下,存放有asound.state文件,该文件保存的是声卡各个控件的配置值。在内核启动时,会自动加载该文件, 完成音频通路的配置。
4.3.1.2. 手动配置¶
一般使用asound.state文件默认的配置即可。如果内核启动时的默认配置不满足需求,也可以通过amixer工具进行手动配置。amixer的使用方法如下:
amixer sset 'control-name-string' value
control-name-string和value的值可以通过以下方式查看:
修改设置示例:
修改完成后,可以通过alsactl命令将修改保存到asound.state文件中。在后续的上电过程中,内核会加载最新的修改配置。
alsactl -f /var/lib/alsa/asound.state store
4.3.2. 测试音频播放
aplay test.wav
4.3.3. 测试音频录音
arecord -d 10 -f dat -t wav test.wav
-d:指定录音时长,单位为秒
-f:指定录制的格式,dat表示16bit小端数据,48K采样率,立体声
-t:指定生成的文件格式,为wav文件
test.wav:生成的wav文件名
4.3.4. 调整播放音量
amixer sset 'AUDIO' 140
4.3.5. 调整DMIC录音音量
amixer sset 'DMICIN' 140
4.3.6. 调整AMIC录音音量
amixer sset 'ADC' 140
4.3.7. 调整PGA增益
amixer sset 'PGA Gain' 8