版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kris_fei/article/details/84030908
Platform: RK3399
OS: Android 7.1
Kernel: v4.4.83
现象:
使用I2S1通道,测量到的I2S MCLK是12MHz.
理论上应该是11.288MHz.
原因:
rk3399平台有三路I2S(其中一路内部使用,可以不管),但是MCLK只有一个,也就是说两路I2S只有一路能占用。而默认的sdk中,I2S1输出时,使用的是I2S0的MCLK,I2S0默认是12MHz。
因此会看到clk_summary中I2S1是11.28MHz,但是最终输出的是12MHz.
rk3399_mid:/ # cat /d/clk/clk_summary | grep i2s
cat /d/clk/clk_summary | grep i2s
clk_i2s2_div 0 0 0 0 0
clk_i2s2_frac 0 0 0 0 0
clk_i2s1_div 1 1 800000000 0 0
clk_i2s1_frac 1 1 11289600 0 0
clk_i2s1_mux 1 1 11289600 0 0
clk_i2s1 2 2 11289600 0 0
clk_i2s0_div 0 0 800000000 0 0
clk_i2s0_frac 0 0 40000000 0 0
hclk_i2s2 0 0 100000000 0 0
hclk_i2s1 2 2 100000000 0 0
hclk_i2s0 1 2 100000000 0 0
clk_i2sout 1 1 0 0 0
clk_i2s2_mux 0 0 0 0 0
clk_i2s2 0 0 0 0 0
clk_i2s0_mux 0 1 0 0 0
clk_i2s0 0 1 0 0 0
clk_i2sout_src 0 0 0 0 0
从CRU的寄存器也可以确认,使用的是I2S0 MCLK.
rk3399_mid:/ # io -4 -l 0x10 0xff760170
ff760170: 00000380 00000180 00000300 00000000
验证方法:
clk mux 选择从I2S1 输出
io -4 0xff76017c 0x10001