前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Tina_Linux_音频_开发指南

Tina_Linux_音频_开发指南

作者头像
韦东山
发布2023-02-25 10:08:01
7.3K0
发布2023-02-25 10:08:01
举报
文章被收录于专栏:韦东山嵌入式韦东山嵌入式

文章目录

OpenRemoved_Tina_Linux_音频_开发指南

1 概述

1.1 编写目的

介绍Tina平台音频模块的使用方法。

1.2 适用范围

Allwinner软件平台Tina。

Allwinner 硬件平台R6, R7s, R11, R16, R18, R30, R58, R328, R332, R333, R311, MR133, T7, R329, MR813, R818, R818B, R528, H133, V853, F133。

1.3 相关人员

Tina平台下进行音频模块开发的工程师。

1.4 相关术语

术语

解释说明

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

2 模块介绍

Linux中的音频子系统采用ALSA架构实现。ALSA目前已经成为了Linux的主流音频体系结构。在内核设备驱动层,ALSA提供了alsa-driver,同时在应用层,ALSA为我们提供了alsa-lib,应用程序只要调用alsa-lib提供的API,即可以完成对底层音频硬件的控制。

2.1 驱动框架

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驱动把它们结合在一起才能完成整个设备的音频处理工作。

图2-1: ASoC框图
图2-1: ASoC框图

2.2 音频接口介绍.

我们提供的音频接口有:

  • AudioCodec
  • Daudio(I2S)
  • Dmic
  • Spdif
  • MAD

不同芯片平台的音频接口资源会有差异;不同版本的内核,对应的ALSA驱动也有所不同;下面会对各个芯片作详细介绍。

2.3 R6音频接口

2.3.1 硬件资源

R6包含 2 个音频模块,分别是内置audiocodec以及daudio0。

图2-2: R6音频硬件框图
图2-2: R6音频硬件框图
2.3.2 时钟源

R6中, 2 个音频模块的时钟源均来自pll_audio。

pll_audio可以输出24.576M或者22.5792M的时钟,分别支持48k系列,44.1k系列的播放录音。

图2-3: R6时钟源
图2-3: R6时钟源
2.3.3 代码结构
2.3.4 Audiocodec.

硬件特性

  • 两路DAC
    • 支持16bit,24bit采样精度
    • 支持8KHz~192KHz采样率
  • 一路ADC
    • 支持16bit,24bit采样精度
    • 支持8KHz~48KHz采样率
  • 一路模拟输出:一路立体声headphone输出(HPL, HPR)
  • 四路模拟输入:MIC,FMINL,FMINR,LINEIN
  • 支持同时playback和record(全双工模式)
2.3.4.1 内核配置
2.3.4.2 sys_config配置.

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 :高电平有效

说明

  • 如果想要正常加载audiocodec 声卡, 需要把codec,platform,machine 驱动都选上, 即codec_used,cpudai_used,sndcodec_used 都置为1;
  • headphonevol 等值会在驱动初始化的时候设置,进入系统后还可以通过amixer 工具对应控件进行再次修改;
  • 注意gpio-spk 是否配置正确,是否有其他模块复用了该gpio;
  • 除了gpio-spk 指定pa 使能引脚外,驱动中也会检测gpio_num 字段,所以可以直接将gpio 号赋值gpio_num;
  • 注意gpio_shdn,实际功放的PA 引脚是高电平有效,还是低电平有效
2.3.4.3 codec数据通路
图2-4: R6音频通路
图2-4: R6音频通路

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

录音通路设置举例:

  1. 录音单声道数据
  1. 内部AEC(可省去外部AEC电路)
2.3.5 Daudio.

硬件特性

  • 一路I2S/PCM;
  • 支持主从模式
  • 支持Left-justified,Right-justified,Standar mode I2S,PCM mode
  • 支持i2s,pcm协议格式配置
  • 支持mono和stereo模式,最高支持 2 通道
  • 支持同时playback和record(全双工模式)
  • 支持8~192KHz采样率
  • 支持16,24,32bit采样精度
2.3.5.1 内核配置
2.3.5.2 sys_config配置.

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

2.3.6 外挂codec:AC101

R6标案使用的AC101作双声道录音,audiocodec则录制回路作AEC下面对R6如何配置使 用AC101作简单介绍

2.3.6.1 内核配置
2.3.6.2 sys_config&dts配置.

R6通过TWI1控制AC101,而I2S0用于音频数据的传输

TWI部分配置,可通过dts进行配置:

I2S部分配置可以通过dts配置,也可以通过sys_config覆盖dts的配置

i2s相关格式需要根据AC101 spec进行配置

而snddaudio0中,注意codec的名称,需要与实际AC101的dev name相匹配,而codec-dai名称则与AC101驱动中设置的dai name相匹配

2.3.7 标案音频测试方法

该章节主要介绍在标案上进行播歌,录音的测试命令。

2.3.7.1 播放

如《R6 AudioCodec数据通路》章节所说,驱动代码中已固定配置了播放通路进入系统后直接通过aplay工具进行播放即可,如:

可通过下面命令调节硬件上的模拟音量:

2.3.7.2 录音

标案使用AC101进行双声道录音录音前需要配置AC101的音频通路,SDK默认在启动时会进行设置,相关配置脚本在:

可以直接通过arecord命令进行录音:

2.4 R7s音频接口

2.4.1 硬件资源

R7s包含 2 个音频模块,分别是内置AudioCodec以及Daudio0。

图2-5: R7s音频硬件框图
图2-5: R7s音频硬件框图
2.4.2 时钟源

R7s中, 2 个音频模块的时钟源均来自pll_audio。

pll_audio可以输出24.576M或者22.5792M的时钟,分别支持48k系列,44.1k系列的播放录音。

图2-6: R7s时钟源
图2-6: R7s时钟源
2.4.3 代码结构
2.4.4 Audiocodec.

硬件特性

  • 两路DAC
    • 支持16bit,24bit采样精度
    • 支持8KHz~192KHz采样率
  • 两路ADC
    • 支持16bit,24bit采样精度
    • 支持8KHz~48KHz采样率
  • 两路模拟输出:
    • 一路立体声LINEOUT输出(LINEOUTP, LINEOUTN)
    • 一路立体声headphone输出(HPOUTL, HPOUTR)
  • 两路模拟输入:MIC1,MIC2
    • 支持同时playback和record(全双工模式)
    • 支持ADC的AGC,DRC功能
    • 支持DAC的DRC功能
2.4.4.1 内核配置
2.4.4.2 sys_config配置.

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

