T527 Audio Codec 调试

1、环境介绍

硬件:t527板卡

软件:原厂t527-tina5.0-aiot-v1.4 sdk(buildroot)

2、前言

本文主要记录t527内置的codec调试过程。

3、T527 Audio Codec 资源

3.1、Playback(DAC部分)

  • 通道:2路(立体声)
  • 分辨率:16-bit / 20-bit
  • 采样率:8kHz ~ 192kHz
  • 性能:SNR约100dB,THD+N约-85dB
  • 输出:1路耳机接口输出(HPOUTL/R)、2路差分线路输出(LINEOUTLP/N、LINEOUTRP/N)

3.2、Capture(ADC部分)

  • 通道:3路
  • 分辨率:16-bit / 20-bit
  • 采样率:8kHz ~ 48kHz
  • 性能:SNR约95dB,THD+N约-80dB
  • 输入:MICIN1、MICIN2、MICIN3(差分输入,支持回声消除)

3.3、其它

  • DAC 和 ADC 各有一个 128×20bit FIFO,支持 DMA 传输
  • 支持中断
  • 支持 动态范围控制器(DRC):能在录音/播放时自动调整动态范围,防止声音过大或过小
  • 内部自带 ALDO 电源输出,给模拟电路供电(AVCC)

4、原理图查看

该t527板卡板载1个3.5mm耳机插座,支持放音、录音、热插拔检测:

该t527板卡引出2路单声道扬声器接口。1路喇叭使用LINEOUTLP/N,1路喇叭使用LINEOUTRP/N:

该t527板卡板载1个咪头。同时引出1路mic接口,支持外接咪头。:

5、板级设备树配置

板级设备树配置中,对于codec部分基本没有改动,使用sdk出厂默认的:

/* audio dirver module -> audio codec */
&codec {
	tx-hub-en;
	rx-sync-en;

	dac-vol		= <63>;		/* default value:63 range:0->63 */
	dacl-vol	= <160>;	/* default value:160 range:0->255 */
	dacr-vol	= <160>;	/* default value:160 range:0->255 */
	adc1-vol	= <160>;	/* default value:160 range:0->255 */
	adc2-vol	= <160>;	/* default value:160 range:0->255 */
	adc3-vol	= <160>;	/* default value:160 range:0->255 */
	lineout-gain	= <31>;		/* default value:31 range:0->31 */
	hpout-gain	= <7>;		/* default value:7 range:0->7 */
	adc1-gain	= <31>;		/* default value:31 range:0->31 */
	adc2-gain	= <31>;		/* default value:31 range:0->31 */
	adc3-gain	= <31>;		/* default value:31 range:0->31 */

	/* to do: avcc-1.8 vdd33-3.3 cpvin-1.8 */
	avcc-external;
	avcc-supply	= <&reg_aldo4>;
	avcc-vol	= <1800000>;
	vdd-external;
	vdd-supply	= <&reg_cldo3>;
	vdd-vol		= <3300000>;
	cpvin-external;
	cpvin-supply	= <&reg_bldo3>;
	cpvin-vol	= <1800000>;

	pa-pin-max	= <1>;
	// pa-pin-0	= <&r_pio PL 7 GPIO_ACTIVE_HIGH>;
	pa-pin-level-0	= <1>;
	pa-pin-msleep-0	= <0>;

	jack-det-level		= <0>;
	jack-det-threshold	= <8>;
	jack-det-debouce-time	= <250>;

	/* extcon                  = <&usb_power_supply>;
	 * jack-swpin-mic-sel      = <&pio PH 8 GPIO_ACTIVE_HIGH>;
	 * jack-swpin-hp-en        = <&pio PH 15 GPIO_ACTIVE_HIGH>;
	 * jack-swpin-hp-sel       = <&pio PH 11 GPIO_ACTIVE_HIGH>;
	 * jack-swmode-hp-off      = <0x00>;
	 * jack-swmode-hp-usb      = <0x11>;
	 * jack-swmode-hp-audio    = <0x10>;
	 * jack-det-level          = <1>;
	 * jack-det-threshold      = <8>;
	 * jack-det-debouce-time   = <250>;
	 */

	status = "okay";
};

&codec_plat {
	status = "okay";
};

&codec_mach {
	soundcard-mach,jack-support = <1>;
	status = "okay";
	soundcard-mach,cpu {
		sound-dai = <&codec_plat>;
	};
	soundcard-mach,codec {
		sound-dai = <&codec>;
	};
};

设备树各属性含义可以参考全志官方手册:《Linux_Audio_开发指南.pdf》

