ROC-3308-CC I2S_1 8通道输出的问题

我们现在使用RK3308开发板实现一个8通道输入,8通道输出的需求。
具体实现如下:
1、8路mic接I2S0输入。
2、将8路mic输入的信号直接由I2S1 8路输出。
3、使用命令: arecord -Dhw:0,0 -f S16_LE -r 44100 -c 8 | aplay -Dhw:0,0 -f S16_LE -r 44100 -c 8

遇到的问题:
mic输入没有问题,但I2S_1上只能测量到I2S1_SDO0_M0上有波形输出,其他SDO1-SDO3无波形输出,请技术大神帮忙协助分析一下是哪里配置有问题。

DTS配置如下:
i2s_16ch_dais: i2s-16ch-dais {
status = “okay”;
compatible = “rockchip,rk3308-multi-dais”, “rockchip,multi-dais”;
dais = <&i2s_8ch_0>, <&i2s_8ch_1>;
capture,channel-mapping = <8 0>;
playback,channel-mapping = <0 8>;
//bitclock-master = <1 0>;
//frame-master = <1 0>;
//rockchip,grf = <&grf>;
};

&i2s_8ch_1 {
status = “okay”;
#sound-dai-cells = <0>;
rockchip,no-dmaengine;
pinctrl-names = “default”;
pinctrl-0 = <&i2s_8ch_1_m0_sclktx
&i2s_8ch_1_m0_lrcktx
&i2s_8ch_1_m0_mclk
&i2s_8ch_1_m0_sdo0
&i2s_8ch_1_m0_sdo1_sdi3
&i2s_8ch_1_m0_sdo2_sdi2
&i2s_8ch_1_m0_sdo3_sdi1
&i2s_8ch_1_m0_sdi0>;
};

//rockchip,grf = <&grf>; 为什么要将这个屏蔽掉 ?这个是16ch必要的属性。另外i2s_8ch_1_m0_sdo1_3是既可以做输入也可以做输出的,你要确定它被正确设置为输出。

飞神 发表于 2019-5-17 11:31
//rockchip,grf = ; 为什么要将这个屏蔽掉 ?这个是16ch必要的属性。另外i2s_8ch_1_m0_sdo1_3是既可以做输 …

读寄存器是输入状态,确实不对,但我在RK3308.dtsi中将其配置为输出,查看寄存器还是输入,奇了怪了。

		i2s_8ch_1_m0_sdo1_sdi3: i2s-8ch-1-m0-sdo1-sdi3 {
			rockchip,pins =
				<1 RK_PB0 RK_FUNC_2 &pcfg_output_low>;
		};

		i2s_8ch_1_m0_sdo2_sdi2: i2s-8ch-1-m0-sdo2-sdi2 {
			rockchip,pins =
				<1 RK_PB1 RK_FUNC_2 &pcfg_output_low>;
		};

		i2s_8ch_1_m0_sdo3_sdi1: i2s-8ch-1-m0-sdo3_sdi1 {
			rockchip,pins =
				<1 RK_PB2 RK_FUNC_2 &pcfg_output_low>;
		};

飞神 发表于 2019-5-17 11:31
//rockchip,grf = ; 为什么要将这个屏蔽掉 ?这个是16ch必要的属性。另外i2s_8ch_1_m0_sdo1_3是既可以做输 …

我这个是8输入,8输出,并不是16通道,所以这个不需要打开。

具体输入输出配置你得看驱动哦,我也不清楚这方面。你现在是8ch输入和8ch输出,那么就是16ch啊,换句话来说就是音频通道拼接为16ch。