2.4.4.3 codec数据通路
图2-7: R7s音频通路
图2-7: R7s音频通路

控件名称

功能

数值

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

通路设置举例:

  1. 播放通路
  1. 录音通路
2.4.5 Daudio.

硬件特性

  • 一路I2S/PCM;
  • 支持主从模式
  • 支持Left-justified,Right-justified,Standar mode I2S,PCM mode
  • 支持i2s,pcm协议格式配置
  • 支持mono和stereo模式
  • 支持同时playback和record(全双工模式)
  • 支持8~192KHz采样率
  • 支持16,24,32bit采样精度
2.4.5.1 内核配置
2.4.5.2 sys_config配置.

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引脚

2.4.6 标案音频测试方法

该章节主要介绍在标案上进行播歌,录音的测试命令。

2.4.6.1 播放

可通过下面命令调节硬件上的模拟音量:

2.4.6.2 录音

表示下使用audiocodec进行MIC1,MIC2录音。

2.5 R11音频接口

2.5.1 硬件资源

R11包含 2 个音频模块,分别是内置AudioCodec以及Daudio0。

图2-8: R11音频硬件框图
图2-8: R11音频硬件框图

2.5.2 时钟源

R11中, 2 个音频模块的时钟源均来自pll_audio。

pll_audio可以输出24.576M或者22.5792M的时钟,分别支持48k系列,44.1k系列的播放录音。

图2-9: R11时钟源
图2-9: R11时钟源

2.5.3 代码结构

2.5.4 AudioCodec

硬件特性

  • 两路DAC
    • 支持16bit,24bit采样精度
    • 支持8KHz~192KHz采样率
  • 两路ADC
    • 支持16bit,24bit采样精度
    • 支持8KHz~48KHz采样率
  • 一路模拟输出:一路立体声LINEOUT输出(LINEOUTP, LINEOUTN)
  • 一路路模拟输入:MIC1
  • 支持同时playback和record(全双工模式)
  • 支持ADC的AGC,DRC功能
  • 支持DAC的DRC功能
2.5.4.1 内核配置
2.5.4.2 sys_config配置.

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

2.5.4.3 codec数据通路
图2-10: R11音频通路
图2-10: R11音频通路

控件名称

功能

数值

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

通路设置举例:

  1. 播放通路
  1. 录音通路

2.5.5 Daudio.

硬件特性

  • 一路I2S/PCM;
  • 支持主从模式
  • 支持Left-justified,Right-justified,Standar mode I2S,PCM mode
  • 支持i2s,pcm协议格式配置
  • 支持mono和stereo模式,最高支持 2 通道
  • 支持同时playback和record(全双工模式)
  • 支持8~192KHz采样率
  • 支持16,24,32bit采样精度
2.5.5.1 内核配置
2.5.5.2 sys_config配置.

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引脚

2.5.6 标案音频测试方法

该章节主要介绍在标案上进行播歌,录音的测试命令。

2.5.6.1 播放

可通过下面命令调节硬件上的模拟音量:

2.5.6.2 录音

表示下使用AudioCodec进行单声道录音

2.6 R16音频接口

2.6.1 硬件资源

R16包含 3 个音频模块,分别是内置AudioCodec,I2S0以及I2S1。

图2-11: R16音频硬件框图
图2-11: R16音频硬件框图

2.6.2 时钟源

R16中, 3 个音频模块的时钟源均来自pll_audio。

pll_audio可以输出24.576M或者22.5792M的时钟,分别支持48k系列,44.1k系列的播放录音。

图2-12: R16时钟源
图2-12: R16时钟源

2.6.3 代码结构

2.6.4 AudioCodec

硬件特性

  • 两路DAC
    • 支持16bit,24bit采样精度
    • 支持8KHz~192KHz采样率
  • 两路ADC
    • 支持16bit,24bit采样精度
    • 支持8KHz~48KHz采样率
  • 两路模拟输出:
    • 一路立体声headphone输出(HPOUTL,HPOUTR)
    • 一路立体声phoneout输出(PHONEOUTP,PHONEOUTN)
  • 四路路模拟输入:MIC1,MIC2,linein,phonein
  • 支持headphone驱动
  • 支持同时playback和record(全双工模式)
2.6.4.1 内核配置
2.6.4.2 sys_config配置.

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分频系数

2.6.4.3 codec数据通路
图2-13: R16音频通路
图2-13: R16音频通路

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

2.6.5 Daudio.

硬件特性

• 两路I2S/PCM;

• 支持主从模式

  • 支持Left-justified,Right-justified,Standar mode I2S,PCM mode
  • 支持i2s,pcm协议格式配置
  • 支持mono和stereo模式,支持 8 通道输出和 2 通道输入
  • 支持同时playback和record(全双工模式)
  • 支持8~192KHz采样率
  • 支持16,24,32bit采样精度
2.6.5.1 内核配置
2.6.5.2 sys_config配置.

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引脚

2.6.6 标案音频测试方法

该章节主要介绍在标案上进行播歌,录音的测试命令。

2.6.6.1 播放

可通过下面命令调节硬件上的模拟音量:

2.6.6.2 录音

表示下使用audiocodec进行单声道录音

2.7 R18音频接口

2.7.1 硬件资源

R18包含 4 个音频模块,分别是内置AudioCodec以及Daudio0,Daudio1,Daudio2。

图2-14: R18音频硬件框图
图2-14: R18音频硬件框图

2.7.2 时钟源

R18中, 4 个音频模块的时钟源均来自pll_audio

pll_audio可以输出24.576M或者22.5792M的时钟,分别支持48k系列,44.1k系列的播放录音。

图2-15: R18时钟源
图2-15: R18时钟源

2.7.3 代码结构

2.7.4 AudioCodec

硬件特性

• 两路DAC

  • 支持16bit,24bit采样精度
  • 支持8KHz~192KHz采样率
  • 两路ADC
  • 支持16bit,24bit采样精度
  • 支持8KHz~48KHz采样率
  • 四路模拟输出:
  • 一路立体声earpiece输出(EAROUTP,EAROUTN)
  • 一路立体声phoneout输出(PHONEOUTP,PHONEOUTN)
  • 一路立体声headphone输出(HPOUTL,HPOUTR)
  • 一路立体声lineout输出(LINEOUTL,LINEOUTR)
  • 四路路模拟输入:MIC1,MIC2,linein,phonein
  • 支持headphone驱动
  • 支持earpiece驱动
  • 支持同时playback和record(全双工模式)
  • 支持适用于DAC的DRC功能
  • 支持适用于ADC的AGC,DRC功能