6、内核配置

内核配置也是使用的默认配置:

7、查看声卡设备

进入系统,执行如下命令查看声卡设备:

aplay -l

card0就是t527的内置声卡。

8、查看声卡控件属性

执行如下命令查看声卡控件属性:

amixer contents -c 0
root@lubancat:~ # amixer contents -c 0
numid=5,iface=MIXER,name='ADC DRC0 Mode'
  ; type=ENUMERATED,access=rw------,values=1,items=2
  ; Item #0 'Off'
  ; Item #1 'On'
  : values=0
numid=7,iface=MIXER,name='ADC DRC1 Mode'
  ; type=ENUMERATED,access=rw------,values=1,items=2
  ; Item #0 'Off'
  ; Item #1 'On'
  : values=0
numid=6,iface=MIXER,name='ADC HPF0 Mode'
  ; type=ENUMERATED,access=rw------,values=1,items=2
  ; Item #0 'Off'
  ; Item #1 'On'
  : values=0
numid=8,iface=MIXER,name='ADC HPF1 Mode'
  ; type=ENUMERATED,access=rw------,values=1,items=2
  ; Item #0 'Off'
  ; Item #1 'On'
  : values=0
numid=11,iface=MIXER,name='ADC1 ADC2 Swap'
  ; type=ENUMERATED,access=rw------,values=1,items=2
  ; Item #0 'Off'
  ; Item #1 'On'
  : values=0
numid=21,iface=MIXER,name='ADC1 Gain'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=31,step=0
  : values=31
  | dBscale-min=0.00dB,step=1.00dB,mute=0
numid=16,iface=MIXER,name='ADC1 Volume'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=255,step=0
  : values=160
  | dBscale-min=-119.25dB,step=0.75dB,mute=1
numid=22,iface=MIXER,name='ADC2 Gain'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=31,step=0
  : values=31
  | dBscale-min=0.00dB,step=1.00dB,mute=0
numid=17,iface=MIXER,name='ADC2 Volume'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=255,step=0
  : values=160
  | dBscale-min=-119.25dB,step=0.75dB,mute=1
numid=12,iface=MIXER,name='ADC3 ADC4 Swap'
  ; type=ENUMERATED,access=rw------,values=1,items=2
  ; Item #0 'Off'
  ; Item #1 'On'
  : values=0
numid=23,iface=MIXER,name='ADC3 Gain'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=31,step=0
  : values=31
  | dBscale-min=0.00dB,step=1.00dB,mute=0
numid=18,iface=MIXER,name='ADC3 Volume'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=255,step=0
  : values=160
  | dBscale-min=-119.25dB,step=0.75dB,mute=1
numid=9,iface=MIXER,name='ADDA Loop Mode'
  ; type=ENUMERATED,access=rw------,values=1,items=3
  ; Item #0 'Off'
  ; Item #1 'DACLR-to-ADC12'
  ; Item #2 'DACL-to-ADC3'
  : values=0
numid=3,iface=MIXER,name='DAC DRC Mode'
  ; type=ENUMERATED,access=rw------,values=1,items=2
  ; Item #0 'Off'
  ; Item #1 'On'
  : values=0
numid=4,iface=MIXER,name='DAC HPF Mode'
  ; type=ENUMERATED,access=rw------,values=1,items=2
  ; Item #0 'Off'
  ; Item #1 'On'
  : values=0
numid=13,iface=MIXER,name='DAC Volume'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=63,step=0
  : values=63
  | dBscale-min=-74.24dB,step=1.16dB,mute=0
numid=10,iface=MIXER,name='DACL DACR Swap'
  ; type=ENUMERATED,access=rw------,values=1,items=2
  ; Item #0 'Off'
  ; Item #1 'On'
  : values=0
numid=14,iface=MIXER,name='DACL Volume'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=255,step=0
  : values=160
  | dBscale-min=-119.25dB,step=0.75dB,mute=1
numid=15,iface=MIXER,name='DACR Volume'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=255,step=0
  : values=160
  | dBscale-min=-119.25dB,step=0.75dB,mute=1
numid=20,iface=MIXER,name='HPOUT Gain'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=7,step=0
  : values=7
  | dBscale-min=-42.00dB,step=6.00dB,mute=1
numid=29,iface=MIXER,name='HPOUT Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=19,iface=MIXER,name='LINEOUT Gain'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=31,step=0
  : values=31
  | dBrange-
    rangemin=0,,rangemax=1
      | dBscale-min=0.00dB,step=0.00dB,mute=1
    rangemin=2,,rangemax=31
      | dBscale-min=-43.50dB,step=1.50dB,mute=1

