文章目录
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 = <®_aldo4>;
avcc-vol = <1800000>;
vdd-external;
vdd-supply = <®_cldo3>;
vdd-vol = <3300000>;
cpvin-external;
cpvin-supply = <®_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
6569

被折叠的 条评论
为什么被折叠?