2.7.4.1 内核配置
2.7.4.2 sys_config配置.

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使能引脚

2.7.4.3 codec数据通路
图2-16: R18音频通路
图2-16: R18音频通路

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

2.75 Daudio.

硬件特性

• 三路I2S/PCM;

• 支持主从模式

  • 支持Left-justified,Right-justified,Standar mode I2S,PCM mode
  • 支持i2s,pcm协议格式配置
  • 支持同时playback和record(全双工模式)
  • 支持8~192KHz采样率
  • 支持16,24,32bit采样精度
2.7.5.1 内核配置
2.7.5.2 sys_config配置.

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》

2.7.6 SPDIF

硬件特性

• 支持S/PDIF_OUT

  • 支持mono和stereo模式
  • 输出支持22.05kHz, 24kHz, 32kHz, 44.1kHz, 48kHz, 88.2kHz, 96kHz, 176.4kHz, 192kHz采样率
  • 支持16bit,24bit采样精度
2.7.6.1 内核配置
2.7.6.2 sys_config配置.

spdif配置,即platform驱动的相关配置

spdif配置

spdif配置说明

spdif_used

是否使用spdif驱动。 0 :不使用; 1 :使用

sndspdif配置,即machine驱动的相关配置

sndspdif配置

sndspdif配置说明

sndspdif_used

是否使用sndspdif驱动。 0 :不使用; 1 :使用

  • sys_config中不需要配置codec驱动相关信息

因为machine驱动代码中默认配置了”spdif-utils”作为codec驱动,代码路径:

2.7.7 外挂codec:AC108

R18标案tulip-noma搭配了MIC子板,含有两片AC108,每片最高可录 4 通道

下面对R18如何配置使用AC108作简单介绍

2.7.7.1 内核配置
2.7.7.2 sys_config&dts配置.

R18通过twi1控制AC108,而i2s0用于音频数据的传输

twi部分配置,可通过dts进行配置:

I2S部分需要配置sys_config以及dts

  • sys_config部分主要涉及i2s相关格式,需要根据AC108spec进行配置,sdk默认daudio0 配置可正常运行AC108
  • dts部分主要需要指定ASOC codec以及codec-dai驱动的名称,如
2.7.7.3 使用

进入系统后,通过命令cat /proc/asound/cards列出当前声卡信息,如果发现ac108相关声 卡,说明已经正常加载驱动

无需额外设置音频通路,可直接用下面命令进行录音:

2.7.8 外挂数字功放TAS5731.

R18标案tulip-noma搭配了一片数字功放TAS5731

下面对R18如何配置使用tas5731作简单介绍

2.7.8.1 内核配置
2.7.8.2 sys_config&dts配置.

R18通过TWI0控制数字功放,而I2S1用于音频数据的传输

twi部分配置,可通过dts进行配置:

I2S部分需要配置sys_config以及dts

  • sys_config部分主要涉及i2s相关格式,需要根据具体数字功放进行配置,sdk默认daudio1 配置可正常运行tas5731
  • dts部分主要需要指定ASOC codec以及codec-dai驱动的名称,如
2.7.8.3 使用

进入系统后,通过命令cat /proc/asound/cards列出当前声卡信息,如果发现tas5731相关声 卡,说明已经正常加载驱动

无需额外设置音频通路,可直接用下面命令进行播歌:

2.7.9 HDMI音频接口

R18使用I2S2将音频数据传输到HDMI模块,并且I2S2也只能用于HDMI。

2.7.9.1 内核配置
2.7.9.2 sys_config配置.

daudio2配置,即daudio2 platform驱动的相关配置

daudio2配置

daudio2配置说明

daudio2_used

是否使用daudio2驱动。 0 :不使用; 1 :使用

sndhdmi配置,即sndhdmi machine驱动的相关配置

sndhdmi配置

sndhdmi配置说明

sndhdmi_used

是否使用sndhdmi驱动。 0 :不使用; 1 :使用

2.7.10 标案音频测试方法.

该章节主要介绍在标案上进行播歌,录音的测试命令。

2.7.10.1播放

可通过下面命令调节硬件上的模拟音量:

2.7.10.2录音

2.8 R30音频接口

2.8.1 硬件资源

R30包含 5 个音频模块,分别是内置AudioCodec,Daudio0,Daudio1,Daudio2以及Dmic

图2-17: R30音频硬件框图
图2-17: R30音频硬件框图

2.8.2 时钟源

R30中, 5 个音频模块的时钟源均来自pll_audio。

pll_audio可以输出24.576M或者22.5792M的时钟,分别支持48k系列,44.1k系列的播 放录音。

图2-18: R30时钟源
图2-18: R30时钟源

2.8.3 代码结构

2.8.4 AudioCodec

硬件特性

• 两路DAC

  • 支持16bit,24bit采样精度
  • 支持8KHz~192KHz采样率
  • 两路ADC
  • 支持16bit,24bit采样精度
  • 支持8KHz~48KHz采样率
  • 四路模拟输出:
  • 一路立体声earpiece输出(EAROUTP,EAROUTN)
  • 一路立体声phoneout输出(PHONEOUTP,PHONEOUTN)
  • 一路立体声headphone输出(HPOUTL,HPOUTR)
  • 一路立体声lineout输出(LINEOUTL,LINEOUTR)
  • 四路路模拟输入:MIC1,MIC2,linein,phonein
  • 支持headphone驱动
  • 支持earpiece驱动
  • 支持同时playback和record(全双工模式)
  • 支持适用于DAC的DRC功能
  • 支持适用于ADC的AGC,DRC功能
2.8.4.1 内核配置
2.8.4.2 sys_config配置.

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使能引脚

2.8.4.3 codec数据通路
图2-19: R30音频通路
图2-19: R30音频通路

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

2.8.5 Daudio.

硬件特性

• 三路I2S/PCM;

• 支持主从模式

  • 支持Left-justified,Right-justified,Standar mode I2S,PCM mode
  • 支持i2s,pcm协议格式配置
  • 支持同时playback和record(全双工模式)
  • 支持8~192KHz采样率
  • 支持16,24,32bit采样精度
2.8.5.1 内核配置
2.8.5.2 sys_config配置.

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

2.8.6 DMIC

硬件特性

• 支持 8 路输入

  • 支持8~48KHz采样率
  • 支持16/24bit采样精度
2.8.6.1 内核配置
2.8.6.2 sys_config配置.

dmic配置,即platform驱动的相关配置

dmic配置

dmic配置说明

dmic_used

是否使用dmic驱动。 0 :不使用; 1 :使用