numid=27,iface=MIXER,name='LINEOUTL Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=28,iface=MIXER,name='LINEOUTR Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=24,iface=MIXER,name='MIC1 Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=25,iface=MIXER,name='MIC2 Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=26,iface=MIXER,name='MIC3 Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=30,iface=MIXER,name='SPK Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=2,iface=MIXER,name='rx sync mode'
  ; type=ENUMERATED,access=rw------,values=1,items=2
  ; Item #0 'Off'
  ; Item #1 'On'
  : values=0
numid=1,iface=MIXER,name='tx hub mode'
  ; type=ENUMERATED,access=rw------,values=1,items=2
  ; Item #0 'Off'
  ; Item #1 'On'
  : values=0
numid=5,iface=MIXER,name='ADC DRC0 Mode'       # ADC0 动态范围压缩模式(DRC0),可启用/关闭
numid=7,iface=MIXER,name='ADC DRC1 Mode'       # ADC1 动态范围压缩模式(DRC1),可启用/关闭
numid=6,iface=MIXER,name='ADC HPF0 Mode'       # ADC0 高通滤波器(HPF0),用于滤除低频噪声
numid=8,iface=MIXER,name='ADC HPF1 Mode'       # ADC1 高通滤波器(HPF1),用于滤除低频噪声
numid=11,iface=MIXER,name='ADC1 ADC2 Swap'     # ADC1/ADC2 信号交换开关
numid=21,iface=MIXER,name='ADC1 Gain'          # ADC1 增益(Gain),控制麦克风输入放大
numid=16,iface=MIXER,name='ADC1 Volume'        # ADC1 音量(Volume),数值越大越响
numid=22,iface=MIXER,name='ADC2 Gain'          # ADC2 增益(Gain),控制麦克风输入放大
numid=17,iface=MIXER,name='ADC2 Volume'        # ADC2 音量(Volume),数值越大越响
numid=12,iface=MIXER,name='ADC3 ADC4 Swap'     # ADC3/ADC4 信号交换开关
numid=23,iface=MIXER,name='ADC3 Gain'          # ADC3 增益(Gain),控制麦克风输入放大
numid=18,iface=MIXER,name='ADC3 Volume'        # ADC3 音量(Volume),数值越大越响
numid=9,iface=MIXER,name='ADDA Loop Mode'      # AD/DA 回路模式,可将 DAC 输出回送到 ADC
numid=3,iface=MIXER,name='DAC DRC Mode'        # DAC 动态范围压缩模式(DRC),可启用/关闭
numid=4,iface=MIXER,name='DAC HPF Mode'        # DAC 高通滤波器模式(HPF),可启用/关闭
numid=13,iface=MIXER,name='DAC Volume'         # DAC 总音量(Volume),控制左右输出整体大小
numid=10,iface=MIXER,name='DACL DACR Swap'     # DAC 左右声道交换开关
numid=14,iface=MIXER,name='DACL Volume'        # DAC 左声道音量(Volume)
numid=15,iface=MIXER,name='DACR Volume'        # DAC 右声道音量(Volume)
numid=20,iface=MIXER,name='HPOUT Gain'         # 耳机输出增益(Gain),控制耳机响度
numid=29,iface=MIXER,name='HPOUT Switch'       # 耳机开关,开启后可以输出耳机声音
numid=19,iface=MIXER,name='LINEOUT Gain'       # LINEOUT(喇叭/外接设备)增益
numid=27,iface=MIXER,name='LINEOUTL Switch'    # LINEOUT 左声道开关
numid=28,iface=MIXER,name='LINEOUTR Switch'    # LINEOUT 右声道开关
numid=24,iface=MIXER,name='MIC1 Switch'        # MIC1 开关
numid=25,iface=MIXER,name='MIC2 Switch'        # MIC2 开关
numid=26,iface=MIXER,name='MIC3 Switch'        # MIC3 开关
numid=30,iface=MIXER,name='SPK Switch'         # 内置喇叭开关
numid=2,iface=MIXER,name='rx sync mode'        # 接收同步模式
numid=1,iface=MIXER,name='tx hub mode'         # 发送集线模式

9、测试

9.1、放音测试

9.1.1、耳机放音

