介绍Tina平台音频模块的使用方法。
Allwinner软件平台Tina。
Allwinner 硬件平台R6, R7s, R11, R16, R18, R30, R58, R328, R332, R333, R311, MR133, T7, R329, MR813, R818, R818B, R528, H133, V853, F133。
Tina平台下进行音频模块开发的工程师。
术语 | 解释说明 |
---|---|
ALSA | Advanced Linux Sound Architecture |
DMA | 直接内存存取,指数据不经cpu,直接在设备和内存,内存和内存,设备和设备之间传输 |
ASoC | ALSA System on Chip |
样本长度sample | 样本是记录音频数据最基本的单位,常使用 16 位 |
通道数channel | 该参数为 1 表示单声道, 2 则是立体声 |
帧frame | 帧记录了一个声音单元,其长度为样本长度与通道数的乘积 |
采样率rate | 每秒钟采样次数,该次数是针对帧而言 |
周期period | 音频设备一次处理所需要的帧数,对于音频设备的数据访问以及音频数据的存储,都是以此为单位 |
交错模式interleaved | 是一种音频数据的记录模式,在交错模式下,数据以连续帧的形式存放,即首先记录完帧1 的左声道样本和右声道样本(假设为立体声格式),再开始帧2 的记录,而在非交错模式下,首先记录的是一个周期内所有帧的左声道样本,再记录右声道样本,数据是以连续通道的方式存储。不过多数情况下,我们只需要使用交错模式就可以了 |
AudioCodec | 芯片内置音频接口 |
Daudio | 数字音频接口,可配置成I2S/PCM 标准音频接口 |
Dmic | 数字麦接口 |
MAD | Mic Activity Detector, 语音能量检测模块 |
AGC | Automatic Gain Control |
DRC | Dynamic Range Control |
Linux中的音频子系统采用ALSA架构实现。ALSA目前已经成为了Linux的主流音频体系结构。在内核设备驱动层,ALSA提供了alsa-driver,同时在应用层,ALSA为我们提供了alsa-lib,应用程序只要调用alsa-lib提供的API,即可以完成对底层音频硬件的控制。
Tina SDK对各个平台的音频设备驱动均采用ASoC架构实现。ASoC是建立在标准alsa驱动层上,为了更好地支持嵌入式处理器和移动设备中的音频codec的一套软件体系,ASoC将音频系统分为 3 部分:Codec,Platform和Machine。
Codec驱动
ASoC中的一个重要设计原则就是要求Codec驱动是平台无关的,它包含了一些音频的控件 (Controls),音频接口,DAMP(动态音频电源管理)的定义和某些Codec IO功能。为了保证 硬件无关性,任何特定于平台和机器的代码都要移到Platform和Machine驱动中。 所有的Codec驱动都要提供以下特性:
Platform驱动
它包含了该SoC平台的音频DMA和音频接口的配置和控制(I2S,PCM,AC97等等); 一般不包含与板子或codec相关的代码。
Machine驱动单独的Platform和Codec驱动是不能工作的,它必须由Machine驱动把它们结合在一起才能完成整个设备的音频处理工作。
我们提供的音频接口有:
不同芯片平台的音频接口资源会有差异;不同版本的内核,对应的ALSA驱动也有所不同;下面会对各个芯片作详细介绍。
R6包含 2 个音频模块,分别是内置audiocodec以及daudio0。
R6中, 2 个音频模块的时钟源均来自pll_audio。
pll_audio可以输出24.576M或者22.5792M的时钟,分别支持48k系列,44.1k系列的播放录音。
硬件特性
sndcodec配置,即machine驱动的相关配置。
sndcodec配置 | sndcodec配置说明 |
---|---|
sndcodec_used | 是否使用sndcodec驱动。 0 :不使用; 1 :使用 |
cpudai配置,即platform驱动的相关配置。
cpudai配置 | cpudai配置说明 |
---|---|
cpudai_used 是否使用cpudai驱动。 | 0 :不使用; 1 :使用 |
codec配置,即内置audiocodec驱动的相关配置。
codec配置 | codec配置说明 |
---|---|
codec_used | 是否使用codec驱动。 0 :不使用; 1 :使用 |
headphonevol | headphone volume,可设定范围0~0x3f, 0表示mute, 163表示-62dB0dB, 1dB/step |
micgain | mic增益,可设定范围0~0x7, 0:0dB, 17:1533dB, 3dB/step,一般设置0x4,即24dB.如果作为aec回路,则需要设置为0dB |
pa_sleep_time | 操作PA之后的延时时间(用来避免pop音),单位ms |
gpio-spk | PA使能引脚 |
gpio_shdn | PA引脚使能方式。0:低电平有效; 1 :高电平有效 |
说明
R6平台的audiocodec驱动会在播歌的时候自动设置相关通路,默认audio map:
录音功能则根据需要操作对应空间使能通路:
R6相关控件如下表:
控件名称 | 功能 | 数值 |
---|---|---|
ADC INPUT GAIN control | ADC增益 | 0–7,表示-4.5–6dB |
ADC MIC Boost AMP | enMIC Boost AMP使能 | 0:关闭; 1:开启 |
ADC MIC Boost AMP | gain control MIC增益 | 0–7, 0:0dB, 1~7:15–33dB |
ADC PA speed select | PA速度选择 0:normal; 1:fast | |
ADC mixer mute for FML | ADC Mixer设置,使能FML通路 | 0:关闭; 1:开启 |
ADC mixer mute for FMR | ADC Mixer设置,使能FMR通路 | 0:关闭; 1:开启 |
ADC mixer mute for left output | ADC Mixer设置,使能left output Mixer通路 | 0:关闭; 1:开启 |
ADC mixer mute for linein | ADC Mixer设置,使能linein通路 | 0:关闭; 1:开启 |
ADC mixer mute for mic | ADC Mixer设置,使能mic通路 | 0:关闭; 1:开启 |
ADC mixer mute for right output | ADC Mixer设置,使能right output Mixer通路 | |
LINEIN GAIN control | linein到output mixer的增益 | 0–7, 0~7:0–14dB,2dB/step |
MICIN GAIN control | MIC到outpu mixer的增益 0–7,表示-4.5–6dB | |
dac digital volume | DAC数字音量 063,表示0-73.08dB,-1.16dB/step | |
head phone volume | headphone音量 | 0 表示mute, 163表示-62dB0dB, -1dB/step |
录音通路设置举例:
硬件特性
snddaudio0配置,即daudio0 machine驱动的相关配置
snddaudio配置 | snddaudio配置说明 |
---|---|
snddaudio0_used | 是否使用snddaudio驱动。 0 :不使用; 1 :使用 |
over_sample_rate | 支持128fs/192fs/256fs/384fs/512fs/768fs |
daudio0配置,即daudio0 platform驱动的相关配置
snddaudio配置 | snddaudio配置说明 |
---|---|
daudio0_used | 是否使用daudio驱动。 0 :不使用; 1 :使用 |
word_select_size | 支持16bits/20bits/24bits/32bits |
pcm_sync_period | 16/32/64/128/256 |
snddaudio配置 | snddaudio配置说明 |
---|---|
pcm_lsb_first | 0: msb first; 1: lsb first |
over_sample_rate | 支持128fs/192fs/256fs/384fs/512fs/768fs |
slot_width_select | 16bits/20bits/24bits/32bits |
pcm_sync_type | 0: long frame sync; 1: short frame sync |
pcm_start_slot | 0: 1st slot; 1: 2nd slot; 2: 3th slot; 3:4th slot |
tdm_config | 0:pcm 1:i2s |
R6标案使用的AC101作双声道录音,audiocodec则录制回路作AEC下面对R6如何配置使 用AC101作简单介绍
R6通过TWI1控制AC101,而I2S0用于音频数据的传输
TWI部分配置,可通过dts进行配置:
I2S部分配置可以通过dts配置,也可以通过sys_config覆盖dts的配置
i2s相关格式需要根据AC101 spec进行配置
而snddaudio0中,注意codec的名称,需要与实际AC101的dev name相匹配,而codec-dai名称则与AC101驱动中设置的dai name相匹配
该章节主要介绍在标案上进行播歌,录音的测试命令。
如《R6 AudioCodec数据通路》章节所说,驱动代码中已固定配置了播放通路进入系统后直接通过aplay工具进行播放即可,如:
可通过下面命令调节硬件上的模拟音量:
标案使用AC101进行双声道录音录音前需要配置AC101的音频通路,SDK默认在启动时会进行设置,相关配置脚本在:
可以直接通过arecord命令进行录音:
R7s包含 2 个音频模块,分别是内置AudioCodec以及Daudio0。
R7s中, 2 个音频模块的时钟源均来自pll_audio。
pll_audio可以输出24.576M或者22.5792M的时钟,分别支持48k系列,44.1k系列的播放录音。
硬件特性
codec配置 | codec配置说明 |
---|---|
headphone_vol | headphone volume,可设定范围0~0x3f, 0表示mute, 163表示-62dB0dB, 1dB/step |
audio_pa_ctrl | PA使能引脚 |
adcagc_used | 1:use adcagc 0:no use |
adcdrc_used | 1:use adcdrc 0:no use |
dacdrc_used | 1:use dacdrc 0:no use |
adchpf_used | 1:use adchpf 0:no use |
dachpf_used | 1:use dachpf 0:no use |
控件名称 | 功能 | 数值 |
---|---|---|
Lineout volume | lineout音量设置 | 0–31,表示-43.5–0dB |
ADC input gain control | ADC增益 0–7,表示-4.5–6dB | |
HP_L Mux HP_L | Mux设置 | 0:DACL HPL Switch; 1:MIXER_L Switch |
HP_R Mux HP_R | Mux设置 | 0:DACR HPR Switch; 1:MIXER_R Switch |
LADC input Mixer MIC1 boost Switch | LADC input Mixer设置,使能MIC1通路 | 0:关闭; 1:开启 |
LADC input Mixer MIC2 boost Switch | LADC input Mixer设置,使能MIC2通路 | 0:关闭; 1:开启 |
LADC input Mixer l_output mixer Switch | LADC input Mixer设置,使能l_output通路 | 0:关闭; 1:开启 |
LADC input Mixer r_output mixer Switch | LADC input Mixer设置,使能r_output通路 | 0:关闭; 1:开启 |
Left Output Mixer DACL Switch | Left Output Mixer设置,使能DACL通路 | 0:关闭; 1:开启 |
Left Output Mixer DACR Switch | Left Output Mixer设置,使能DACR通路 | 0:关闭; 1:开启 |
Left Output Mixer MIC1Booststage Switch | Left Output Mixer设置,使能MIC1通路 | 0:关闭; 1:开启 |
Left Output Mixer MIC2Booststage Switch | Left Output Mixer设置,使能MIC2通路 | 0:关闭; 1:开启 |
MIC1 boost AMP gain control | MIC1增益 | 0–7, 0:0dB,1~7:24–42dB,3dB/step |
MIC1_G boost stageoutput mixer control | MIC1 to L or R output Mixer增益 | 0–7,表示-4.5–6dB |
MIC2 SRC | MIC2 SRC设置 | 0:MIC3; 1:MIC2 |
MIC2 boost AMP gain control | MIC2增益 | 0–7, 0:0dB,1~7:24–42dB,3dB/step |
MIC2_G boost stage output mixer control | MIC2 to L or R output Mixer增益 | 0–7,表示-4.5–6dB |
RADC input Mixer MIC1 boost Switch | RADC input Mixer设置,使能MIC1通路 | 0:关闭; 1:开启 |
RADC input Mixer MIC2 boost Switch | RADC input Mixer设置,使能MIC2通路 | 0:关闭; 1:开启 |
RADC input Mixer l_output mixer Switch | RADC input Mixer设置,使能l_output通路 | 0:关闭; 1:开启 |
RADC input Mixer r_output mixer Switch | RADC input Mixer设置,使能r_output通路 | 0:关闭; 1:开启 |
Right Output Mixer DACL Switch | Right Output Mixer设置,使能DACL通路 | 0:关闭; 1:开启 |
Right Output Mixer DACR Switch | Right Output Mixer设置,使能DACR通路 | 0:关闭; 1:开启 |
Right Output Mixer MIC1Booststage Switch | Right Output Mixer设置, 使能MIC1通路 | 0:关闭; 1:开启 |
Right Output Mixer MIC2Booststage Switch | Right Output Mixer设置,使能MIC2通路 | 0:关闭; 1:开启 |
SPK_L Mux | SPK_L Mux设置 | 0:MIXER_L Switch; 1:MIXR+MIXL |
SPK_R Mux | SPK_R Mux设置 | 0:MIXER_L Switch; 1:MIXR+MIXL |
digital volume | 数字音量设置 | 0–63,表示-73.08–0dB |
headphone volume | headphone音量设置 | 0–63,0表示mute; 1~63表示-62dB–0dB |
通路设置举例:
硬件特性
tdm0配置 | tdm0配置说明 |
---|---|
daudio_master | 1: SND_SOC_DAIFMT_CBM_CFM(codec clk & FRM master),即daudio接口作为slave, codec作为master2: SND_SOC_DAIFMT_CBS_CFM(codec clk slave & FRMmaster),一般不用3: SND_SOC_DAIFMT_CBM_CFS(codec clk master & frameslave),一般不用4: SND_SOC_DAIFMT_CBS_CFS(codec clk & FRM slave),即daudio接口作为master, codec作为slave |
daudio_select | 0: pcm mode; 1: i2s mode |
audio_format | 1: SND_SOC_DAIFMT_I2S(standard i2s format)2: SND_SOC_DAIFMT_RIGHT_J(right justfied format)3: SND_SOC_DAIFMT_LEFT_J(left justfied format)4: SND_SOC_DAIFMT_DSP_A(pcm. MSB is available on 2ndBCLK rising edge after LRC rising edge)5: SND_SOC_DAIFMT_DSP_B(pcm. MSB is available on 1ndBCLK rising edge after LRC rising edge) |
signal_inversion | 1: SND_SOC_DAIFMT_NB_NF(normal bit clock + frame)2: SND_SOC_DAIFMT_NB_IF(normal BCLK + inv FRM)3: SND_SOC_DAIFMT_IB_NF(invert BCLK + nor FRM)4: SND_SOC_DAIFMT_IB_IF(invert BCLK + FRM) |
sample_resolution | 采样精度,16bit, 24bit,32bit |
slot_width_select | 支持8bit, 16bit, 32bit宽度 |
pcm_lrck_period | 可配置16/32/64/128/256个bclk |
pcm_lrckr_period | 可配置16/32/64/128/256个bclk |
msb_lsb_first | 0: msb first; 1: lsb first |
sign_extend | 0: zero pending; 1: sign extend |
tx_data_mode | 0: 16bit linear PCM;1: reserved;2: 8bit u-law;3: 8bit a-law |
rx_data_mode | 0: 16bit linear PCM;1: reserved;2: 8bit u-law;3: 8bit a-law |
i2s_bclk | i2s_bclk引脚 |
i2s_lrclk | i2s_lrclk引脚 |
i2s_dout0 | i2s_dout引脚 |
i2s_din | i2s_din引脚 |
该章节主要介绍在标案上进行播歌,录音的测试命令。
可通过下面命令调节硬件上的模拟音量:
表示下使用audiocodec进行MIC1,MIC2录音。
R11包含 2 个音频模块,分别是内置AudioCodec以及Daudio0。
R11中, 2 个音频模块的时钟源均来自pll_audio。
pll_audio可以输出24.576M或者22.5792M的时钟,分别支持48k系列,44.1k系列的播放录音。
硬件特性
audio0配置 | audio0配置说明 |
---|---|
headphone_vol | headphone volume,可设定范围0~0x3f, 0表示mute,163表示-62dB0dB, 1dB/step |
lineout_vol | lineout volume,可设定范围0~0x1f, 0或者 1 表示mute,231表示-43.5dB0dB, 1.5dB/step |
audio_pa_ctrl | PA使能引脚 |
audio_pa_active_level | 1:high level active; 0:low level active |
adcagc_used | 1:use adcagc 0:no use |
adcdrc_used | 1:use adcdrc 0:no use |
dacdrc_used | 1:use dacdrc 0:no use |
adchpf_used | 1:use adchpf 0:no use |
dachpf_used | 1:use dachpf 0:no use |
控件名称 | 功能 | 数值 |
---|---|---|
Lineout volume | lineout 音量设置0–31, 表示-43.5–0dB | |
ADC input gain control | ADC 增益0–7, 表示-4.5–6dB | |
LADC input Mixer MIC1 boost Switch | LADC input Mixer 设置,使能MIC 通路 0: 关闭; 1: 开启 | |
Left Output Mixer DACL Switch | Left Output Mixer 设置,使能DACL 通路 0: 关闭; 1: 开启 | |
Left Output Mixer DACR Switch | Left Output Mixer 设置,使能DACR 通路 0: 关闭; 1: 开启 | |
Left Output Mixer MIC1Booststage Switch | Left Output Mixer 设置,使能MIC1 通路 0: 关闭; 1: 开启 | |
MIC1 boost AMP gain control | MIC1 增益0–7, 0:0dB, 1~7:24–42dB,3dB/step | |
MIC1_G boost stage output mixer control | MIC1 to L or R output Mixer 增益0–7, 表示-4.5–6dB | |
Right Output Mixer DACL Switch | Right Output Mixer 设置,使能DACL 通路 | 0: 关闭; 1: 开启 |
Right Output Mixer DACR Switch | Right Output Mixer 设置, 使能DACR 通路 0: 关闭; 1: 开启 | |
Right Output Mixer MIC1Booststage Switch | Right Output Mixer 设置, 使能MIC1 通路 0: 关闭; 1: 开启 | |
SPK_L Mux SPK_L Mux | 设置0:MIXER_L Switch; 1:MIXR+MIXL | |
SPK_R Mux SPK_R Mux | 设置0:MIXER_L Switch; 1:MIXR+MIXL | |
digital volume | 数字音量设置0–63, 表示-73.08–0dB |
通路设置举例:
硬件特性
tdm0配置 | tdm0配置说明 |
---|---|
daudio_master | 1: SND_SOC_DAIFMT_CBM_CFM(codec clk & FRM master),即daudio接口作为slave, codec作为master2: SND_SOC_DAIFMT_CBS_CFM(codec clk slave & FRMmaster),一般不用3: SND_SOC_DAIFMT_CBM_CFS(codec clk master & frameslave),一般不用4: SND_SOC_DAIFMT_CBS_CFS(codec clk & FRM slave),即daudio接口作为master, codec作为slave |
daudio_select | 0: pcm mode; 1: i2s mode |
deaudio_format | 1: SND_SOC_DAIFMT_I2S(standard i2s format)2: SND_SOC_DAIFMT_RIGHT_J(right justfied format)3: SND_SOC_DAIFMT_LEFT_J(left justfied format)4: SND_SOC_DAIFMT_DSP_A(pcm. MSB is available on 2ndBCLK rising edge after LRC rising edge)5: SND_SOC_DAIFMT_DSP_B(pcm. MSB is available on 1nd BCLK rising edge after LRC rising edge) |
signal_inversion | 1: SND_SOC_DAIFMT_NB_NF(normal bit clock + frame)2: SND_SOC_DAIFMT_NB_IF(normal BCLK + inv FRM)3: SND_SOC_DAIFMT_IB_NF(invert BCLK + nor FRM)4: SND_SOC_DAIFMT_IB_IF(invert BCLK + FRM) |
sample_resolution | 采样精度,16bit, 24bit,32bit |
slot_width_select | 支持8bit, 16bit, 32bit宽度 |
pcm_lrck_period | 可配置16/32/64/128/256个bclk |
pcm_lrckr_period | 可配置16/32/64/128/256个bclk |
msb_lsb_first | 0: msb first; 1: lsb first |
sign_extend | 0: zero pending; 1: sign extend |
tx_data_mode | 0: 16bit linear PCM;1: reserved;2: 8bit u-law;3: 8bit a-law |
rx_data_mode | 0: 16bit linear PCM;1: reserved;2: 8bit u-law;3: 8bit a-law |
i2s_bclk | i2s_bclk引脚 |
i2s_lrclk | i2s_lrclk引脚 |
i2s_dout0 | i2s_dout引脚 |
i2s_din | i2s_din引脚 |
该章节主要介绍在标案上进行播歌,录音的测试命令。
可通过下面命令调节硬件上的模拟音量:
表示下使用AudioCodec进行单声道录音
R16包含 3 个音频模块,分别是内置AudioCodec,I2S0以及I2S1。
R16中, 3 个音频模块的时钟源均来自pll_audio。
pll_audio可以输出24.576M或者22.5792M的时钟,分别支持48k系列,44.1k系列的播放录音。
硬件特性
audio0配置 | audio0配置说明 |
---|---|
audio0 | 是否使用audiocodec驱动。 0 :不使用; 1 :使用 |
headphone_vol | headphone volume,可设定范围0~0x3f, 0表示mute,163表示-62dB0dB, 1dB/step |
pa_double_used | 是否同时使用两个DAC, 0 :不使用; 1 :使用 |
headphone_direct_used | 是否使用headphone输出, 0 :不使用; 1 :使用 |
main_mic_vol | MIC1默认增益, 0–7, 0:0dB, 1~7:24–42dB,3dB/step |
headset_mic_vol | MIC2默认增益, 0–7, 0:0dB, 1~7:24–42dB,3dB/step |
audio_pa_ctrl | PA使能引脚 |
pa_gpio_reverse | PA使能引脚是否颠倒, 0:正常,即high level active; 1:颠倒,即low level active |
aif1_lrlk_div | aif1的lrck分频系数 |
R16相关控件如下表:
控件名称 | 功能 | 数值 |
---|---|---|
HeadphoneSwitch | Headphone通路使能 | 0:关闭; 1:开启 |
ADC input gain | ADC增益 | 0–7,表示-4.5–6dB |
ADC volume | ADCL/ADCR音量设置 | 0–0xff, 0表示mute, 0x10xff表<br/>示-119.25dB71.25dB,0.75dB/step,如0xA0表示0dB |
ADCL Mux | ADCL Mux设置,只支持0:ADC | 0:ADC |
ADCR Mux | ADCR Mux设置,只支持0:ADC | 0:ADC |
AIF1 AD0L MixerADCL Switch | AIF1 AD0L Mixer设置,使能ADCL通路 | 0:关闭; 1:开启 |
AIF1 AD0L MixerAIF1 DA0L Switch | AIF1 AD0L Mixer设置,使能AIF1 DA0L通路 | 0:关闭; 1:开启 |
AIF1 AD0L MixerAIF2 DACL Switch | AIF1 AD0L Mixer设置,使能AIF2 DACL通路 | 0:关闭; 1:开启 |
AIF1 AD0L MixerAIF2 DACRSwitch | AIF1 AD0L Mixer设置,使能AIF2 DACR通路 | 0:关闭; 1:开启 |
AIF1 AD0R MixerADCR Switch | AIF1 AD0R Mixer设置,使能ADCR通路 | 0:关闭; 1:开启 |
AIF1 AD0R MixerAIF1 DA0R Switch | AIF1 AD0R Mixer设置,使能AIF1 DA0R通路 | 0:关闭; 1:开启 |
AIF1 AD0R MixerAIF2 DACL Switch | AIF1 AD0R Mixer设置,使能AIF2 DACL通路 | 0:关闭; 1:开启 |
AIF1 AD0R MixerAIF2 DACRSwitch | AIF1 AD0R Mixer设置,使能AIF2 DACR通路 | 0:关闭; 1:开启 |
AIF1 AD1L MixerADCL Switch | AIF1 AD1L Mixer设置,使能ADCL通路 | 0:关闭; 1:开启 |
AIF1 AD1L MixerAIF2 DACL Switch | AIF1 AD1L Mixer设置,使能AIF2 DACL通路 | 0:关闭; 1:开启 |
AIF1 AD1R MixerADCR Switch | AIF1 AD1R Mixer设置,使能ADCR通路 | 0:关闭; 1:开启 |
AIF1 AD1R MixerAIF2 DACR Switch | AIF1 AD1R Mixer设置,使能AIF2 DACR通路 | 0:关闭; 1:开启 |
AIF1 ADC timeslot0 mixer gain | AIF1 ADC0L/ADC0R Mixer,数字增益 | 0:0dB; 1:-6dB; |
对于ADC0L Mixer,bit0:AIF2 DACR;bit1:ADCL;bit2:AIF2 DACL;bit3:AIF2 DA0L;对于ADC0R Mixer,bit0:AIF2 DACL;bit1:ADCR;bit2:AIF2 DACR;bit3:AIF2 DA0R; | ||
AIF1 ADC timeslot0 volume | AIF1 ADC0L/ADC0R音量设置 | 0–0xff, 0表示mute, 0x10xff表<br/>示-119.25dB71.25dB,0.75dB/step,如0xA0表示0dB |
AIF1 ADC timeslot1 mixer gain | AIF1 ADC1L/ADC1R Mixer,数字增益 | 0:0dB; 1:-6dB; |
对于ADC1L Mixer,bit0:ADCL;bit1:AIF2 DACL;对于ADC1R Mixer,bit0:ADCR;bit1:AIF2 DACR; | ||
AIF1 ADC timeslot1 volume | AIF1 ADC1L/ADC1R 音量设置 | 0–0xff, 0表示mute, 0x10xff表<br/>示-119.25dB71.25dB,0.75dB/step,如0xA0表示0dB |
AIF1 DAC timeslot0 volume | AIF1 DAC0L/DAC0R 音量设置 | 0–0xff, 0表示mute, 0x10xff表<br/>示-119.25dB71.25dB,0.75dB/step,如0xA0表示0dB |
AIF1 DAC timeslot1 volume | AIF1 DAC1L/DAC1R 音量设置 | 0–0xff, 0表示mute, 0x10xff表<br/>示-119.25dB71.25dB,0.75dB/step,如0xA0表示0dB |
AIF1IN0L Mux | AIF1IN0L Mux设置 | 0:AIF1_DA0L; 1:AIF1_DA0R;2:SUM_AIF1DA0L_AIF1DA0R;3:AVE_AIF1DA0L_AIF1DA0R |
AIF1IN0R Mux | AIF1IN0R Mux设置 | 0:AIF1_DA0R; 1:AIF1_DA0L;2:SUM_AIF1DA0L_AIF1DA0R;3:AVE_AIF1DA0L_AIF1DA0R |
AIF1IN1L Mux | AIF1IN1L Mux设置 | 0:AIF1_DA1L; 1:AIF1_DA1R;2:SUM_AIF1DA1L_AIF1DA1R;3:AVE_AIF1DA1L_AIF1DA1R |
AIF1IN1R Mux | AIF1IN1R Mux设置 | 0:AIF1_DA1R; 1:AIF1_DA1L;2:SUM_AIF1DA1L_AIF1DA1R;3:AVE_AIF1DA1L_AIF1DA1R |
AIF1OUT0L Mux | AIF1OUT0L Mux设置 | 0:AIF1_AD0L; 1:AIF1_AD0R;2:SUM_AIF1AD0L_AIF1AD0R;3:AVE_AIF1AD0L_AIF1AD0R |
AIF1OUT0R Mux | AIF1OUT0R Mux设置 | 0:AIF1_AD0R; 1:AIF1_AD0L;2:SUM_AIF1AD0L_AIF1AD0R;3:AVE_AIF1AD0L_AIF1AD0R |
AIF1OUT1L Mux | AIF1OUT1L Mux设置 | 0:AIF1_AD1L; 1:AIF1_AD1R;2:SUM_AIF1AD1L_AIF1AD1R;3:AVE_AIF1AD1L_AIF1AD1R |
AIF1OUT1R Mux | AIF1OUT1R Mux设置 | 0:AIF1_AD1R; 1:AIF1_AD1L;2:SUM_AIF1AD1L_AIF1AD1R;3:AVE_AIF1AD1L_AIF1AD1R |
DAC mixer gain | DAC mixer增益 | 0:0dB; 1:-6dB; |
对于DACL Mixer,bit0:ADCL;bit1:AIF2 DACL;bit2:AIF1 DAC1L;bit3:AIF1 DAC0L;对于DACR Mixer,bit0:ADCR;bit1:AIF2 DACR;bit2:AIF1 DAC1R;bit3:AIF1 DAC0R; | ||
DAC volume | DACL/DACR音量设置 | 0–0xff, 0表示mute, 0x10xff表<br/>示-119.25dB71.25dB,0.75dB/step,如0xA0表示0dB |
DACL MixerADCL Switch | DACL Mixer设置,使能ADCL通路 | 0:关闭; 1:开启 |
DACL MixerAIF1DA0L Switch | DACL Mixer设置,使能AIF1DA0L通路 | 0:关闭; 1:开启 |
DACL MixerAIF1DA1L Switch | DACL Mixer设置,使能AIF1DA1L通路 | 0:关闭; 1:开启 |
DACL MixerAIF2DACL Switch | DACL Mixer设置,使能AIF2DACL通路 | 0:关闭; 1:开启 |
DACR MixerADCR Switch | DACR Mixer设置,使能ADCR通路 | 0:关闭; 1:开启 |
DACR MixerAIF1DA0R Switch | DACR Mixer设置,使能AIF1DA0R通路 | 0:关闭; 1:开启 |
DACR MixerAIF1DA1R Switch | DACR Mixer设置,使能AIF1DA1R通路 | 0:关闭; 1:开启 |
DACR MixerAIF2DACR Switch | DACR Mixer设置,使能AIF2DACR通路 | 0:关闭; 1:开启 |
External SpeakerSwitch | 使能Headphone以及PA | 0:关闭; 1:开启 |
HP_L Mux | HP_L Mux设置 | 0:DACL ; 1:Left Output Mixer |
HP_R Mux | HP_R Mux设置 | 0:DACR ; 1:Right Output Mixer |
LEFT ADC inputMixerLout_Mixer_Switch | LEFT ADC input Mixer设置,使能Lout Mixer通路 | 0:关闭; 1:开启 |
LEFT ADC inputMixer MIC1 boostSwitch | LEFT ADC input Mixer设置,使能MIC1通路 | 0:关闭; 1:开启 |
LEFT ADC inputMixer MIC2 boostSwitch | LEFT ADC input Mixer设置,使能MIC2通路 | 0:关闭; 1:开启 |
LEFT ADC inputMixerRout_Mixer_Switch | LEFT ADC input Mixer设置,使能Rout Mixer通路 | 0:关闭; 1:开启 |
Left Output MixerDACL Switch | Left Output Mixer设置,使能DACL通路 | 0:关闭; 1:开启 |
Left Output MixerDACR Switch | Left Output Mixer设置,使能DACR通路 | 0:关闭; 1:开启 |
Left Output MixerMIC1BooststageSwitch | Left Output Mixer设置,使能MIC1通路 | 0:关闭; 1:开启 |
Left Output MixerMIC2BooststageSwitch | Left Output Mixer设置,使能MIC2通路 | 0:关闭; 1:开启 |
MIC1 boostamplifier gain | MIC1增益 | 0–7, 0:0dB, 1~7:24–42dB,3dB/step |
MIC2 SRC | MIC2 SRC设置 | 0:MIC3; 1:MIC2 |
MIC2 boostamplifier gain | MIC2增益 | 0–7, 0:0dB, 1~7:24–42dB,3dB/step |
RIGHT ADC inputMixerLout_Mixer_Switch | RIGHT ADC inputMixer设置,使能LoutMixer通路 | 0:关闭; 1:开启 |
RIGHT ADC inputMixer MIC1 boostSwitch | RIGHT ADC inputMixer设置,使能MIC1通路 | 0:关闭; 1:开启 |
RIGHT ADC inputMixer MIC2 boostSwitch | RIGHT ADC inputMixer设置,使能MIC2通路 | 0:关闭; 1:开启 |
RIGHT ADC inputMixerRout_Mixer_Switch | RIGHT ADC inputMixer设置,使能RoutMixer通路 | 0:关闭; 1:开启 |
Right OutputMixer DACLSwitch | Right Output Mixer设置,使能DACL通路 | 0:关闭; 1:开启 |
Right OutputMixer DACRSwitch | Right Output Mixer设置,使能DACR通路 | 0:关闭; 1:开启 |
Right OutputMixerMIC1BooststageSwitch | Right Output Mixer设置,使能MIC1通路 | 0:关闭; 1:开启 |
Right OutputMixerMIC2BooststageSwitch | Right Output Mixer设置,使能MIC2通路 | 0:关闭; 1:开启 |
digital volume | 数字音量设置 | 0–63,表示-73.08–0dB |
headphonevolume | headphone音量设置 | 0–63,0表示mute; 1~63表示-62dB–0dB |
硬件特性
• 两路I2S/PCM;
• 支持主从模式
I2S0,I2S1的配置方法是一样的,下面仅描述I2S0
i2s0配置 | i2s0配置说明 |
---|---|
i2s0_used | 是否使用i2s驱动。 0 :不使用; 1 :使用 |
i2s0_master | 1: SND_SOC_DAIFMT_CBM_CFM(codec clk & FRMmaster),即daudio接口作为slave, codec作为master2: SND_SOC_DAIFMT_CBS_CFM(codec clk slave &FRM master),一般不用3: SND_SOC_DAIFMT_CBM_CFS(codec clk master &frame slave),一般不用4: SND_SOC_DAIFMT_CBS_CFS(codec clk & FRMslave),即daudio接口作为master, codec作为slave |
audio_format | 1: SND_SOC_DAIFMT_I2S(standard i2s format)2: SND_SOC_DAIFMT_RIGHT_J(right justfied format)3: SND_SOC_DAIFMT_LEFT_J(left justfied format)4: SND_SOC_DAIFMT_DSP_A(pcm. MSB is availableon 2nd BCLK rising edge after LRC rising edge)5: SND_SOC_DAIFMT_DSP_B(pcm. MSB is availableon 1nd BCLK rising edge after LRC rising edge) |
signal_inversion | 1: SND_SOC_DAIFMT_NB_NF(normal bit clock +frame)2: SND_SOC_DAIFMT_NB_IF(normal BCLK + invFRM)3: SND_SOC_DAIFMT_IB_NF(invert BCLK + nor FRM)4: SND_SOC_DAIFMT_IB_IF(invert BCLK + FRM) |
over_sample_rate | 支持128fs/192fs/256fs/384fs/512fs/768fs |
sample_resolution | 采样精度,16bit, 24bit,32bit |
word_select_size | 支持16bits/20bits/24bits/32bits |
pcm_sync_period | 16/32/64/128/256 |
msb_lsb_first | 0: msb first; 1: lsb first |
slot_index | 0: 1st slot; 1: 2nd slot; 2: 3th slot; 3:4th slot |
slot_width | 8: 8 clocks width; 16: 16 clocks width |
frame_width | 0: long frame sync; 1: short frame sync |
tx_data_mode | 0: 16bit linear PCM;1: reserved;2: 8bit u-law;3: 8bit a-law |
rx_data_mode | 0: 16bit linear PCM;1: reserved;2: 8bit u-law;3: 8bit a-law |
i2s0_mclk | i2s0_mclk引脚 |
i2s0_bclk | i2s0_bclk引脚 |
i2s0_lrclk | i2s0_lrclk引脚 |
i2s0_dout0 | i2s0_dout引脚 |
i2s0_din | i2s0_din引脚 |
该章节主要介绍在标案上进行播歌,录音的测试命令。
可通过下面命令调节硬件上的模拟音量:
表示下使用audiocodec进行单声道录音
R18包含 4 个音频模块,分别是内置AudioCodec以及Daudio0,Daudio1,Daudio2。
R18中, 4 个音频模块的时钟源均来自pll_audio
pll_audio可以输出24.576M或者22.5792M的时钟,分别支持48k系列,44.1k系列的播放录音。
硬件特性
• 两路DAC
sndcodec配置,即machine驱动的相关配置
sndcodec配置 | sndcodec配置说明 |
---|---|
sndcodec_used 是否使用sndcodec驱动。 | 0 :不使用; 1 :使用 |
linein_detect | linein检测引脚 |
hp_detect_case | jack irq level, 0:low; 1:high |
codec配置,即内置audiocodec驱动的相关配置
codec配置 | codec配置说明 |
---|---|
codec_used | 是否使用codec驱动。0 :不使用; 1 :使用 |
headphonevol | headphone volume,可设定范围0~0x3f, 0表示mute, 163表<br/>示-62dB0dB, 1dB/step |
spkervol | spk(lineout) volume,可设定范围0~0x1f, 0或者 1 表示mute, 231<br/>表示-43.5dB0dB, 1.5dB/step |
earpiecevol | earpiece volume,可设定范围0~0x1f, 0或者 1 表示mute, 231表<br/>示-43.5dB0dB, 1.5dB/step |
maingain | MIC1默认增益, 0–7, 0:0dB, 1~7:24–42dB,3dB/step |
headsetmicgain | MIC2默认增益, 0–7, 0:0dB, 1~7:24–42dB,3dB/step |
adcagc_cfg | 是否使用adcagc. 0:不适用; 1 :使用 |
adcdrc_cfg | 是否使用adcdrc. 0:不适用; 1 :使用 |
adchpf_cfg | 是否使用adchpf. 0:不适用; 1 :使用 |
dacdrc_cfg | 是否使用dacdrc. 0:不适用; 1 :使用 |
dachpf_cfg | 是否使用dachpf. 0:不适用; 1 :使用 |
aif1_lrlk_div | aif1的lrck分频系数 |
pa_sleep_time | 使能pa之前等待的时间,单位ms |
dac_digital_vol | DACL/DACR数字音量,0–0xff, 0表示mute, 0x10xff表<br/>示-119.25dB71.25dB, 0.75dB/step,如0xA0表示0dB, 0x98表示-6dB |
codec配置 | codec配置说明 |
---|---|
gpio-spk | PA使能引脚 |
R18相关控件如下表:
控件名称 | 功能 | 数值 |
---|---|---|
Headphone Switch | Headphone通路使能 | 0:关闭; 1:开启 |
Linein_detectSwitch | Linein检测使能 | 0:关闭; 1:开启 |
ADC input gaincontrol | ADC增益 | 0–7,表示-4.5–6dB |
ADC volume | ADCL/ADCR音量设置 | 0–0xff, 0表示mute, 0x10xff表<br/>示-119.25dB71.25dB,0.75dB/step,如0xA0表示0dB |
ADCL Mux | ADCL Mux设置,只支持0:ADC | 0:ADC |
ADCR Mux | ADCR Mux设置,只支持0:ADC | 0:ADC |
AIF1 AD0L MixerADCL Switch | AIF1 AD0L Mixer设置,使能ADCL通路 | 0:关闭; 1:开启 |
AIF1 AD0L MixerAIF1 DA0L Switch | AIF1 AD0L Mixer设置,使能AIF1 DA0L通路 | 0:关闭; 1:开启 |
AIF1 AD0L MixerAIF2 DACL Switch | AIF1 AD0L Mixer设置,使能AIF2 DACL通路 | 0:关闭; 1:开启 |
AIF1 AD0L MixerAIF2 DACR Switch | AIF1 AD0L Mixer设置,使能AIF2 DACR通路 | 0:关闭; 1:开启 |
AIF1 AD0R MixerADCR Switch | AIF1 AD0R Mixer设置,使能ADCR通路 | 0:关闭; 1:开启 |
AIF1 AD0R MixerAIF1 DA0R Switch | AIF1 AD0R Mixer设置,使能AIF1 DA0R通路 | 0:关闭; 1:开启 |
AIF1 AD0R MixerAIF2 DACL Switch | AIF1 AD0R Mixer设置,使能AIF2 DACL通路 | 0:关闭; 1:开启 |
AIF1 AD0R MixerAIF2 DACR Switch | AIF1 AD0R Mixer设置,使能AIF2 DACR通路 | 0:关闭; 1:开启 |
AIF1 AD1L MixerADCL Switch | AIF1 AD1L Mixer设置,使能ADCL通路 | 0:关闭; 1:开启 |
AIF1 AD1L MixerAIF2 DACL Switch | AIF1 AD1L Mixer设置,使能AIF2 DACL通路 | 0:关闭; 1:开启 |
AIF1 AD1R MixerADCR Switch | AIF1 AD1R Mixer设置,使能ADCR通路 | 0:关闭; 1:开启 |
AIF1 AD1R MixerAIF2 DACR Switch | AIF1 AD1R Mixer设置,使能AIF2 DACR通路 | 0:关闭; 1:开启 |
AIF1 ADC timeslot0 mixer gain | AIF1 ADC0L/ADC0R Mixer,数字增益 | 0:0dB; 1:-6dB; |
对于ADC0L Mixer,bit0:AIF2 DACR;bit1:ADCL;bit2:AIF2 DACL;bit3:AIF2 DA0L;对于ADC0R Mixer,bit0:AIF2 DACL;bit1:ADCR;bit2:AIF2 DACR;bit3:AIF2 DA0R; | ||
AIF1 ADC timeslot0 volume | AIF1 ADC0L/ADC0R音量设置 | 0–0xff, 0表示mute, 0x10xff表<br/>示-119.25dB71.25dB,0.75dB/step,如0xA0表示0dB |
AIF1 ADC timeslot1 mixer gain | AIF1 ADC1L/ADC1RMixer,数字增益 | 0:0dB; 1:-6dB; |
对于ADC1L Mixer,bit0:ADCL;bit1:AIF2 DACL;对于ADC1R Mixer,bit0:ADCR;bit1:AIF2 DACR; | ||
AIF1 ADC timeslot1 volume | AIF1 ADC1L/ADC1R音量设置 | 0–0xff, 0表示mute, 0x10xff表<br/>示-119.25dB71.25dB,0.75dB/step,如0xA0表示0dB |
AIF1 DAC timeslot0 volume | AIF1 DAC0L/DAC0R音量设置 | 0–0xff, 0表示mute, 0x10xff表<br/>示-119.25dB71.25dB,0.75dB/step,如0xA0表示0dB |
AIF1 DAC timeslot1 volume | AIF1 DAC1L/DAC1R音量设置 | 0–0xff, 0表示mute, 0x10xff表<br/>示-119.25dB71.25dB,0.75dB/step,如0xA0表示0dB |
AIF1IN0L Mux | AIF1IN0L Mux设置 | 0:AIF1_DA0L; 1:AIF1_DA0R;2:SUM_AIF1DA0L_AIF1DA0R;3:AVE_AIF1DA0L_AIF1DA0R |
AIF1IN0R Mux | AIF1IN0R Mux设置 | 0:AIF1_DA0R; 1:AIF1_DA0L;2:SUM_AIF1DA0L_AIF1DA0R;3:AVE_AIF1DA0L_AIF1DA0R |
AIF1IN1L Mux | AIF1IN1L Mux设置 | 0:AIF1_DA1L; 1:AIF1_DA1R;2:SUM_AIF1DA1L_AIF1DA1R;3:AVE_AIF1DA1L_AIF1DA1R |
AIF1IN1R Mux | AIF1IN1R Mux设置 | 0:AIF1_DA1R; 1:AIF1_DA1L;2:SUM_AIF1DA1L_AIF1DA1R;3:AVE_AIF1DA1L_AIF1DA1R |
AIF1OUT0L Mux | AIF1OUT0L Mux设置 | 0:AIF1_AD0L; 1:AIF1_AD0R;2:SUM_AIF1AD0L_AIF1AD0R;3:AVE_AIF1AD0L_AIF1AD0R |
AIF1OUT0R Mux | AIF1OUT0R Mux设置 | 0:AIF1_AD0R; 1:AIF1_AD0L;2:SUM_AIF1AD0L_AIF1AD0R;3:AVE_AIF1AD0L_AIF1AD0R |
AIF1OUT1L Mux | AIF1OUT1L Mux设置 | 0:AIF1_AD1L; 1:AIF1_AD1R;2:SUM_AIF1AD1L_AIF1AD1R;3:AVE_AIF1AD1L_AIF1AD1R |
AIF1OUT1R Mux | AIF1OUT1R Mux设置 | 0:AIF1_AD1R; 1:AIF1_AD1L;2:SUM_AIF1AD1L_AIF1AD1R;3:AVE_AIF1AD1L_AIF1AD1R |
DAC mixer gain | DAC mixer增益 | 0:0dB; 1:-6dB; |
对于DACL Mixer,bit0:ADCL;bit1:AIF2 DACL;bit2:AIF1 DAC1L;bit3:AIF1 DAC0L;对于DACR Mixer,bit0:ADCR;bit1:AIF2 DACR;bit2:AIF1 DAC1R;bit3:AIF1 DAC0R; | ||
DAC volume | DACL/DACR音量设置 | 0–0xff, 0表示mute, 0x10xff表<br/>示-119.25dB71.25dB,0.75dB/step,如0xA0表示0dB |
DACL Mixer ADCLSwitch | DACL Mixer设置,使能ADCL通路 | 0:关闭; 1:开启 |
DACL MixerAIF1DA0L Switch | DACL Mixer设置,使能AIF1DA0L通路 | 0:关闭; 1:开启 |
DACL MixerAIF1DA1L Switch | DACL Mixer设置,使能AIF1DA1L通路 | 0:关闭; 1:开启 |
DACL MixerAIF2DACL Switch | DACL Mixer设置,使能AIF2DACL通路 | 0:关闭; 1:开启 |
DACR Mixer ADCRSwitch | DACR Mixer设置,使能ADCR通路 | 0:关闭; 1:开启 |
DACR MixerAIF1DA0R Switch | DACR Mixer设置,使能AIF1DA0R通路 | 0:关闭; 1:开启 |
DACR MixerAIF1DA1R Switch | DACR Mixer设置,使能AIF1DA1R通路 | 0:关闭; 1:开启 |
DACR MixerAIF2DACR Switch | DACR Mixer设置,使能AIF2DACR通路 | 0:关闭; 1:开启 |
EAR Mux | EAR Mux设置 | 0:DACR; 1:DACL; 2:Right AnalogMixer; 3:Left Analog Mixer |
Earpiece Switch | Earpiece通路使能 | 0:关闭; 1:开启 |
External SpeakerSwitch | 使能Headphone以及PA | 0:关闭; 1:开启 |
HP_L Mux | HP_L Mux设置 | 0:DACL ; 1:Left Output Mixer |
HP_R Mux | HP_R Mux设置 | 0:DACR ; 1:Right Output Mixer |
LADC input MixerLINEINL | LADC input Mixer设置,使能LINEINL通路 | 0:关闭; 1:开启 |
LADC input MixerMIC1 boost Switch | LADC input Mixer设置,使能MIC1通路 | 0:关闭; 1:开启 |
LADC input MixerMIC2 boost Switch | LADC input Mixer设置,使能MIC2通路 | 0:关闭; 1:开启 |
LADC input Mixerl_output mixerSwitch | LADC input Mixer设置,使能l_outputmixer通路 | 0:关闭; 1:开启 |
LADC input Mixerr_output mixerSwitch | LADC input Mixer设置,使能r_outputmixer通路 | 0:关闭; 1:开启 |
LINEINL/R to L_Routput mixer gainLeft Output MixerDACL Switch | Left Output Mixer设置,使能DACL通路 | 0:关闭; 1:开启 |
Left Output MixerDACR Switch | Left Output Mixer设置,使能DACR通路 | 0:关闭; 1:开启 |
Left Output MixerLINEINL Switch | Left Output Mixer设置,使能LINEINL通路 | 0:关闭; 1:开启 |
Left Output MixerMIC1BooststageSwitch | Left Output Mixer设置,使能MIC1通路 | 0:关闭; 1:开启 |
Left Output MixerMIC2BooststageSwitch | Left Output Mixer设置,使能MIC2通路 | 0:关闭; 1:开启 |
MIC1 boostamplifier gain | MIC1增益 | 0–7, 0:0dB, 1~7:24–42dB,3dB/step |
MIC1_G booststage output mixercontrol | MIC1 to L or R outputMixer增益 | 0–7,表示-4.5–6dB |
MIC2 BST stage toL_R outp mixergain | MIC2 to L or R outputMixer增益 | 0–7,表示-4.5–6dB |
MIC2 SRC | MIC2 SRC设置 | 0:MIC3; 1:MIC2 |
MIC2 boost AMPgain control | MIC2增益 | 0–7, 0:0dB, 1~7:24–42dB,3dB/step |
RADC input MixerLINEINR Switch | RADC input Mixer设置,使能LINEINR通路 | 0:关闭; 1:开启 |
RADC input MixerMIC1 boost Switch | RADC input Mixer设置,使能MIC1通路 | 0:关闭; 1:开启 |
RADC input MixerMIC2 boost Switch | RADC input Mixer设置,使能MIC2通路 | 0:关闭; 1:开启 |
RADC input Mixerl_output mixerSwitch | RADC input Mixer设置,使能l_outputmixer通路 | 0:关闭; 1:开启 |
RADC input Mixerl_output Switch | RADC input Mixer设置,使能l_outputmixer通路 | 0:关闭; 1:开启 |
Right Output MixerDACL Switch | Right Output Mixer设置,使能DACL通路 | 0:关闭; 1:开启 |
Right Output MixerDACR Switch | Right Output Mixer设置,使能DACR通路 | 0:关闭; 1:开启 |
Right Output MixerLINEINR Switch | Right Output Mixer设置,使能LINEINR通路 | 0:关闭; 1:开启 |
Right Output MixerMIC1BooststageSwitch | Right Output Mixer设置,使能MIC1通路 | 0:关闭; 1:开启 |
Right Output MixerMIC2BooststageSwitch | Right Output Mixer设置,使能MIC2通路 | 0:关闭; 1:开启 |
SPK_L Mux | SPK_L Mux设置 | 0:MIXEL Switch; 1:MIXL MIXRSwitch |
SPK_R Mux | SPK_R Mux设置 | 0:MIXER Switch; 1:MIXR MIXLSwitch |
digital volume | 数字音量设置 | 0–63,表示-73.08–0dB |
earpiece volume | earpiece音量设置 | 0–31,表示-43.5–0dB |
headphone volume | headphone音量设置 | 0–63,0表示mute; 1~63表示-62dB–0dB |
speaker volume | speaker(lineout)音量设置 | 0–31,表示-43.5–0dB |
硬件特性
• 三路I2S/PCM;
• 支持主从模式
snddaudio0配置,即daudio0 machine驱动的相关配置
snddaudio配置 | snddaudio配置说明 |
---|---|
snddaudio0_used | 是否使用snddaudio驱动。 0 :不使用; 1 :使用 |
daudio0配置,即daudio0 platform驱动的相关配置
daudio配置 | daudio配置说明 |
---|---|
daudio0_used | 是否使用daudio驱动。 0 :不使用; 1 :使用 |
daudio_master | 1: SND_SOC_DAIFMT_CBM_CFM(codec clk & FRMmaster),即daudio接口作为slave, codec作为master2: SND_SOC_DAIFMT_CBS_CFM(codec clk slave &FRM master),一般不用3: SND_SOC_DAIFMT_CBM_CFS(codec clk master &frame slave),一般不用4: SND_SOC_DAIFMT_CBS_CFS(codec clk & FRMslave),即daudio接口作为master, codec作为slave |
audio_format | 1: SND_SOC_DAIFMT_I2S(standard i2s format)2: SND_SOC_DAIFMT_RIGHT_J(right justfied format)3: SND_SOC_DAIFMT_LEFT_J(left justfied format)4: SND_SOC_DAIFMT_DSP_A(pcm. MSB is availableon 2nd BCLK rising edge after LRC rising edge)5: SND_SOC_DAIFMT_DSP_B(pcm. MSB is availableon 1nd BCLK rising edge after LRC rising edge) |
signal_inversion | 1: SND_SOC_DAIFMT_NB_NF(normal bit clock +frame)2: SND_SOC_DAIFMT_NB_IF(normal BCLK + invFRM)3: SND_SOC_DAIFMT_IB_NF(invert BCLK + nor FRM)4: SND_SOC_DAIFMT_IB_IF(invert BCLK + FRM) |
slot_width_select | 支持8bit, 16bit, 32bit宽度 |
pcm_lrck_period | 一般可配置16/32/64/128/256个bclk |
msb_lsb_first | 0: msb first; 1: lsb first |
frametype | 0: short frame = 1 clock width; 1: long frame = 2 clock width |
tdm_config | 0: pcm mode; 1: i2s mode |
tx_data_mode | 0: 16bit linear PCM;1: reserved;2: 8bit u-law;3: 8bita-law |
daudio配置 | daudio配置说明 |
---|---|
rx_data_mode | 0: 16bit linear PCM;1: reserved;2: 8bit u-law;3: 8bit a-law |
具体Daudio外接codec,数字功放的配置,可参考《R18外挂codec:ac108》《R18外挂数字功放TAS5731》
硬件特性
• 支持S/PDIF_OUT
spdif配置,即platform驱动的相关配置
spdif配置 | spdif配置说明 |
---|---|
spdif_used | 是否使用spdif驱动。 0 :不使用; 1 :使用 |
sndspdif配置,即machine驱动的相关配置
sndspdif配置 | sndspdif配置说明 |
---|---|
sndspdif_used | 是否使用sndspdif驱动。 0 :不使用; 1 :使用 |
因为machine驱动代码中默认配置了”spdif-utils”作为codec驱动,代码路径:
R18标案tulip-noma搭配了MIC子板,含有两片AC108,每片最高可录 4 通道
下面对R18如何配置使用AC108作简单介绍
R18通过twi1控制AC108,而i2s0用于音频数据的传输
twi部分配置,可通过dts进行配置:
I2S部分需要配置sys_config以及dts
进入系统后,通过命令cat /proc/asound/cards列出当前声卡信息,如果发现ac108相关声 卡,说明已经正常加载驱动
无需额外设置音频通路,可直接用下面命令进行录音:
R18标案tulip-noma搭配了一片数字功放TAS5731
下面对R18如何配置使用tas5731作简单介绍
R18通过TWI0控制数字功放,而I2S1用于音频数据的传输
twi部分配置,可通过dts进行配置:
I2S部分需要配置sys_config以及dts
进入系统后,通过命令cat /proc/asound/cards列出当前声卡信息,如果发现tas5731相关声 卡,说明已经正常加载驱动
无需额外设置音频通路,可直接用下面命令进行播歌:
R18使用I2S2将音频数据传输到HDMI模块,并且I2S2也只能用于HDMI。
daudio2配置,即daudio2 platform驱动的相关配置
daudio2配置 | daudio2配置说明 |
---|---|
daudio2_used | 是否使用daudio2驱动。 0 :不使用; 1 :使用 |
sndhdmi配置,即sndhdmi machine驱动的相关配置
sndhdmi配置 | sndhdmi配置说明 |
---|---|
sndhdmi_used | 是否使用sndhdmi驱动。 0 :不使用; 1 :使用 |
该章节主要介绍在标案上进行播歌,录音的测试命令。
可通过下面命令调节硬件上的模拟音量:
R30包含 5 个音频模块,分别是内置AudioCodec,Daudio0,Daudio1,Daudio2以及Dmic
R30中, 5 个音频模块的时钟源均来自pll_audio。
pll_audio可以输出24.576M或者22.5792M的时钟,分别支持48k系列,44.1k系列的播 放录音。
硬件特性
• 两路DAC
sndcodec配置,即machine驱动的相关配置
sndcodec配置 | sndcodec配置说明 |
---|---|
sndcodec_used | 是否使用sndcodec驱动。 0 :不使用; 1 :使用 |
aif2fmt | 1: SND_SOC_DAIFMT_I2S(standard i2s format)2: SND_SOC_DAIFMT_RIGHT_J(right justfied format)3: SND_SOC_DAIFMT_LEFT_J(left justfied format)4: SND_SOC_DAIFMT_DSP_A(pcm. MSB is available on 2ndBCLK rising edge after LRC rising edge)5: SND_SOC_DAIFMT_DSP_B(pcm. MSB is available on 1ndBCLK rising edge after LRC rising edge) |
aif3fmt | 1: SND_SOC_DAIFMT_I2S(standard i2s format)2: SND_SOC_DAIFMT_RIGHT_J(right justfied format)3: SND_SOC_DAIFMT_LEFT_J(left justfied format)4: SND_SOC_DAIFMT_DSP_A(pcm. MSB is available on 2ndBCLK rising edge after LRC rising edge)5: SND_SOC_DAIFMT_DSP_B(pcm. MSB is available on 1ndBCLK rising edge after LRC rising edge) |
aif2master | 1: SND_SOC_DAIFMT_CBM_CFM(codec clk & FRM master),即aif接口选择master模式2: SND_SOC_DAIFMT_CBS_CFS(codec clk & FRM slave),即aif接口选择slave模式 |
hp_detect_case | jack irq level, 0:low; 1:high |
I2S配置,即audiocodec platform驱动的相关配置,内部aif接口用的I2S(与I2S0,I2S1接口无关)
i2s配置 | i2s配置说明 |
---|---|
i2s_used | 是否使用i2s驱动。 0 :不使用; 1 :使用 |
codec配置,即内置audiocodec驱动的相关配置
codec配置 | codec配置说明 |
---|---|
codec_used | 是否使用codec驱动。 0 :不使用; 1 :使用 |
headphonevol | 初始化headphone volume,可设定范围00x3f,表示0-62dB,-1dB/step |
spkervol | 初始化speaker volume,可设定范围0~0x1f, 0或者 1 表示mute,231表示-43.5dB0dB, 1.5dB/step |
headsetmicgain | 指的是MIC2增益,可设定范围0~0x7, 0:0dB, 17:1533dB,3dB/step,一般设置0x4,即24dB |
adcinputgain | adc增益,可设定范围00x7,表示-4.56dB, 1.5dB/step,一般设置0x3,即0dB |
adcagc_cfg | 是否使用adcagc. 0:不使用; 1 :使用 |
adcdrc_cfg | 是否使用adcdrc. 0:不使用; 1 :使用 |
adchpf_cfg | 是否使用adchpf. 0:不使用; 1 :使用 |
dacdrc_cfg | 是否使用dacdrc. 0:不使用; 1 :使用 |
aif2config | 是否使用aif2. 0:不使用; 1 :使用 |
aif3config | 是否使用aif3. 0:不使用; 1 :使用 |
gpio-spk | PA使能引脚 |
R30相关控件如下表:
控件名称 | 功能 | 数值 |
---|---|---|
Headphone Switch | Headphone通路使能 | 0:关闭; 1:开启 |
Lineout Switch | Lineout通路使能 | 0:关闭; 1:开启 |
ADC input gaincontrol | ADC增益 | 0–7,表示-4.5–6dB |
ADC volume | ADCL/ADCR音量设置 | 0–0xff, 0表示mute, 0x10xff表<br/>示-119.25dB71.25dB,0.75dB/step,如0xA0表示0dB |
AIF1 AD0L MixerADCL Switch | AIF1 AD0L Mixer设置,使能ADCL通路 | 0:关闭; 1:开启 |
AIF1 AD0L MixerAIF1 DA0L Switch | AIF1 AD0L Mixer设置,使能AIF1 DA0L通路 | 0:关闭; 1:开启 |
AIF1 AD0L MixerAIF2 DACL Switch | AIF1 AD0L Mixer设置,使能AIF2 DACL通路 | 0:关闭; 1:开启 |
AIF1 AD0L MixerAIF2 DACR Switch | AIF1 AD0L Mixer设置,使能AIF2 DACR通路 | 0:关闭; 1:开启 |
AIF1 AD0R MixerADCR Switch | AIF1 AD0R Mixer设置,使能ADCR通路 | 0:关闭; 1:开启 |
AIF1 AD0R MixerAIF1 DA0R Switch | AIF1 AD0R Mixer设置,使能AIF1 DA0R通路 | 0:关闭; 1:开启 |
AIF1 AD0R MixerAIF2 DACL Switch | AIF1 AD0R Mixer设置,使能AIF2 DACL通路 | 0:关闭; 1:开启 |
AIF1 AD0R MixerAIF2 DACR Switch | AIF1 AD0R Mixer设置,使能AIF2 DACR通路 | 0:关闭; 1:开启 |
AIF1 AD1L MixerADCL Switch | AIF1 AD1L Mixer设置,使能ADCL通路 | 0:关闭; 1:开启 |
AIF1 AD1L MixerAIF2 DACL Switch | AIF1 AD1L Mixer设置,使能AIF2 DACL通路 | 0:关闭; 1:开启 |
AIF1 AD1R MixerADCR Switch | AIF1 AD1R Mixer设置,使能ADCR通路 | 0:关闭; 1:开启 |
AIF1 AD1R MixerAIF2 DACR Switch | AIF1 AD1R Mixer设置,使能AIF2 DACR通路 | 0:关闭; 1:开启 |
AIF1 ADC timeslot0 mixer gain | AIF1 ADC0L/ADC0RMixer,数字增益 | 0:0dB; 1:-6dB; |
对于ADC0L Mixer,bit0:AIF2 DACR;bit1:ADCL;bit2:AIF2 DACL;bit3:AIF2 DA0L;对于ADC0R Mixer,bit0:AIF2 DACL;bit1:ADCR;bit2:AIF2 DACR;bit3:AIF2 DA0R; | ||
AIF1 ADC timeslot0 volume | AIF1 ADC0L/ADC0R音量设置 | 0–0xff, 0表示mute, 0x10xff表<br/>示-119.25dB71.25dB,0.75dB/step,如0xA0表示0dB |
AIF1 ADC timeslot1 mixer gain | AIF1 ADC1L/ADC1RMixer,数字增益 | 0:0dB; 1:-6dB; |
对于ADC1L Mixer,bit0:ADCL;bit1:AIF2 DACL;对于ADC1R Mixer,bit0:ADCR;bit1:AIF2 DACR; | ||
AIF1 ADC timeslot1 volume | AIF1 ADC1L/ADC1R音量设置 | 0–0xff, 0表示mute, 0x10xff表<br/>示-119.25dB71.25dB,0.75dB/step,如0xA0表示0dB |
AIF1 DAC timeslot0 volume | AIF1 DAC0L/DAC0R音量设置 | 0–0xff, 0表示mute, 0x10xff表<br/>示-119.25dB71.25dB,0.75dB/step,如0xA0表示0dB |
AIF1 DAC timeslot1 volume | AIF1 DAC1L/DAC1R音量设置 | 0–0xff, 0表示mute, 0x10xff表<br/>示-119.25dB71.25dB,0.75dB/step,如0xA0表示0dB |
AIF1IN0L Mux | AIF1IN0L Mux设置 | 0:AIF1_DA0L; 1:AIF1_DA0R;2:SUM_AIF1DA0L_AIF1DA0R;3:AVE_AIF1DA0L_AIF1DA0R |
AIF1IN0R Mux | AIF1IN0R Mux设置 | 0:AIF1_DA0R; 1:AIF1_DA0L;2:SUM_AIF1DA0L_AIF1DA0R;3:AVE_AIF1DA0L_AIF1DA0R |
AIF1IN1L Mux | AIF1IN1L Mux设置 | 0:AIF1_DA1L; 1:AIF1_DA1R;2:SUM_AIF1DA1L_AIF1DA1R;3:AVE_AIF1DA1L_AIF1DA1R |
AIF1IN1R Mux | AIF1IN1R Mux设置 | 0:AIF1_DA1R; 1:AIF1_DA1L;2:SUM_AIF1DA1L_AIF1DA1R;3:AVE_AIF1DA1L_AIF1DA1R |
AIF1OUT0L Mux | AIF1OUT0L Mux设置 | 0:AIF1_AD0L; 1:AIF1_AD0R;2:SUM_AIF1AD0L_AIF1AD0R;3:AVE_AIF1AD0L_AIF1AD0R |
AIF1OUT0R Mux | AIF1OUT0R Mux设置 | 0:AIF1_AD0R; 1:AIF1_AD0L;2:SUM_AIF1AD0L_AIF1AD0R;3:AVE_AIF1AD0L_AIF1AD0R |
AIF1OUT1L Mux | AIF1OUT1L Mux设置 | 0:AIF1_AD1L; 1:AIF1_AD1R;2:SUM_AIF1AD1L_AIF1AD1R;3:AVE_AIF1AD1L_AIF1AD1R |
AIF1OUT1R Mux | AIF1OUT1R Mux设置 | 0:AIF1_AD1R; 1:AIF1_AD1L;2:SUM_AIF1AD1L_AIF1AD1R;3:AVE_AIF1AD1L_AIF1AD1R |
DAC mixer gain | DAC mixer增益 | 0:0dB; 1:-6dB; |
对于DACL Mixer,bit0:ADCL;bit1:AIF2 DACL;bit2:AIF1 DAC1L;bit3:AIF1 DAC0L;对于DACR Mixer,bit0:ADCR;bit1:AIF2 DACR;bit2:AIF1 DAC1R;bit3:AIF1 DAC0R; | ||
DAC volume | DACL/DACR音量设置 | 0–0xff, 0表示mute, 0x10xff表<br/>示-119.25dB71.25dB,0.75dB/step,如0xA0表示0dB |
DACL Mixer ADCLSwitch | DACL Mixer设置,使能ADCL通路 | 0:关闭; 1:开启 |
DACL MixerAIF1DA0L Switch | DACL Mixer设置,使能AIF1DA0L通路 | 0:关闭; 1:开启 |
DACL MixerAIF1DA1L Switch | DACL Mixer设置,使能AIF1DA1L通路 | 0:关闭; 1:开启 |
DACL MixerAIF2DACL Switch | DACL Mixer设置,使能AIF2DACL通路 | 0:关闭; 1:开启 |
DACR Mixer ADCRSwitch | DACR Mixer设置,使能ADCR通路 | 0:关闭; 1:开启 |
DACR MixerAIF1DA0R Switch | DACR Mixer设置,使能AIF1DA0R通路 | 0:关闭; 1:开启 |
DACR MixerAIF1DA1R Switch | DACR Mixer设置,使能AIF1DA1R通路 | 0:关闭; 1:开启 |
DACR MixerAIF2DACR Switch | DACR Mixer设置,使能AIF2DACR通路 | 0:关闭; 1:开启 |
External SpeakerSwitch | 使能Headphone以及PA | 0:关闭; 1:开启 |
HP_L Mux | HP_L Mux设置 | 0:DACL ; 1:Left Output Mixer |
HP_R Mux | HP_R Mux设置 | 0:DACR ; 1:Right Output Mixer |
LADC input MixerLINEINL | LADC input Mixer设置,使能LINEINL通路 | 0:关闭; 1:开启 |
LADC input MixerMIC1 boost Switch | LADC input Mixer设置,使能MIC1通路 | 0:关闭; 1:开启 |
LADC input MixerMIC2 boost Switch | LADC input Mixer设置,使能MIC2通路 | 0:关闭; 1:开启 |
LADC input Mixerl_output mixerSwitch | LADC input Mixer设置,使能l_outputmixer通路 | 0:关闭; 1:开启 |
LADC input Mixerr_output mixerSwitch | LADC input Mixer设置,使能r_outputmixer通路 | 0:关闭; 1:开启 |
LINEINL/R to L_Routput mixer gain | LINEINL/R to L or Routput Mixer增益 | 0–7,表示-4.5–6dB |
LINEOUTL Mux | LINEOUTL Mux设置 | 0:left output mixer; 1:left+rightoutput mixer |
LINEOUTR Mux | LINEOUTR Mux设置 | 0:right output mixer; 1:left+rightoutput mixer |
Left Output MixerDACL Switch | Left Output Mixer设置,使能DACL通路 | 0:关闭; 1:开启 |
Left Output MixerDACR Switch | Left Output Mixer设置,使能DACR通路 | 0:关闭; 1:开启 |
Left Output MixerLINEINL Switch | Left Output Mixer设置,使能LINEINL通路 | 0:关闭; 1:开启 |
Left Output MixerMIC1BooststageSwitch | Left Output Mixer设置,使能MIC1通路 | 0:关闭; 1:开启 |
Left Output MixerMIC2BooststageSwitch | Left Output Mixer设置,使能MIC2通路 | 0:关闭; 1:开启 |
MIC1 boost AMPgain control | MIC1增益 | 0–7, 0:0dB, 1~7:24–42dB,3dB/step |
MIC1_G booststage output mixercontrol | MIC1 to L or R outputMixer增益 | 0–7,表示-4.5–6dB |
MIC2 BST stage toL_R outp mixergain | MIC2 to L or R outputMixer增益 | 0–7,表示-4.5–6dB |
MIC2 SRC | MIC2 SRC设置 | 0:MIC3; 1:MIC2 |
MIC2 boost AMPgain control | MIC2增益 | 0–7, 0:0dB, 1~7:24–42dB,3dB/step |
RADC input MixerLINEINR Switch | RADC input Mixer设置,使能LINEINR通路 | 0:关闭; 1:开启 |
RADC input MixerMIC1 boost Switch | RADC input Mixer设置,使能MIC1通路 | 0:关闭; 1:开启 |
RADC input MixerMIC2 boost Switch | RADC input Mixer设置,使能MIC2通路 | 0:关闭; 1:开启 |
RADC input Mixerl_output mixerSwitch | RADC input Mixer设置,使能l_outputmixer通路 | 0:关闭; 1:开启 |
RADC input Mixerl_output Switch | RADC input Mixer设置,使能l_outputmixer通路 | 0:关闭; 1:开启 |
Right Output MixerDACL Switch | Right Output Mixer设置,使能DACL通路 | 0:关闭; 1:开启 |
Right Output MixerDACR Switch | Right Output Mixer设置,使能DACR通路 | 0:关闭; 1:开启 |
Right Output MixerLINEINR Switch | Right Output Mixer设置,使能LINEINR通路 | 0:关闭; 1:开启 |
Right Output MixerMIC1BooststageSwitch | Right Output Mixer设置,使能MIC1通路 | 0:关闭; 1:开启 |
Right Output MixerMIC2BooststageSwitch | Right Output Mixer设置,使能MIC2通路 | 0:关闭; 1:开启 |
SPK_L Mux | SPK_L Mux设置 | 0:MIXEL Switch; 1:MIXL MIXRSwitch |
SPK_R Mux | SPK_R Mux设置 | 0:MIXER Switch; 1:MIXR MIXLSwitch |
digital volume | 数字音量设置 | 0–63,表示-73.08–0dB |
headphone volume | headphone音量设置 | 0–63,0表示mute; 1~63表示-62dB–0dB |
lineout volume | lineout音量设置 | 0–31,表示-43.5–0dB |
speaker volume | speaker(lineout)音量设置 | 0–31,表示-43.5–0dB |
硬件特性
• 三路I2S/PCM;
• 支持主从模式
snddaudio0配置,即daudio0 machine驱动的相关配置
snddaudio配置 | snddaudio配置说明 |
---|---|
snddaudio0_used | 是否使用snddaudio驱动。 0 :不使用; 1 :使用 |
daudio0配置,即daudio0 platform驱动的相关配置
daudio配置 | daudio配置说明 |
---|---|
daudio0_used | 是否使用daudio驱动。 0 :不使用; 1 :使用 |
daudio_master | 1: SND_SOC_DAIFMT_CBM_CFM(codec clk & FRMmaster),即daudio接口作为slave, codec作为master2: SND_SOC_DAIFMT_CBS_CFM(codec clk slave &FRM master),一般不用3: SND_SOC_DAIFMT_CBM_CFS(codec clk master &frame slave),一般不用4: SND_SOC_DAIFMT_CBS_CFS(codec clk & FRMslave),即daudio接口作为master, codec作为slave |
audio_format | 1: SND_SOC_DAIFMT_I2S(standard i2s format)2: SND_SOC_DAIFMT_RIGHT_J(right justfied format)3: SND_SOC_DAIFMT_LEFT_J(left justfied format)4: SND_SOC_DAIFMT_DSP_A(pcm. MSB is availableon 2nd BCLK rising edge after LRC rising edge)5: SND_SOC_DAIFMT_DSP_B(pcm. MSB is availableon 1nd BCLK rising edge after LRC rising edge) |
signal_inversion | 1: SND_SOC_DAIFMT_NB_NF(normal bit clock +frame)2: SND_SOC_DAIFMT_NB_IF(normal BCLK + invFRM)3: SND_SOC_DAIFMT_IB_NF(invert BCLK + nor FRM)4: SND_SOC_DAIFMT_IB_IF(invert BCLK + FRM) |
slot_width_select | 支持8bit, 16bit, 32bit宽度 |
pcm_lrck_period | 一般可配置16/32/64/128/256个bclk |
msb_lsb_first | 0: msb first; 1: lsb first |
frametype | 0: short frame = 1 clock width; 1: long frame = 2clock width |
tdm_config | 0: pcm mode; 1: i2s mode |
daudio配置 | daudio配置说明 |
---|---|
tx_data_mode | 0: 16bit linear PCM;1: reserved;2: 8bit u-law;3: 8bita-law |
rx_data_mode | 0: 16bit linear PCM;1: reserved;2: 8bit u-law;3: 8bita-law |
硬件特性
• 支持 8 路输入
dmic配置,即platform驱动的相关配置
dmic配置 | dmic配置说明 |
---|---|
dmic_used | 是否使用dmic驱动。 0 :不使用; 1 :使用 |
snddmic配置,即machine驱动的相关配置
snddmic配置 | snddmic配置说明 |
---|---|
snddmic_used | 是否使用snddmic驱动。 0 :不使用; 1 :使用 |
该章节主要介绍在标案上进行播歌,录音的测试命令。
R328音频接口丰富,包含 6 个音频模块,分别是内置AudioCodec,Daudio0,Daudio1,Daudio2, Dmic,Spdif。
另外还支持MAD作语音唤醒检测(详细请看R328 MAD章节)。
R328中, 6 个音频模块的时钟源均来自pll_audio。
pll_audio可以输出24.576M或者22.5792M的时钟,分别支持48k系列,44.1k系列的播 放录音。
硬件特性
• 一路DAC
sndcodec配置,即machine驱动的相关配置
sndcodec配置 | sndcodec配置说明 |
---|---|
sndcodec_used | 是否使用sndcodec驱动。 0 :不使用; 1 :使用 |
cpudai配置,即platform驱动的相关配置
cpudai配置 | cpudai配置说明 |
---|---|
cpudai_used | 是否使用cpudai驱动。 0 :不使用; 1 :使用 |
codec配置,即内置audiocodec驱动的相关配置
codec配置 | codec配置说明 |
---|---|
codec_used | 是否使用codec驱动。 0 :不使用; 1 :使用 |
digital_vol | 初始化digital volume,可设定范围00x3f,表示0-73.08dB,-1.16dB/step |
lineout_vol | lineout volume,可设定范围00x1f,表示-43.5dB0dB, 1.5dB/step |
mic1gain | mic1增益,可设定范围0~0x7, 0:0dB, 17:1533dB, 3dB/step,一般设置0x4,即24dB |
mic2gain | mic2增益,可设定范围0~0x7, 0:0dB, 17:1533dB, 3dB/step,一般设置0x4,即24dB |
mic3gain | mic3增益,可设定范围0~0x7, 0:0dB, 17:1533dB, 3dB/step,一般设置0x4,即24dB.如果作为aec回路,则需要设置为0dB |
adcgain | adc增益,可设定范围00x7,表示-4.56dB, 1.5dB/step,一般设置0x3,即0dB |
adcdrc_cfg | 是否使用adcdrc. 0:不适用; 1 :使用 |
adchpf_cfg | 是否使用adchpf. 0:不适用; 1 :使用 |
dacdrc_cfg | 是否使用dacdrc. 0:不适用; 1 :使用 |
dachpf_cfg | 是否使用dachpf. 0:不适用; 1 :使用 |
pa_ctl_level | PA引脚使能方式。0:低电平有效; 1 :高电平有效 |
pa_msleep_time | 操作PA之后的延时时间(用来避免pop音) |
gpio-spk | PA使能引脚 |
说明
R328所有控件如下表:
控件名称 | 功能 | 数值 |
---|---|---|
Lineout Switch | 使能lineout | 0:关闭; 1:开启 |
ADC gain volume | ADC增益 | 0–7,表示-4.5–6dB,具体计算请看注释 1 |
External Speaker Switch | 使能lineout以及PA | 0:关闭; 1:开启 |
LINEOUT volume | lineout音量设置 | 0–31,表示-43.5–0dB,具体计算请看注释 2 |
Left Input Mixer DACLSwitch | Left Input Mixer设置,使能DACL通路 | 0:关闭; 1:开启 |
Left Input Mixer MIC1Boost Switch | Left Input Mixer设置,使能MIC1通路 | 0:关闭; 1:开启 |
Left Input Mixer MIC2Boost Switch | Left Input Mixer设置,使能MIC2通路 | 0:关闭; 1:开启 |
Left Input Mixer MIC3Boost Switch | Left Input Mixer设置,使能MIC3通路 | 0:关闭; 1:开启 |
Left LINEOUT Mux | Left Lineout Mux设置 | 0:DACL; 1:NULL(空) |
Right LINEOUT Mux | Right Lineout Mux设置 | 0:NULL(空); 1:DACL |
MIC1 gain volume | MIC1 Boost AMP gain | 0–7, 0:0dB, 1~7:15–33dB,具体计算请看注释 3 |
MIC2 gain volume | MIC2 Boost AMP gain | 与MIC1 gain volume设置一样 |
MIC3 gain volume | MIC3 Boost AMP gain | 与MIC1 gain volume设置一样 |
Right Input Mixer DACLSwitch | Right Input Mixer设置,使能DACL通路 | 0:关闭; 1:开启 |
Right Input Mixer MIC1Boost Switch | Right Input Mixer设置,使能MIC1通路 | 0:关闭; 1:开启 |
Right Input Mixer MIC2Boost Switch | Right Input Mixer设置,使能MIC2通路 | 0:关闭; 1:开启 |
Right Input Mixer MIC3Boost Switch | Right Input Mixer设置,使能MIC3通路 | 0:关闭; 1:开启 |
Xadc Input Mixer DACLSwitch | Xadc Input Mixer设置,使能DACL通路 | 0:关闭; 1:开启 |
Xadc Input Mixer MIC1Boost Switch | Xadc Input Mixer设置,使能MIC1通路 | 0:关闭; 1:开启 |
Xadc Input Mixer MIC2Boost Switch | Xadc Input Mixer设置,使能MIC2通路 | 0:关闭; 1:开启 |
Xadc Input Mixer MIC3Boost Switch | Xadc Input Mixer设置,使能MIC3通路 | 0:关闭; 1:开启 |
codec hub mode | 使能audiocodec hub功能 | 0:关闭; 1:开启 |
digital volume | 数字端音量设置 | 0–63,表示-73.08–0dB,具体计算请看注释 4 |
• 注释 1
• 注释 2
• 注释 3
• 注释 4
通路设置举例:
硬件特性
• 三路I2S/PCM,可用于蓝牙通话,语音采集,数字功放;
• 支持主从模式
snddaudio0配置,即daudio0 machine驱动的相关配置
snddaudio配置 | snddaudio配置说明 |
---|---|
snddaudio0_used | 是否使用snddaudio驱动。 0 :不使用; 1 :使用 |
daudio_master | 1: SND_SOC_DAIFMT_CBM_CFM(codec clk & FRMmaster),即daudio接口作为slave, codec作为master2: SND_SOC_DAIFMT_CBS_CFM(codec clk slave &FRM master),一般不用3: SND_SOC_DAIFMT_CBM_CFS(codec clk master &frame slave),一般不用4: SND_SOC_DAIFMT_CBS_CFS(codec clk & FRMslave),即daudio接口作为master, codec作为slave |
audio_format | 1: SND_SOC_DAIFMT_I2S(standard i2s format)2: SND_SOC_DAIFMT_RIGHT_J(right justfied format)3: SND_SOC_DAIFMT_LEFT_J(left justfied format)4: SND_SOC_DAIFMT_DSP_A(pcm. MSB is availableon 2nd BCLK rising edge after LRC rising edge)5: SND_SOC_DAIFMT_DSP_B(pcm. MSB is availableon 1nd BCLK rising edge after LRC rising edge) |
signal_inversion | 1: SND_SOC_DAIFMT_NB_NF(normal bit clock +frame)2: SND_SOC_DAIFMT_NB_IF(normal BCLK + invFRM)3: SND_SOC_DAIFMT_IB_NF(invert BCLK + nor FRM)4: SND_SOC_DAIFMT_IB_IF(invert BCLK + FRM) |
daudio0配置,即daudio0 platform驱动的相关配置
daudio配置 | daudio配置说明 |
---|---|
daudio0_used | 是否使用daudio驱动。 0 :不使用; 1 :使用 |
slot_width_select | 支持8bit, 16bit, 32bit宽度 |
pcm_lrck_period | 一般可配置16/32/64/128/256个bclk |
msb_lsb_first | 0: msb first; 1: lsb first |
sign_extend | 0: zero pending; 1: sign extend |
frametype | 0: short frame = 1 clock width; 1: long frame = 2clock width |
mclk_div | 0: not output(normal setting this);1/2/4/6/8/12/16/24/32/48/64/96/128/176/192:给外部codec提供时钟,频率是pll_audio/mclk_div |
tdm_config | 0: pcm mode; 1: i2s mode |
tx_data_mode | 0: 16bit linear PCM;1: reserved;2: 8bit u-law;3: 8bita-law |
rx_data_mode | 0: 16bit linear PCM;1: reserved;2: 8bit u-law;3: 8bita-law |
注意事项:
例如daudio0使用了AC108作为外挂codec:
linux-4.9/sound/soc/codecs/ac108.c 代码中snd_soc_register_codec注册codec驱动,其中codec device name为ac108.1-003b, codec dai name为ac108-pcm0 ```
硬件特性
• 支持 8 路输入
配置如下:
dmic配置,即platform驱动的相关配置
snddmic配置,即machine驱动的相关配置
因为machine驱动代码中默认配置了”dmic-codec”作为codec驱动,代码路径:
硬件特性
• 支持S/PDIF_OUT和S/PDIF_IN
spdif配置,即platform驱动的相关配置
sndspdif配置,即machine驱动的相关配置
sndspdif_used是否使用sndspdif驱动。 0 :不使用; 1 :使用
因为machine驱动代码中默认配置了”spdif-utils”作为codec驱动,代码路径:
硬件特性
mad配置 | mad配置说明 |
---|---|
mad_used | 是否使用mad驱动。 0 :不使用; 1 :使用 |
控件名称 | 功能 | 数值 |
---|---|---|
daudio bind mad Function | 是否绑定MAD功能 | 0:不绑定; 1:绑定 |
lpsd channel sel Function | 选择作为能量唤醒的通道 | 0:通道0; 1:通道1; |
如此类推,最高可指定通道7 | ||
mad_standby channel selFunction | 设定休眠时mad录音通道数 | 0:表示使用实际录音通道数; |
控件名称 | 功能 | 数值 |
---|---|---|
dmic bind mad Function | 是否绑定MAD功能 | 0:不绑定; 1:绑定 |
lpsd channel sel Function | 选择作为能量唤醒的通道 | 0:通道0; 1:通道1; |
如此类推,最高可指定通道 7 | ||
mad_standby channel selFunction | 设定休眠时mad录音通道数 | 0:表示使用实际录音通道数; 1:表示只录制两通道2:表示只录制四通道 |
固件上的配置,只要修改sys_config以及内核配置即可。
应用上需要使能MAD相关的mixer control。
I2S设置举例,例如使用的是AC108:
DMIC设置举例:
然后应用正常进行录音即可,如果需要进入休眠,有下面几点必须实现的:
Tina SDK中有一个能量唤醒demo可供参考。
make menuconfig选中mad-demo软件包
执行mad-ac108-demo,默认配置(脚本/usr/bin/mad-ac108-demo上设定了默认配置):
• 使用通道 0 作为唤醒通道;
执行mad-dmic-demo,默认配置(脚本/usr/bin/mad-dmic-demo上设定了默认配置):
• 使用通道 0 作为唤醒通道;
如果想查看录音数据,可以增加 dump 参数, 例如mad-dmic-demo dump, 录音文件保存 在/mnt/UDISK/目录下。
能量唤醒模块lpsd,识别能量主要有两个方向,瞬时能量和累计能量(前者比如是关门声,后者 比如是不断说话)能量检测参数配置均在/sys/module/sunxi_mad/parameters/目录下
lpsd_rrun和lpsd_rstop的推荐值:
lpsd_rrun | lpsd_rstop |
---|---|
77 | 88 |
77 | 108 |
77 | 128 |
77 | 148 |
• 我们建议使用默认值 1200 。建议修改范围50~1200;
VAD是基于MAD实现的,可以通过内部AudioCodec的ADC采集音频数据,并作能量唤醒。 由于硬件上MAD功能只能用于I2S或者DMIC,内部codec无法直接关联到MAD,因此通 过I2S作为音频数据的桥梁,实现了VAD功能,使得模拟MIC也可以利用MAD功能作能量唤 醒。
VAD完整的数据通路:
需要使能MAD配置:
mad配置 | mad配置说明 |
---|---|
mad_used | 是否使用mad驱动。 0 :不使用; 1 :使用 |
控件名称 | 功能 | 数值 |
---|---|---|
codec I2S Port | 指定VAD使用的I2S | 0:不适用; 1:使用I2S0; 2:使用I2S1;3:使用I2S2 |
sndcodec bind mad Function | 是否绑定MAD功能 | 0:不绑定; 1:绑定 |
lpsd channel sel Function | 选择作为能量唤醒的通道 | 0:通道0; 1:通道1; |
如此类推,最高可指定通道 7 | ||
mad_standby channel selFunction | 设定休眠时mad录音通道数 | 0:表示使用实际录音通道数; 1:表示只录制两通道2:表示只录制四通道 |
注意:
对于控件“codec I2S Port”,需要指定实际没有使用(sys_config没有使能的)的一路I2S。设置举例:
设置举例:
VAD的使用与MAD类似。
固件上的配置,只要修改sys_config以及内核配置即可。
应用上除了打开内部audiocodec的录音通路之外,还需要下面一些配置:
然后应用正常进行录音即可,如果需要进入休眠,有下面几点必须实现的:
Tina SDK中有一个能量唤醒demo可供参考make menuconfig选中mad-demo软件包
执行vad-demo,默认配置(脚本/usr/bin/vad-demo上设定了默认配置):
• 使用I2S1
如果想查看录音数据,可以执行vad-demo dump,录音文件保存在/mnt/UDISK/vad-test.wav能量唤醒阈值的调整,可以参考《能量唤醒阈值参数》
VAD同样需要注意MAD注意事项章节中提到的几点。
另外需要注意,VAD隐式使用了一路I2S,所以硬件上需要保留一路I2S,并且sys_config中不能使能该I2S配置
该章节主要介绍在标案上进行播歌,录音的测试命令
V853包含多个音频模块,分别是内置AudioCodec,I2S0,I2S1,DMIC。
V853中,音频模块的时钟源来自pll_audio0。
pll_audio0可输出22.5792M和24.576M频率的时钟,分别支持44.1k系列、48k系列的播放录音,但无法同时输出。
• 一路DAC
2.20.3.3.1 DeviceTree 配置说明 设备树为芯片平台的模块配置,面对芯片特性进行配 置,设备树文件的路径为:lichee/linux-4.9/arch/arm/boot/dts/sun8iw21p1.dtsi
配置项说明(仅对常用项进行展开):
AudioCodec模块由 3 个设备树节点构建。
表2-128: AudioCodec codec节点配置项(linux4.9)
配置项名称 | 配置项说明 |
---|---|
#sound-dai-cells | machine层检测codec和platform节点的标志 |
reg | 设置audiocodec寄存器起始地址和地址长度 |
clocks | 设置audiocodec所需的时钟源和模块时钟 |
表2-129: AudioCodec codec_plat节点配置项(linux4.9)
配置项名称 | 配置项说明 |
---|---|
#sound-dai-cells | machine层检测codec和platform节点的标志 |
playback_cma | 设置播放流DMA申请的size大小,必须为(2ˆn)Kbyte,默认 128 |
capture_cma | 设置录音流DMA申请的size大小,必须为(2ˆn)Kbyte,默认 128 |
tx_fifo_size | 设置播放流snd_pcm_runtime的fifo_size大小,用于声卡硬件参数限定,默认 128 |
rx_fifo_size | 设置录音流snd_pcm_runtime的fifo_size大小,用于声卡硬件参数限定,默认 128 |
dac_txdata | 设置播放流DMA搬运地址(audiocodec模块的tx_fifo寄存器地址) |
adc_txdata | 设置录音流DMA搬运地址(audiocodec模块的rx_fifo寄存器地址) |
表2-130: AudioCodec codec_mach节点配置项(linux4.9)
配置项名称 | 配置项说明 |
---|---|
soundcard-mach | machine层配置前缀 |
name | 声卡名字 |
pin-switches | 用于定义模块接口开关(需参考驱动代码dapm进行设定) |
routing | 用于定义模块接口开关所链接的dapm通路(需参考驱动代码dapm进行设定) |
cpu | machine层所绑定的cpu节点(即platform层),用sound-dai属性指定节点 |
codec | machine层所绑定的codec节点(即codec层),用sound-dai属性指定节点 |
pll-fs | 指定模块时钟源频率(24.576M or 22.5792M * pll-fs) |
2.20.3.3.2 board.dts板级配置说明
board.dts用于保存板级平台设备差异化的信息的补充,面对 板型特性 进行配置,其配置信息会覆盖device tree默认配置信息,board.dts文件的路径为:/device/config/chips/v853/configs/{BOARD}/board.dts
配置项介绍:
表2-131: AudioCodec模块板级配置项
配置项名称 | 配置值范围 | 配置项说明 |
---|---|---|
status | “okay”, “disabled” | 使能或关闭该节点驱动 |
avcc-external | 注释为false,反之为ture | avcc电源是否为外围电路提供 |
avcc-supply | 注释,引用pmu提供的电源节点 | avcc若为外部pmu供电,可选择该项指定对应的pmu电源 |
avcc-vol u32 | (缺省值:1800000 ) | avcc电压值设定,单位uV,需符合实际硬件需求 |
dvcc-external | 注释为false,反之为ture | dvcc电源是否为外围电路提供 |
dvcc-supply | 注释,引用pmu提供的电源节点 | dvcc若为外部pmu供电,可选择该项指定对应的pmu电源 |
dvcc-vol | u32(缺省值:1800000 ) | dvcc电压值设定,单位uV,需符合实际硬件需求 |
adc-dig-vol-(n) | 0~255 | adc(n)数字音量,(n)代表adc序号,从 1开始递增 |
mic(n)_vol | 0~31 | mic(n)默认输入音量(增益),(n)代表mic序号,从 1 开始递增 |
dac-dig-vol | 0~63 dac | 数字总音量 |
dac-dig-vol-(n) | 0~255 | dac(n)数字音量,(n)代表dac序号,从 1开始递增 |
lineout-vol | 0~31 | lineout默认输出音量(增益) |
hp-vol | 0~7 | 耳机默认输出音量(增益) |
pa-pin-max | u32(正常为 1 或 2 ) | 标定外部功放芯片使能引脚数量 |
pa-pin-(n) | pio提供的引脚节点 | 指定第(n)个功放使能引脚 |
pa-pin-level-(n) | 0~1 | 指定功放芯片使能电平 |
pa-pin-msleep-(n) | u32(正常小于 200 ) | 设置功放芯片使能所需的sleep时长,用于规避pop声,单位ms |
adcdelaytime | u32(需符合IC规格) | 设置adc录音延迟时长,单位ms |
tx-hub-en | 注释为false,反之为ture | 选择是否注册txhub控件 |
rx-sync-en | 注释为false,反之为ture | 选择是否注册rxsync控件 |
V853所有控件如下表:
表2-132: amixer控件表
控件名称 | 功能 | 数值 |
---|---|---|
ADC1 ADC2 swap | 将adc1和adc2进行通道交换 | |
ADC1 volume | ADC1数字音量设置 | 0~0xFF, 0:Mute;10xFF:-119.25dB 71.24dB,0.75dB/step,默认0xA0=0dB |
ADC2 volume | ADC2数字音量设置 | 0~0xFF, 0:Mute;10xFF:-119.25dB 71.24dB,0.75dB/step,默认0xA0=0dB |
ADCDRC | 开启ADC DRC功能 | |
ADCHPF | 开启adc hpf功能 | |
DAC volume | DACL,DACR音量设置 | 0~0xFF, 0:Mute;10xFF:-119.25dB 71.24dB,0.75dB/step,默认0xA0=0dB |
DACDRC | 开启dac drc功能 | |
DACHPF | 开启dac hpf功能 | |
LINEIN Switch | 是否使能ADC->LINEIN的通路 | 0:关闭; 1:使能 |
LINEINL gainvolume | LINEINL增益 | 0:0dB; 1:6dB |
LINEINR gainvolume | LINEINR增益 | 0:0dB; 1:6dB |
LINEOUT OutputSelect | Lineout输出选择 | 0:单端; 1:差分 |
LINEOUT Switch | 是否使能Lineout通路 | 0:关闭; 1:使能 |
LINEOUT volume | Lineout音量设置 | 031,表示-43.50dB |
MIC1 Input Select | MIC1输入模式 | 0:差分输入; 1:单端输入 |
MIC1 Switch | 是否使能ADC1->MIC1的通路 | 0:关闭; 1:使能 |
MIC1 gain volume | MIC1增益 | 031,表示036dB, 0:0dB,13:6dB,<br/>431:9~36dB, 1dB/step |
MIC2 Input Select | MIC2输入模式 | 0:差分输入; 1:单端输入 |
MIC2 Switch | 是否使能ADC2->MIC2的通路 | 0:关闭; 1:使能 |
MIC2 gain volume | MIC2增益 | 031,表示036dB, 0:0dB,13:6dB,<br/>431:9~36dB, 1dB/step |
SPK Switch | 是否使能Speaker通路(使用功放) | 0:关闭; 1:使能 |
digital volume | 数字端音量设置 | 063,表示-73.080dB |
rx sync mode | 使能同步录音(和其它开启rx sync mode的声卡) | |
tx hub mode | 使能同源播放(和其它开启tx hub mode的声卡) |
• 两路I2S/PCM,可用于蓝牙通话,语音采集,数字功放;
• 支持主从模式
2.20.4.3.1 DeviceTree 配置说明 设备树为芯片平台的模块配置,面对芯片特性进行配置,设备树文件的路径为:lichee/linux-4.9/arch/arm/boot/dts/sun8iw21p1.dtsi
配置项说明(仅对常用项进行展开):
I2S/PCM模块由 2 个或 3 个设备树节点构建。
表2-133: I2S/PCM daudio(n)_plat节点配置项(linux4.9)
配置项名称 | 配置项说明 |
---|---|
#sound-dai-cells | machine层检测codec和platform节点的标志 |
reg | 设置I2S/PCM寄存器起始地址和地址长度 |
clocks | 设置I2S/PCM所需的时钟源和模块时钟 |
playback_cma | 设置播放流DMA申请的size大小,必须为(2ˆn)Kbyte,默认 128 |
capture_cma | 设置录音流DMA申请的size大小,必须为(2ˆn)Kbyte,默认 128 |
tx_fifo_size | 设置播放流snd_pcm_runtime的fifo_size大小,用于声卡硬件参数限定,默认 128 |
rx_fifo_size | 设置录音流snd_pcm_runtime的fifo_size大小,用于声卡硬件参数限定,默认 128 |
表2-134: I2S/PCM daudio(n)_mach节点配置项(linux4.9)
配置项名称 | 配置项说明 |
---|---|
soundcard-mach | machine层配置前缀 |
name | 声卡名字 |
cpu | machine层所绑定的cpu节点(即platform层),用sound-dai属性指定节点 |
codec | machine层所绑定的codec节点(即codec层),用sound-dai属性指定节点。若该子节点下无sound-dai属性,即代表使用虚拟codec,用于辅助生成声卡 |
pll-fs | 指定模块时钟源频率(24.576M or 22.5792M * pll-fs) |
说明
2.20.4.3.2 board.dts板级配置说明 board.dts用于保存板级平台设备差异化的信息的补 充,面对 板型特性 进行配置,其配置信息会覆盖device tree默认配置信息,board.dts文件的 路径为:/device/config/chips/v853/configs/{BOARD}/board.dts
配置项介绍:
表2-135: I2S/PCM模块板级配置项
配置项名称 | 配置值范围 | 配置项说明 |
---|---|---|
status | “okay”, “disabled” | 使能或关闭该节点驱动 |
tdm-num | 0~3 | 指定I2S序号,需和daudio(n)_plat的(n)对应 |
tx-pin | 0~3 | 指定I2S所使用的DOUT引脚序号 |
rx-pin | 0~3 | 指定I2S所使用的DIN引脚序号 |
tx-hub-en | 注释为false,反之为ture | 选择是否注册txhub控件 |
rx-sync-en | 注释为false,反之为ture | 选择是否注册rxsync控件 |
format | “i2s”,“right_j”,“left_j”,“dsp_a”,“dsp_b” | 选择tdm协议格式 |
frame-master | cpu子节点,codec子节点 | 选择LRCK信号主模式 |
bitclock-master | cpu子节点,codec子节点 | 选择BCLK信号主模式 |
frame-inversion | 注释为false,反之为ture | LRCK信号是否翻转 |
bitclock-inversion | 注释为false,反之为ture | BCLK信号是否翻转 |
slot-num | 1~16 | slot数量(可简单理解为支持最大通道数) |
slot-width | 8, 16, 24, 32 | 单个slot宽度(可简单理解为支持最大数据精度) |
mclk-fp | 注释为false,反之为ture | ture: mclk以固定频段输出;false: mclk以采样率倍数输出 |
mclk-fs | u32 | 固定频段:mclk = mclk-fs * 12.288M or 11.2896M采样率倍数:mclk = mclk-fs * pcm rate |
硬件特性
• 支持 4 路输入
2.20.5.2.1 DeviceTree 配置说明 设备树为芯片平台的模块配置,面对芯片特性进行配 置,设备树文件的路径为:lichee/linux-4.9/arch/arm/boot/dts/sun8iw21p1.dtsi
配置项说明(仅对常用项进行展开):
DMIC模块由 2 个设备树节点构建。
表2-136: DMIC dmic_plat节点配置项(linux4.9)
配置项名称 | 配置项说明 |
---|---|
#sound-dai-cells | machine层检测codec和platform节点的标志 |
reg | 设置DMIC寄存器起始地址和地址长度 |
clocks | 设置DMIC所需的时钟源和模块时钟 |
capture_cma | 设置录音流DMA申请的size大小,必须为(2ˆn)Kbyte,默认 128 |
rx_fifo_size | 设置录音流snd_pcm_runtime的fifo_size大小,用于声卡硬件参数限定,默认 128 |
表2-137: DMIC dmic_mach节点配置项(linux4.9)
配置项名称 | 配置项说明 |
---|---|
soundcard-mach | machine层配置前缀 |
name | 声卡名字 |
cpu | machine层所绑定的cpu节点(即platform层),用sound-dai属性指定节点 |
codec | machine层所绑定的codec节点(即codec层),用sound-dai属性指定节点(使用虚拟codec) |
capture_only | 设置仅录音,不进行播放流设备创建pll-fs 指定模块时钟源频率(24.576M or 22.5792M * pll-fs) |
2.20.5.2.2 board.dts板级配置说明 board.dts用于保存板级平台设备差异化的信息的补 充,面对 板型特性 进行配置,其配置信息会覆盖device tree默认配置信息,board.dts文件的 路径为:/device/config/chips/v853/configs/{BOARD}/board.dts
配置项介绍:
表2-138: DMIC模块板级配置项
配置项名称 | 配置值范围 | 配置项说明 |
---|---|---|
status | “okay”, “disabled” | 使能或关闭该节点驱动 |
rx-sync-en | 注释为false,反之为ture | 选择是否注册rxsync控件 |
avcc-supply | 注释,引用pmu提供的电源节点 | avcc若为外部pmu供电,可选择该项指定对应的pmu电源 |
RX_SYNC功能用于同时使用到两个录音声卡(不同音频硬件接口),可以保证两个声卡同时开始录音,保证延迟稳定不变。
例如内部ADC+外部ADC(使用I2S)的语音方案,它就可以保证内部ADC和I2S RX的同步性。
AudioCodec, I2S, DMIC均可以使用RX_SYNC功能,除了它们对应的驱动配置外,还需要额外配置内核,dts等地方。
在希望使用到rx_sync功能的音频模块上添加rx_sync_en = <1>字段:
注意,配置了rx_sync_en字段的模块,需要都开启录音后,才会真正开始录音。
一般我们会使用multi插件将两个声卡数据合并(默认asound.conf中添加了CaptureMulti1可供参考),arecord -DCaptureMulti1 -f S16_LE -r 16000 -c 7 /tmp/test.wav &。
该章节主要介绍在标案上进行播歌,录音的测试命令
F133包含多个音频模块,分别是内置AudioCodec,I2S1,I2S2,DMIC,SPDIF。
F133中,音频模块的时钟源来自pll_audio0以及pll_audio1_div5。
pll_audio0可以输出22.5792M的时钟,而pll_audio1_div5输出24.576M的时钟,分别支 持44.1k系列,48k系列的播放录音。
• 两路DAC
kernel_menuconfig配置
配置项名称 | 配置项说明 |
---|---|
Allwinner Sun20iw1 Codec Support | audiocodec |
Allwinner Audio Simple Card | 绑定声卡 |
Allwinner RX SYNC Support | 同步功能组件 |
board.dts板级配置
部分配置项名称 | 配置取值 | 配置项说明 |
---|---|---|
mic3gain | 0-31 | mic3增益 |
digital_vol | 0-63 | DAC数字音量 |
headphonegain | 0-7 | 耳机播放增益 |
pa_level | 0-1 | 功放芯片使能电平 |
pa_pwr_level | 0-1 | 功放供电使能电平 |
pa_msleep_time | u32,一般小于 200 x | u32,一般小于 200 设置功放芯片使能所需sleep时间 |
status | “okay”/“disable” | 使能或者关闭本节点 |
• 两路I2S/PCM I2S1 I2S2
kernel_menuconfig配置
配置项名称 | 配置项说明 |
---|---|
Allwinner Sun20iw1 Codec Support | I2S/PCM |
Allwinner Audio Simple Card | 绑定声卡 |
Allwinner RX SYNC Support | 同步功能组件 |
board.dts板级配置
设备树配置sun20iw1p1.dtsi
部分配置项名称 | 配置取值 | 配置项说明 |
---|---|---|
status | “okay”“disable” | 使能或者关闭snddaudio驱动 |
mclk_div | 0-192 | mclk分频系数,取值为0/1/2/4/8/12/16/24/32/48/64/96/128/176/192 |
frametype | 0-1 | 0:short frame(1 clock width) 1:longframe(2 clock width) |
tdm_config | 0-1 | 0:PCM mode 1:I2S mode |
sign_extend | 0-1 | 0:zero pending 1:sign extend |
msb_lsb_first | 0-1 | 0:msb first 1:lsb first |
pcm_lrck_period | 16/32/64/128/256 | 一般可配置为16/32/64/128/256个bclk |
slot_width_select | 8/16/32 | slot支持8/16/32bit宽度 |
tx_data_mode | 0/1/2/3 | 0:16bit linear PCM 1:reserved2:8bit u-law 3:8bit a-law |
rx_data_mode | 0/1/2/3 | 0:16bit linear PCM 1:reserved2:8bit u-law 3:8bit a-law |
simple-audio-card,name | string | 声卡名称 |
simple-audio-card,format | string | I2S tdm模式,取值为“i2s”/“right_j”/“left_j”/“dsp_a”/“dsp_b” |
simple-audio-card,frame-master | 注释为false,反之为true | 配置frame clk主从关系,不配置则soc为主,反之soc为从 |
simple-audio-card,bitclock-master | 注释为false,反之为true | 配置bit clk主从关系,不配置则soc为主,反之soc为从 |
simple-audio-card,frame-inversion | 注释为false,反之为true | 配置frame clk极性取反;不配置则是正常极性 |
simple-audio-card,bitclock-inversion | 注释为false,反之为true | 配置bit clk极性取反;不配置则是正常极性 |
simple-audio-card,capture_only | 注释为false,反之为true | 仅支持录音 |
simple-audio-card,playback_only | 注释为false,反之为true | 仅支持播放 |
配置项名称 | 配置项说明 |
---|---|
Allwinner Sun20iw1 Codec Support | dmic |
Allwinner Audio Simple Card | 绑定声卡 |
Allwinner RX SYNC Support | 同步功能组件 |
部分配置项名称 | 配置取值 | 配置项说明 |
---|---|---|
status | “okay”/“disable” | 使能或者关闭本节点 |
rx_sync_en | 注释为false反之为true | 是否注册rx_sync组件 |
配置项名称 | 配置项说明 |
---|---|
Allwinner Sun20iw1 Codec Support | spdif |
Allwinner Audio Simple Card | 绑定声卡 |
Allwinner RX SYNC Support | 同步功能组件 |
部分配置项名称 | 配置取值 | 配置项说明 |
---|---|---|
status | “okay” “disable” | 使能或者关闭本节点 |
rx_sync_en | 注释为false反之为true | 是否注册rx_sync组件 |
该章节主要介绍在标案上进行播歌,录音的测试命令
2.配置I2S Loopback功能:amixer -D hw:snddaudio2 cset name=‘sunxi daudio loopback debug’ 1 3.开始录音:arecord -D hw:snddaudio2 -f S16_LE -r 44100 -c 2 /tmp/test_su.wav --period-size 1024 --buffer-size 4096 & 4.开始播放:aplay -D hw:snddaudio2 /tmp/16000.wav 5.aplay播放结束后,killall arecord结束录音任务 6.通过adb命令把test_su.wav拉出来,在PC端查看音频数据是否跟播放的内容一致
标准ALSA工具,它使用到alsa-lib标准库,一般常用到的有amixer,aplay,arecord等。
amixer是命令行的ALSA声卡驱动调节器工具,用于设置mixer control。
使用方法:
• 常用选项
选项 | 功能 |
---|---|
-D,–device | 指定声卡设备,默认使用defaul |
• 常用命令
命令 | 功能 |
---|---|
controls | 列出指定声卡的所有控件 |
contents | 列出指定声卡的所有控件的具体信息 |
cget | 获取指定控件的信息 |
cset | 设定指定控件的值 |
举例:
aplay是命令行的ALSA声卡驱动的播放工具,用于播放功能。
使用方法:
选项 | 功能 |
---|---|
-D,–device | 指定声卡设备,默认使用default |
-l,–list-devices | 列出当前所有声卡 |
-t,–file-type | 指定播放文件的格式,如voc,wav,raw,不指定的情况下会去读取文件头部作识别 |
-c,–channels | 指定通道数 |
-f,–format | 指定采样格式 |
-r,–rate | 采样率 |
-d,–duration | 指定播放的时间 |
–period-size | 指定period size |
–buffer-size | 指定buffer size |
如果播放的是wav文件,可以解析头部,识别通道数,采样率等参数。
举例:
arecord是命令行的ALSA声卡驱动的录音工具,用于录音功能。
使用方法:
选项 | 功能 |
---|---|
-D,–device | 指定声卡设备,默认使用default |
-l,–list-devices | 列出当前所有声卡 |
-t,–file-type | 指定播放文件的格式,如voc,wav,raw,不指定的情况下会去读取文件头部作识别 |
-c,–channels | 指定通道数 |
-f,–format | 指定采样格式 |
-r,–rate | 采样率 |
-d,–duration | 指定播放的时间 |
–period-size | 指定period size |
–buffer-size | 指定buffer size |
举例:
alsaconf指的是ALSA configuration file,使用alsa-lib打开声卡,操作pcm, mixer时,会 加载相关位置上的配置文件,用于指导操作pcm,mixer设备。
首先会读取配置文件/usr/share/alsa/alsa.conf,其中有下面一段hooks。
这里设定了一个钩子,去读取相关目录配置文件:
这些配置文件可以设定defaut声卡,自定义pcm设备,alsa插件等功能,具体可以参考:
https://www.alsa-project.org/alsa-doc/alsa-lib/conf.html
https://www.alsa-project.org/alsa-doc/alsa-lib/pcm_plugins.html
tina sdk下有相关软件包会设置/etc/asound.conf,可以用作参考。
使用方法:
tina根目录下执行make menuconfig,选择alsa-conf-aw软件包。
它会生成/etc/asound.conf文件,下面作简单介绍:
tinyalsa是alsa-lib的一个简化版。它提供了pcm和control的基本接口;没有太多太复杂的 操作、功能。可以按需使用接口。tinyalsa-utils是基于tinyalsa的一些工具,下面对几个常用 的工具作介绍。
与amixer作用类似,用于操作mixer control。
• 常用选项
选项 | 功能 |
---|---|
-D,–card | 指定声卡设备,默认使用card0 |
• 常用命令
命令 | 功能 |
---|---|
controls | 列出指定声卡的所有控件 |
contents | 列出指定声卡的所有控件的具体信息 |
get | 获取指定控件的信息 |
set | 设定指定控件的值 |
举例:
与aplay作用类似,用于操作声卡设备进行播放
• 常用选项
选项 | 功能 |
---|---|
-D,–card | 指定声卡设备,默认使用card0 |
-p,–period-size | 指定period大小,单位为帧 |
-c,–channels | 指定通道数 |
-r,–rate | 指定采样率 |
-b,–bits | 指定采样精度 |
如果播放的是wav文件,可以解析头部,识别通道数,采样率等参数
举例:
与arecord作用类似,用于操作声卡进行录音功能
• 常用选项
选项 | 功能 |
---|---|
-D,–device | 指定声卡设备,默认使用card0 |
-p,–period-size | 指定period大小,单位为帧 |
-c,–channels | 指定通道数 |
-r,–rate | 指定采样率 |
-b,–bits | 指定采样精度 |
举例:
我们sunxi平台均提供了sunxi_dump驱动,用于查看读写寄存器。
节点位于/sys/class/sunxi_dump目录。
但是audiocodec模拟寄存器的操作会有些特殊,我们一般在audio驱动中都会增加相关调试节 点,去操作自己模块的寄存器,以便调试。
audiocodec驱动的寄存器调试节点位于:
使用方法:
通过echo写入下列参数
参数1: 0-read; 1-write
参数2: 1-digitar reg; 2-analog reg
参数3: reg value
参数4: write value
举例:
查看所有寄存器状态:
查看某个数字寄存器状态:
查看某个模拟寄存器状态:
改写某个数字寄存器:
改写某个模拟寄存器:
查看spec可以知道i2s模块的寄存器基地址
可以通过sunxi_dump节点查询寄存器状态,例如查看i2s0的寄存器:
查看spec可以知道dmic模块的寄存器基地址
可以通过sunxi_dump节点查询寄存器状态:
查看spec可以知道spdif模块的寄存器基地址
可以通过sunxi_dump节点查询spdif寄存器状态:
通过procfs文件系统下面的声卡相关节点,可以得到各个声卡各个音频流的状态。实际调试中会 非常有用。
内核需要选中下面选项才能在procfs下生成对应节点:
以card0为例看下提供的节点信息:
其中,hw_params, status都能拿到比较有用的信息:
这里主要介绍alsa-lib中的常用接口
为了方便操作访问,alsa-lib中封装了相关接口,通过control节点(/dev/snd/controlCX)去获 取、设置control elements
主要涉及到的接口:
详细control接口说明请查阅:
https://www.alsa-project.org/alsa-doc/alsa-lib/control.html
https://www.alsa-project.org/alsa-doc/alsa-lib/group___control.html
下面是一个设置音量接口的例子:
}
bool controlVolume(int volume_percent) { int err = -1; snd_ctl_t *handle = NULL; char *card = DEV_NAME; char *volume_control = VOLUME_CONTROL; char volume_string[4]; long min, max, raw; snd_ctl_elem_info_t *info = NULL; snd_ctl_elem_id_t *id = NULL; snd_ctl_elem_value_t *control = NULL; if (volume_percent > 100 || volume_percent < 0) return false; snd_ctl_elem_info_alloca(&info); snd_ctl_elem_id_alloca(&id); snd_ctl_elem_value_alloca(&control); err = snd_ctl_ascii_elem_id_parse(id, volume_control); if (err < 0) { fprintf(stderr, “Wrong control identifier: %s\n”, volume_control); goto failed; } err = snd_ctl_open(&handle, card, 0); if (err < 0) { fprintf(stderr, “Control device %s open error:%s\n”, card, snd_strerror(err)); goto failed; } snd_ctl_elem_info_set_id(info, id); err = snd_ctl_elem_info(handle, info); if (err < 0) { fprintf(stderr, “Cannot find the given element from control %s\n”, card); goto failed; } snd_ctl_elem_info_get_id(info, id); snd_ctl_elem_value_set_id(control, id); err = snd_ctl_elem_read(handle, control); if (err < 0) { fprintf(stderr, “Cannot read the given element from control %s\n”, card); goto failed; } min = snd_ctl_elem_info_get_min(info); max = snd_ctl_elem_info_get_max(info); snprintf(volume_string, sizeof(volume_string), “%d”, convert_volume(volume_percent, min , max)); /printf(“set volume %s, [%u%%]\n”, volume_string, volume_percent);/ err = snd_ctl_ascii_value_parse(handle, control, info, volume_string); if (err < 0) { fprintf(stderr, “Control %s parse error: %s\n”, card, snd_strerror(err)); goto failed; } err = snd_ctl_elem_write(handle, control);
为了方便操作访问,alsa-lib中封装了相关接口,通过pcmCXDXp/pcmCXDXc节点(/dev/s- nd/pcmCXDXx)去实现播放、录音功能。
主要涉及到的接口:
详细pcm接口说明请查阅:
https://www.alsa-project.org/alsa-doc/alsa-lib/pcm.html
https://www.alsa-project.org/alsa-doc/alsa-lib/group___p_c_m.html
接口使用例子可以参考aplay,arecord的实现,代码可以在alsa-utils中找到(dl/alsa-utils- 1.1.0.tar.bz2)
这里开机音乐功能,指的是在uboot阶段开始启动dma将音频数据搬运到AudioCodec的 FIFO中进行播歌,同时CPU继续开机流程进入内核。进入系统后,在合适的启动脚本中加载音 频驱动模块(如果builtin,那么音乐会提前中止),这样开机音乐可以大大的提前,给用户一种迅 速开机的错觉。
目前SDK代码中支持uboot开机音乐功能的平台有:R6,R7s,R11,R16,R328,R311,MR133
配置使用方法都比较类似,下面以R328为例进行说明。
为了方便操作访问,alsa-lib中封装了相关接口,通过pcmCXDXp/pcmCXDXc节点(/dev/s- nd/pcmCXDXx)去实现播放、录音功能。
主要涉及到的接口:
详细pcm接口说明请查阅:
https://www.alsa-project.org/alsa-doc/alsa-lib/pcm.html
https://www.alsa-project.org/alsa-doc/alsa-lib/group___p_c_m.html
接口使用例子可以参考aplay,arecord的实现,代码可以在alsa-utils中找到(dl/alsa-utils- 1.1.0.tar.bz2)
这里开机音乐功能,指的是在uboot阶段开始启动dma将音频数据搬运到AudioCodec的 FIFO中进行播歌,同时CPU继续开机流程进入内核。进入系统后,在合适的启动脚本中加载音 频驱动模块(如果builtin,那么音乐会提前中止),这样开机音乐可以大大的提前,给用户一种迅 速开机的错觉。
目前SDK代码中支持uboot开机音乐功能的平台有:R6,R7s,R11,R16,R328,R311,MR133
配置使用方法都比较类似,下面以R328为例进行说明。
[外链图片转存中…(img-SbAophv6-1677205397769)]