snddmic配置,即machine驱动的相关配置

snddmic配置

snddmic配置说明

snddmic_used

是否使用snddmic驱动。 0 :不使用; 1 :使用

2.8.7 标案音频测试方法

该章节主要介绍在标案上进行播歌,录音的测试命令。

2.8.7.1 播放
2.8.7.2 录音

2.9 R328音频接口.

2.9.1 硬件资源

R328音频接口丰富,包含 6 个音频模块,分别是内置AudioCodec,Daudio0,Daudio1,Daudio2, Dmic,Spdif。

另外还支持MAD作语音唤醒检测(详细请看R328 MAD章节)。

图2-34: R328音频硬件框图
图2-34: R328音频硬件框图

2.9.2 时钟源.

R328中, 6 个音频模块的时钟源均来自pll_audio。

pll_audio可以输出24.576M或者22.5792M的时钟,分别支持48k系列,44.1k系列的播 放录音。

图2-35: R328时钟源
图2-35: R328时钟源

2.9.3 代码结构

2.9.4 AudioCodec

硬件特性

• 一路DAC

  • 支持16bit,24bit采样精度
  • 支持8KHz~192KHz采样率
  • 三路ADC
  • 支持16bit,24bit采样精度
  • 支持8KHz~48KHz采样率
  • 一路模拟输出:一路差分输出lineoutP/N,支持单端lineout输出
  • 三路模拟输入:MIC1,MIC2,MIC3
  • 支持同时playback和record(全双工模式)
  • DAC及ADC均支持 5 段DRC
  • DAC FIFO长度12824bits, ADC FIFO长度12824bits
2.9.4.1内核配置
2.9.4.2 sys_config配置

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使能引脚

说明

  • 如果想要正常加载 audiocodec 声卡,需要把 codec,platform,machine 驱动都选上,即 codec_used,cpudai_used,sndcodec_used 都置为 1
  • digital_vol,lineout_vol 等值会在驱动初始化的时候设置,进入系统后还可以通过 amixer 工具对应控件进行再次修改;
  • 注意 gpio-spk 是否配置正确,是否有其他模块复用了该 gpio;
  • 注意 pa_ctl_level ,实际功放的 PA 引脚是高电平有效,还是低电平有效
2.9.4.3 codec数据通路
图2-36: R328音频通路
图2-36: R328音频通路

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

通路设置举例:

  1. 播放通路
  1. 录音通路
  1. 常用AEC通路

2.14.5 Daudio

硬件特性

• 三路I2S/PCM,可用于蓝牙通话,语音采集,数字功放;

• 支持主从模式

  • 支持Left-justified,Right-justified,Standar mode I2S,PCM mode
  • 支持i2s,pcm协议格式配置
  • 支持mono和stereo模式,最高支持 8 通道
  • 支持同时playback和record(全双工模式)
  • 支持8~192KHz采样率
  • 支持16,24,32bit采样精度
  • 支持 3 路MCLK输出
2.14.5.1内核配置
2.14.5.2 sys_config配置

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

注意事项:

  • daudio machine驱动的配置(snddaudio),一般来说还需要配置codec name以及codec dai name