# 耳机设置
amixer -c 0 cset numid=30 off   # 关闭扬声器输出(SPK)
amixer -c 0 cset numid=27 off   # 关闭 LINEOUT 左声道输出
amixer -c 0 cset numid=28 off   # 关闭 LINEOUT 右声道输出
amixer -c 0 cset numid=29 on    # 打开耳机输出(HPOUT Switch)
amixer -c 0 cset numid=20 7     # 设置耳机输出增益
amixer -c 0 cset numid=14 150   # 设置左声道 DAC 音量
amixer -c 0 cset numid=15 150   # 设置右声道 DAC 音量

# 放音
aplay -D hw:0,0 test.wav

9.1.2、喇叭放音

# 喇叭设置
amixer -c 0 cset numid=29 off   # 关闭耳机输出(HPOUT Switch)
amixer -c 0 cset numid=30 1     # 打开扬声器输出(SPK Switch)
amixer -c 0 cset numid=27 on    # 打开 LINEOUT 左声道输出
amixer -c 0 cset numid=28 on    # 打开 LINEOUT 右声道输出
amixer -c 0 cset numid=13 63    # 设置 DAC 总音量
amixer -c 0 cset numid=14 150   # 设置左声道 DAC 音量
amixer -c 0 cset numid=15 150   # 设置右声道 DAC 音量

# 放音
aplay -D hw:0,0 test.wav

9.2、录音

该t527板卡对于内置codec的3路mic都用到了,下面逐一测试。

9.2.1、板载MIC录音(MIC1)

# MIC设置
amixer -c 0 cset numid=25 off   # 关闭 MIC2
amixer -c 0 cset numid=26 off   # 关闭 MIC3
amixer -c 0 cset numid=24 on    # 打开 MIC1
amixer -c 0 cset numid=21 10    # 设置 ADC1 增益为 20
amixer -c 0 cset numid=16 200   # 设置 ADC1 音量为 200
amixer -c 0 cset numid=6 on     # 打开 ADC1 高通滤波器(HPF0)

# 录音
arecord -D hw:0,0 -f S16_LE -r 16000 -c 1 -d 10 test_mic1.wav
# 放音
aplay -D hw:0,0 test_mic1.wav

9.2.2、MIC接口录音(MIC2)

该t527板卡的板载MIC接口需要外接一个咪头进行测试。

# MIC设置
amixer -c 0 cset numid=24 off   # 关闭 MIC1
amixer -c 0 cset numid=26 off   # 关闭 MIC3
amixer -c 0 cset numid=25 on		# 打开 MIC2
amixer -c 0 cset numid=22 8			# 设置 ADC2 增益
amixer -c 0 cset numid=17 220		# 设置 ADC2 音量
amixer -c 0 cset numid=8 on			# 打开 ADC2 高通滤波器

# 录音
arecord -D hw:0,0 -f S16_LE -r 16000 -c 1 -d 10 test_mic2.wav
# 放音
aplay -D hw:0,0 test_mic2.wav

9.2.3、耳机接口录音(MIC3)

# MIC设置
amixer -c 0 cset numid=24 off   # 关闭 MIC1
amixer -c 0 cset numid=25 off   # 关闭 MIC2
amixer -c 0 cset numid=26 on    # 打开 MIC3
amixer -c 0 cset numid=23 20    # 设置 ADC3 增益为 20
amixer -c 0 cset numid=18 200   # 设置 ADC3 音量为 200   

# 录音
arecord -D hw:0,0 -f S16_LE -r 16000 -c 1 -d 10 test_mic3.wav
# 放音
aplay -D hw:0,0 test_mic3.wav

9.2.4、多声道录音(MIC1 + MIC3)

以下以mic1和mic3为例,展示多声道录音。可以自由切换组合。

# 打开MIC1
amixer -c 0 cset numid=24 on    # 打开 MIC1
amixer -c 0 cset numid=21 10    # 设置 ADC1 增益为 20
amixer -c 0 cset numid=16 200   # 设置 ADC1 音量为 200
amixer -c 0 cset numid=6 on     # 打开 ADC1 高通滤波器(HPF0)
# 关闭MIC2
amixer -c 0 cset numid=25 off		# 打开 MIC2
# 打开MIC3
amixer -c 0 cset numid=26 on    # 打开 MIC3
amixer -c 0 cset numid=23 20    # 设置 ADC3 增益为 20
amixer -c 0 cset numid=18 200   # 设置 ADC3 音量为 200   

# 录音
# -c 2 指定录音通道数
arecord -D hw:0,0 -f S16_LE -r 16000 -c 2 -d 10 test_mic1_mic3.wav
# 放音
aplay -D hw:0,0 test_mic1_mic3.wav

10、总结

参考文章:

《Linux_Audio_开发指南.pdf》

嵌入式Linux学习交流群:424571391

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值