例如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 ```

  1. 例如daudio2与bluetooth模组相连(没有实际的codec驱动),那么这时候codec

2.14.6 Dmic

硬件特性

• 支持 8 路输入

  • 支持8~48KHz采样率
  • 支持16/24bit采样精度
2.14.6.1内核配置
2.14.6.2 sys_config配置

配置如下:

dmic配置,即platform驱动的相关配置

snddmic配置,即machine驱动的相关配置

  • sys_config中不需要配置codec驱动相关信息

因为machine驱动代码中默认配置了”dmic-codec”作为codec驱动,代码路径:

2.14.7 SPDIF

硬件特性

• 支持S/PDIF_OUT和S/PDIF_IN

  • 支持mono和stereo模式(mono模式下由硬件自动拓展为stereo)
  • 输出支持22.05kHz, 24kHz, 32kHz, 44.1kHz, 48kHz, 88.2kHz, 96kHz, 176.4kHz, 192kHz采样率
  • 输入支持44.1KHz,48KHz采样率
  • 输出和输入支持16bit,24bit采样精度
2.14.7.1内核配置
2.14.7.2 sys_config配置

spdif配置,即platform驱动的相关配置

sndspdif配置,即machine驱动的相关配置

sndspdif_used是否使用sndspdif驱动。 0 :不使用; 1 :使用

  • sys_config中不需要配置codec驱动相关信息

因为machine驱动代码中默认配置了”spdif-utils”作为codec驱动,代码路径:

2.14.8 MAD

硬件特性

  • 支持三路I2S,一路DMIC PCM音频传输接口,时分复用,固定16bit
  • 支持16KHz,48KHz采样率
  • 支持基于能量识别的语音检测模块LPSD
  • 支持一块128KB的SRAM,可用于保存音频数据
2.14.8.1内核配置
2.14.8.2 sys_config配置

mad配置

mad配置说明

mad_used

是否使用mad驱动。 0 :不使用; 1 :使用

2.14.8.3 mixer控件说明
  1. mad绑定到I2S

控件名称

功能

数值

daudio bind mad Function

是否绑定MAD功能

0:不绑定; 1:绑定

lpsd channel sel Function

选择作为能量唤醒的通道

0:通道0; 1:通道1;

如此类推,最高可指定通道7

mad_standby channel selFunction

设定休眠时mad录音通道数

0:表示使用实际录音通道数;

  1. mad绑定到dmic

控件名称

功能

数值

dmic bind mad Function

是否绑定MAD功能

0:不绑定; 1:绑定

lpsd channel sel Function

选择作为能量唤醒的通道

0:通道0; 1:通道1;

如此类推,最高可指定通道 7

mad_standby channel selFunction

设定休眠时mad录音通道数

0:表示使用实际录音通道数; 1:表示只录制两通道2:表示只录制四通道

2.14.8.4使用说明

固件上的配置,只要修改sys_config以及内核配置即可。

应用上需要使能MAD相关的mixer control。

I2S设置举例,例如使用的是AC108:

DMIC设置举例:

然后应用正常进行录音即可,如果需要进入休眠,有下面几点必须实现的:

  1. 暂定录音、播放。snd_pcm_pause将playback,capture均暂停;
  2. 设置wakeup_count。更新当前唤醒次数;
  3. 进入休眠。写mem到/sys/power/state即可;

Tina SDK中有一个能量唤醒demo可供参考。

make menuconfig选中mad-demo软件包

执行mad-ac108-demo,默认配置(脚本/usr/bin/mad-ac108-demo上设定了默认配置):

• 使用通道 0 作为唤醒通道;

  • 录制 4 通道,16bit, 16K;
  • 每次录音5s后进入休眠,可通过语音能量唤醒;

执行mad-dmic-demo,默认配置(脚本/usr/bin/mad-dmic-demo上设定了默认配置):

• 使用通道 0 作为唤醒通道;

  • 录制 4 通道,16bit, 16K;
  • 每次录音5s后进入休眠,可通过语音能量唤醒;

如果想查看录音数据,可以增加 dump 参数, 例如mad-dmic-demo dump, 录音文件保存 在/mnt/UDISK/目录下。

2.14.8.5能量唤醒阈值参数

能量唤醒模块lpsd,识别能量主要有两个方向,瞬时能量和累计能量(前者比如是关门声,后者 比如是不断说话)能量检测参数配置均在/sys/module/sunxi_mad/parameters/目录下

lpsd_rrun和lpsd_rstop的推荐值:

lpsd_rrun

lpsd_rstop

77

88

77

108

77

128

77

148

  1. 瞬时能量检测参数,主要是lpsd_rrun和lpsd_rstop。
  • 一般我们只对stop值进行修改;
  • 如果录音数据经常缺少唤醒词的第一个字,则可以尝试降低stop值,可以有效提高唤醒词数据 的完整性。但同时会提高误唤醒率,环境噪音也会很容易触发能量检测,唤醒系统;
  • 如果想要降低误唤醒率(环境噪音造成唤醒),则可以尝试提高stop值。同样的,这会导致一些 唤醒词录音数据不完整,例如一些音量较低,音调较低的语料;
  • 唤醒词识别率以及误唤醒率无法同时兼得,客户需要根据实际需求、场景,权衡配置参数;
  1. 累积能量检测参数,主要是lpsd_th。

• 我们建议使用默认值 1200 。建议修改范围50~1200;

2.14.8.6注意事项
  1. MAD绑定动作,需要在应用打开声卡前就设置好;
  2. 应用操作上的一些要求,具体请查看《MAD使用说明》章节;
  3. 如果读取wakeup_count时一直阻塞,说明当前仍有wake_lock处于激活状态,例如usb 线连接着PC,usb驱动会保持一个wake_lock,不让系统进入休眠,所以需要拔掉usb或 者连接到usb适配器上,或者改动代码,去掉usb驱动中wake_lock的使用;

2.14.9 VAD.

VAD是基于MAD实现的,可以通过内部AudioCodec的ADC采集音频数据,并作能量唤醒。 由于硬件上MAD功能只能用于I2S或者DMIC,内部codec无法直接关联到MAD,因此通 过I2S作为音频数据的桥梁,实现了VAD功能,使得模拟MIC也可以利用MAD功能作能量唤 醒。

VAD完整的数据通路:

2.14.9.1内核配置
2.14.9.2 sys_config配置

需要使能MAD配置:

mad配置

mad配置说明

mad_used

是否使用mad驱动。 0 :不使用; 1 :使用

2.14.9.3 mixer控件说明

控件名称

功能

数值

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。设置举例:

  • 实际没有使用I2S0(sys_config中snddaudio0,audio0均没有配置),那么这里可以设置为1,表示VAD使用I2S0;
  • 实际没有使用I2S1(sys_config中snddaudio1,audio1均没有配置),那么这里可以设置为2,表示VAD使用I2S1;

设置举例:

2.14.9.4使用说明

VAD的使用与MAD类似。

固件上的配置,只要修改sys_config以及内核配置即可。

应用上除了打开内部audiocodec的录音通路之外,还需要下面一些配置:

然后应用正常进行录音即可,如果需要进入休眠,有下面几点必须实现的:

  1. 暂定录音、播放。snd_pcm_pause将playback,capture均暂停
  2. 设置wakeup_count。更新当前唤醒次数
  3. 进入休眠。写mem到/sys/power/state即可

Tina SDK中有一个能量唤醒demo可供参考make menuconfig选中mad-demo软件包

执行vad-demo,默认配置(脚本/usr/bin/vad-demo上设定了默认配置):

• 使用I2S1

  • 录制 2 通道,16bit, 16K
  • 每次录音5s后进入休眠,可通过语音能量唤醒

如果想查看录音数据,可以执行vad-demo dump,录音文件保存在/mnt/UDISK/vad-test.wav能量唤醒阈值的调整,可以参考《能量唤醒阈值参数》

2.14.9.5注意事项

VAD同样需要注意MAD注意事项章节中提到的几点。

另外需要注意,VAD隐式使用了一路I2S,所以硬件上需要保留一路I2S,并且sys_config中不能使能该I2S配置

2.14.10标案音频测试方法.

该章节主要介绍在标案上进行播歌,录音的测试命令

2.14.10.1播放
2.14.10.2录音

2.20 V853音频接口

V853包含多个音频模块,分别是内置AudioCodec,I2S0,I2S1,DMIC。

2.20.1 时钟源.

V853中,音频模块的时钟源来自pll_audio0。

pll_audio0可输出22.5792M和24.576M频率的时钟,分别支持44.1k系列、48k系列的播放录音,但无法同时输出。

图2-48: V853时钟源
图2-48: V853时钟源

2.20.2 代码结构

2.20.3 AudioCodec

2.20.3.1硬件特性

• 一路DAC

  • 支持16bit,20bit有效采样精度
  • 支持8KHz~192KHz采样率
  • 两路ADC
  • 支持16bit,20bit有效采样精度
  • 支持8KHz~48KHz采样率
  • 一路模拟输出:
  • 一路立体声输出LINEOUT,支持single/differ
  • 两路模拟输入:MIC1,MIC2
  • MIC支持single/differ,
  • 支持同时playback和record(全双工模式)
  • DAC及ADC均支持DRC
  • 支持mono模式,最高支持 2 通道
2.20.3.2内核配置
2.20.3.3 DTS配置.

2.20.3.3.1 DeviceTree 配置说明 设备树为芯片平台的模块配置,面对芯片特性进行配 置,设备树文件的路径为:lichee/linux-4.9/arch/arm/boot/dts/sun8iw21p1.dtsi

配置项说明(仅对常用项进行展开):

AudioCodec模块由 3 个设备树节点构建。

  1. ASoC层codec: codec

表2-128: AudioCodec codec节点配置项(linux4.9)

配置项名称

配置项说明

#sound-dai-cells

machine层检测codec和platform节点的标志

reg

设置audiocodec寄存器起始地址和地址长度

clocks

设置audiocodec所需的时钟源和模块时钟

  1. ASoC层platform: codec_plat

表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寄存器地址)

  1. ASoC层machine: codec_mach

表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控件

2.20.3.4 codec数据通路

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的声卡)

2.20.4 Daudio

2.20.4.1硬件特性

• 两路I2S/PCM,可用于蓝牙通话,语音采集,数字功放;

• 支持主从模式

  • 支持Left-justified,Right-justified,Standar mode I2S,PCM mode
  • 支持i2s,pcm协议格式配置
  • 支持同时playback和record(全双工模式)
  • 支持8~192KHz采样率
  • 支持16,24,32bit采样精度
  • 支持 2 路MCLK输出
2.20.4.2内核配置
2.20.4.3 DTS配置.

2.20.4.3.1 DeviceTree 配置说明 设备树为芯片平台的模块配置,面对芯片特性进行配置,设备树文件的路径为:lichee/linux-4.9/arch/arm/boot/dts/sun8iw21p1.dtsi

配置项说明(仅对常用项进行展开):

I2S/PCM模块由 2 个或 3 个设备树节点构建。

  1. ASoC层codec:非必须节点,若无,则绑定虚拟codec节点。
  2. ASoC层platform: daudio(n)_plat

表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

  1. ASoC层machine: daudio(n)_mach

表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)

说明

  • _daudio(n)plat 代表 daudio0_plat, daudio1_plat, ···(取决于芯片规格);
  • _daudio(n)mach 代表 daudio0_mach, daudio1_mach, ···(取决于芯片规格);

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

2.20.5 DMIC.

硬件特性

• 支持 4 路输入

  • 支持8~48KHz采样率
  • 支持16/24bit采样精度
2.20.5.1内核配置
2.20.5.2 DTS配置.

2.20.5.2.1 DeviceTree 配置说明 设备树为芯片平台的模块配置,面对芯片特性进行配 置,设备树文件的路径为:lichee/linux-4.9/arch/arm/boot/dts/sun8iw21p1.dtsi

配置项说明(仅对常用项进行展开):

DMIC模块由 2 个设备树节点构建。

  1. ASoC层codec:无,绑定虚拟codec节点。
  2. ASoC层platform: dmic_plat

表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

  1. ASoC层machine: dmic_mach

表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电源

2.20.6 RX_SYNC多声卡同步功能

RX_SYNC功能用于同时使用到两个录音声卡(不同音频硬件接口),可以保证两个声卡同时开始录音,保证延迟稳定不变。

例如内部ADC+外部ADC(使用I2S)的语音方案,它就可以保证内部ADC和I2S RX的同步性。

AudioCodec, I2S, DMIC均可以使用RX_SYNC功能,除了它们对应的驱动配置外,还需要额外配置内核,dts等地方。

2.20.6.1内核配置
2.20.6.2 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 &。

2.20.7 标案音频测试方法.

该章节主要介绍在标案上进行播歌,录音的测试命令

2.20.7.1播放
2.20.7.2录音

2.21 F133音频接口

F133包含多个音频模块,分别是内置AudioCodec,I2S1,I2S2,DMIC,SPDIF。

2.21.1 时钟源.

F133中,音频模块的时钟源来自pll_audio0以及pll_audio1_div5。

pll_audio0可以输出22.5792M的时钟,而pll_audio1_div5输出24.576M的时钟,分别支 持44.1k系列,48k系列的播放录音。

2.21.2 AudioCodec

2.21.2.1硬件特性

• 两路DAC

  • 支持16bit,20bit有效采样精度
  • 支持8KHz~192KHz采样率
  • 三路ADC
  • 支持16bit,20bit有效采样精度
  • 支持8KHz~48KHz采样率
  • 模拟输出:
  • 一路立体声输出HPOUTL,HPOUTR
  • 模拟差分输入:
  • 一路差分麦克风输入MIC3P/N
  • 一路立体声line-in输入LINEINL,LINEINR
  • 一路立体声FM-in输入FMINL,FMINR
  • 支持同时playback和record(全双工模式)
  • DAC及ADC均支持DRC
2.21.2.2内核配置

kernel_menuconfig配置

配置项名称

配置项说明

Allwinner Sun20iw1 Codec Support

audiocodec

Allwinner Audio Simple Card

绑定声卡

Allwinner RX SYNC Support

同步功能组件

2.21.2.3 DTS配置.

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”

使能或者关闭本节点

2.21.3 Daudio

2.21.3.1硬件特性

• 两路I2S/PCM I2S1 I2S2

  • 支持8-192k采样率
  • 支持16 24 32采样精度
  • 支持1-16多通道录音播放
  • 支持 5 种TDM模式
    • I2S standard mode
    • Left-justified mode
    • Right-justified mode
    • DSP-A mode(short frame PCM mode)
    • DSP-B mode(long frame PCM mode)
  • 支持回环模式
  • 支持同时playback和capture
  • 支持多声卡同步录音
2.21.3.2内核配置

kernel_menuconfig配置

配置项名称

配置项说明

Allwinner Sun20iw1 Codec Support

I2S/PCM

Allwinner Audio Simple Card

绑定声卡

Allwinner RX SYNC Support

同步功能组件

2.21.3.3 DTS配置.

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

仅支持播放

2.21.4 DMIC.

2.21.4.1硬件特性
  • 支持8-48k采样率
  • 支持16 24采样精度
  • 支持1-8多通道录音播放
  • 支持多声卡同步录音
2.21.4.2内核配置

配置项名称

配置项说明

Allwinner Sun20iw1 Codec Support

dmic

Allwinner Audio Simple Card

绑定声卡

Allwinner RX SYNC Support

同步功能组件

2.21.4.3 DTS配置.

部分配置项名称

配置取值

配置项说明

status

“okay”/“disable”

使能或者关闭本节点

rx_sync_en

注释为false反之为true

是否注册rx_sync组件

2.21.5 SPDIF

2.21.5.1硬件特性
  • 支持22.05-192k采样率
  • 支持16 24采样精度
  • 支持1-2多通道录音播放
  • 支持多声卡同步录音
  • 支持回环模式
  • 支持IEC-60958协议
  • 支持IEC-61937协议
2.21.5.2内核配置

配置项名称

配置项说明

Allwinner Sun20iw1 Codec Support

spdif

Allwinner Audio Simple Card

绑定声卡

Allwinner RX SYNC Support

同步功能组件

2.21.5.3 DTS配置.

部分配置项名称

配置取值

配置项说明

status

“okay” “disable”

使能或者关闭本节点

rx_sync_en

注释为false反之为true

是否注册rx_sync组件

2.21.6 标案音频测试方法.

该章节主要介绍在标案上进行播歌,录音的测试命令

2.21.6.1播放
2.21.6.2录音

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端查看音频数据是否跟播放的内容一致

3 3常用工具及调试方法

3.1 3.1 alsa-utils

标准ALSA工具,它使用到alsa-lib标准库,一般常用到的有amixer,aplay,arecord等。

3.1.1 3.1.1 amixer

amixer是命令行的ALSA声卡驱动调节器工具,用于设置mixer control。

使用方法:

• 常用选项

选项

功能

-D,–device

指定声卡设备,默认使用defaul

• 常用命令

命令

功能

controls

列出指定声卡的所有控件

contents

列出指定声卡的所有控件的具体信息

cget

获取指定控件的信息

cset

设定指定控件的值

举例:

3.1.2 3.1.2 aplay

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文件,可以解析头部,识别通道数,采样率等参数。

举例:

3.1.3 3.1.3 arecord.

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

举例:

3.1.4 3.1.4 alsaconf

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软件包。

3-1-4-1
3-1-4-1
3-1-4-2
3-1-4-2

它会生成/etc/asound.conf文件,下面作简单介绍:

3.2 3.2 tinyalsa-utils.

tinyalsa是alsa-lib的一个简化版。它提供了pcm和control的基本接口;没有太多太复杂的 操作、功能。可以按需使用接口。tinyalsa-utils是基于tinyalsa的一些工具,下面对几个常用 的工具作介绍。

3.2.1 3.2.1 tinymix

与amixer作用类似,用于操作mixer control。

• 常用选项

选项

功能

-D,–card

指定声卡设备,默认使用card0

• 常用命令

命令

功能

controls

列出指定声卡的所有控件

contents

列出指定声卡的所有控件的具体信息

get

获取指定控件的信息

set

设定指定控件的值

举例:

3.2.2 3.2.2 tinyplay

与aplay作用类似,用于操作声卡设备进行播放

• 常用选项

选项

功能

-D,–card

指定声卡设备,默认使用card0

-p,–period-size

指定period大小,单位为帧

-c,–channels

指定通道数

-r,–rate

指定采样率

-b,–bits

指定采样精度

如果播放的是wav文件,可以解析头部,识别通道数,采样率等参数

举例:

3.2.3 3.2.3 tinycap

与arecord作用类似,用于操作声卡进行录音功能

• 常用选项

选项

功能

-D,–device

指定声卡设备,默认使用card0

-p,–period-size

指定period大小,单位为帧

-c,–channels

指定通道数

-r,–rate

指定采样率

-b,–bits

指定采样精度

举例:

3.3 3.3 dump寄存器

我们sunxi平台均提供了sunxi_dump驱动,用于查看读写寄存器。

节点位于/sys/class/sunxi_dump目录。

但是audiocodec模拟寄存器的操作会有些特殊,我们一般在audio驱动中都会增加相关调试节 点,去操作自己模块的寄存器,以便调试。

3.3.1 3.3.1 dump audiocodec寄存器

audiocodec驱动的寄存器调试节点位于:

使用方法:

通过echo写入下列参数

参数1: 0-read; 1-write

参数2: 1-digitar reg; 2-analog reg

参数3: reg value

参数4: write value

举例:

查看所有寄存器状态:

查看某个数字寄存器状态:

查看某个模拟寄存器状态:

改写某个数字寄存器:

改写某个模拟寄存器:

3.3.2 3.3.2 dump daudio寄存器

查看spec可以知道i2s模块的寄存器基地址

可以通过sunxi_dump节点查询寄存器状态,例如查看i2s0的寄存器:

3.3.3 3.3.3 dump dmic寄存器

查看spec可以知道dmic模块的寄存器基地址

可以通过sunxi_dump节点查询寄存器状态:

3.3.4 3.3.4 dump spdif寄存器

查看spec可以知道spdif模块的寄存器基地址

可以通过sunxi_dump节点查询spdif寄存器状态:

3.4 3.4 sound procfs.

通过procfs文件系统下面的声卡相关节点,可以得到各个声卡各个音频流的状态。实际调试中会 非常有用。

内核需要选中下面选项才能在procfs下生成对应节点:

以card0为例看下提供的节点信息:

其中,hw_params, status都能拿到比较有用的信息:

  • 从period_size可以知道当前dma中断频率,太快会影响系统响应速度,太慢可能就存在一 定延时。
  • buffer_size可以知道缓存区大小,太小容易因调度不及时出现xrun,太大同样存在一定延时。
  • 从hw_ptr, appl_ptr可以知道当前录音/播音的帧数,是否发生过xrun等。

4 4常用接口说明

这里主要介绍alsa-lib中的常用接口

4.1 4.1 control接口

为了方便操作访问,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);

4.2 4.2 PCM接口.

为了方便操作访问,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)

5 开机音乐功能

这里开机音乐功能,指的是在uboot阶段开始启动dma将音频数据搬运到AudioCodec的 FIFO中进行播歌,同时CPU继续开机流程进入内核。进入系统后,在合适的启动脚本中加载音 频驱动模块(如果builtin,那么音乐会提前中止),这样开机音乐可以大大的提前,给用户一种迅 速开机的错觉。

目前SDK代码中支持uboot开机音乐功能的平台有:R6,R7s,R11,R16,R328,R311,MR133

配置使用方法都比较类似,下面以R328为例进行说明。

5.1 配置方法

  1. 修改uboot配置文件
    • 可修改默认配置configs/sun8iw18p1_defconfig增加下面几项 CONFIG_SOUND_SUNXI_SOC_RWFUNC=y CONFIG_SOUND_SUNXI_SUN8IW18_CODEC=y CONFIG_SOUND_SUNXI_BOOT_TONE=y
    • 也可以通过kconfig进行配置lichee/brandy-2.0/u-boot-2018目录下执行makemenu- config ARCH=arm,选上对应功能项:选中sun8iw18的codec驱动以及开机音乐功能
5-1-1
5-1-1
  1. 修改sys_config文件
  1. 创建boottone分区
  1. 修改env配置文件
  1. 将内核AudioCodec驱动编译成模块

5.2 注意事项

  1. uboot退出时,不能关掉dma。如果发生在跳转kenrel时声音变化或消失,请确认跳转到内 核前是否调用了sunxi_dma_exit();
  2. 内核并不知道uboot将音频加载到dram的位置。理论上,kernel可能会在初始化过程中, 用到那片内存,导致音乐播放不正常。
    • 可以在dts中,将该片内存改为reserve属性,可以确保kernel不会使用到。
    • 选用kernel初始化不会用到的内存块
  3. 可以在uboot命令行下执行boottone命令进行调试

6 各平台音频模块注意事项

6.1 R328.

  1. 只有一个DAC,所以在播放两通道数据的时候,硬件上会将第二个通道的数据丢掉。如果想
  1. 使用模拟mic作AEC时,需要将该MIC gain设置为0dB.如果有增益,则会导致录音开始及结束时产生pop音(开关PA产生的pop音,经过差分MIC消除后仍然存在极小的杂音,如果再经过MIC增益放大,则会变为明显的pop音) rintf(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);

4.2 4.2 PCM接口.

为了方便操作访问,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)

5 开机音乐功能

这里开机音乐功能,指的是在uboot阶段开始启动dma将音频数据搬运到AudioCodec的 FIFO中进行播歌,同时CPU继续开机流程进入内核。进入系统后,在合适的启动脚本中加载音 频驱动模块(如果builtin,那么音乐会提前中止),这样开机音乐可以大大的提前,给用户一种迅 速开机的错觉。

目前SDK代码中支持uboot开机音乐功能的平台有:R6,R7s,R11,R16,R328,R311,MR133

配置使用方法都比较类似,下面以R328为例进行说明。

5.1 配置方法

  1. 修改uboot配置文件
    • 可修改默认配置configs/sun8iw18p1_defconfig增加下面几项 CONFIG_SOUND_SUNXI_SOC_RWFUNC=y CONFIG_SOUND_SUNXI_SUN8IW18_CODEC=y CONFIG_SOUND_SUNXI_BOOT_TONE=y
    • 也可以通过kconfig进行配置lichee/brandy-2.0/u-boot-2018目录下执行makemenu- config ARCH=arm,选上对应功能项:选中sun8iw18的codec驱动以及开机音乐功能

[外链图片转存中…(img-SbAophv6-1677205397769)]

  1. 修改sys_config文件
  1. 创建boottone分区
  1. 修改env配置文件
  1. 将内核AudioCodec驱动编译成模块

5.2 注意事项

  1. uboot退出时,不能关掉dma。如果发生在跳转kenrel时声音变化或消失,请确认跳转到内 核前是否调用了sunxi_dma_exit();
  2. 内核并不知道uboot将音频加载到dram的位置。理论上,kernel可能会在初始化过程中, 用到那片内存,导致音乐播放不正常。
    • 可以在dts中,将该片内存改为reserve属性,可以确保kernel不会使用到。
    • 选用kernel初始化不会用到的内存块
  3. 可以在uboot命令行下执行boottone命令进行调试

6 各平台音频模块注意事项

6.1 R328.

  1. 只有一个DAC,所以在播放两通道数据的时候,硬件上会将第二个通道的数据丢掉。如果想
  1. 使用模拟mic作AEC时,需要将该MIC gain设置为0dB.如果有增益,则会导致录音开始及结束时产生pop音(开关PA产生的pop音,经过差分MIC消除后仍然存在极小的杂音,如果再经过MIC增益放大,则会变为明显的pop音)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-02-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • OpenRemoved_Tina_Linux_音频_开发指南
    • 1 概述
      • 1.1 编写目的
      • 1.2 适用范围
      • 1.3 相关人员
      • 1.4 相关术语
    • 2 模块介绍
      • 2.1 驱动框架
      • 2.2 音频接口介绍.
      • 2.3 R6音频接口
      • 2.4 R7s音频接口
    • 2.5 R11音频接口
      • 2.5.1 硬件资源
      • 2.5.2 时钟源
      • 2.5.3 代码结构
      • 2.5.4 AudioCodec
      • 2.5.5 Daudio.
      • 2.5.6 标案音频测试方法
    • 2.6 R16音频接口
      • 2.6.1 硬件资源
      • 2.6.2 时钟源
      • 2.6.3 代码结构
      • 2.6.4 AudioCodec
      • 2.6.5 Daudio.
      • 2.6.6 标案音频测试方法
    • 2.7 R18音频接口
      • 2.7.1 硬件资源
      • 2.7.2 时钟源
      • 2.7.3 代码结构
      • 2.7.4 AudioCodec
      • 2.75 Daudio.
      • 2.7.6 SPDIF
      • 2.7.7 外挂codec:AC108
      • 2.7.8 外挂数字功放TAS5731.
      • 2.7.9 HDMI音频接口
      • 2.7.10 标案音频测试方法.
    • 2.8 R30音频接口
      • 2.8.1 硬件资源
      • 2.8.2 时钟源
      • 2.8.3 代码结构
      • 2.8.4 AudioCodec
      • 2.8.5 Daudio.
      • 2.8.6 DMIC
      • 2.8.7 标案音频测试方法
    • 2.9 R328音频接口.
      • 2.9.1 硬件资源
      • 2.9.2 时钟源.
      • 2.9.3 代码结构
      • 2.9.4 AudioCodec
      • 2.14.5 Daudio
      • 2.14.6 Dmic
      • 2.14.7 SPDIF
      • 2.14.8 MAD
      • 2.14.9 VAD.
      • 2.14.10标案音频测试方法.
    • 2.20 V853音频接口
      • 2.20.1 时钟源.
      • 2.20.2 代码结构
      • 2.20.3 AudioCodec
      • 2.20.4 Daudio
      • 2.20.5 DMIC.
      • 2.20.6 RX_SYNC多声卡同步功能
      • 2.20.7 标案音频测试方法.
    • 2.21 F133音频接口
      • 2.21.1 时钟源.
      • 2.21.2 AudioCodec
      • 2.21.3 Daudio
      • 2.21.4 DMIC.
      • 2.21.5 SPDIF
      • 2.21.6 标案音频测试方法.
    • 3 3常用工具及调试方法
      • 3.1 3.1 alsa-utils
      • 3.2 3.2 tinyalsa-utils.
      • 3.3 3.3 dump寄存器
      • 3.4 3.4 sound procfs.
    • 4 4常用接口说明
      • 4.1 4.1 control接口
      • 4.2 4.2 PCM接口.
    • 5 开机音乐功能
      • 5.1 配置方法
      • 5.2 注意事项
    • 6 各平台音频模块注意事项
      • 6.1 R328.
      • 4.2 4.2 PCM接口.
    • 5 开机音乐功能
      • 5.1 配置方法
      • 5.2 注意事项
    • 6 各平台音频模块注意事项
      • 6.1 R328.
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档