Dear Sir,
因为敝司的板子上需要一个mclk时钟供给音频音频,而这颗音频芯片需要能够被44100或48000整除的时钟,如:
能被44.1K整除的:11.2896MHz, 16.9344MHz,22.5792MHz
能被48K整除的:12.2880MHz, 18.4320MHz,24.5760MHz。
当前,我们采用的是时钟引脚是:MX6QDL_PAD_GPIO_19__CCM_CLKO1
在设备树中配置如下:
clocks = <&clks 201>;
clock-names = "csi_mclk";
mclk = <11289600>; /* default is 24000000 */
mclk_source = <0>;
在代码中,使能这个时钟:
cs4344_mclk = devm_clk_get(&pdev->dev, "csi_mclk");
clk_prepare_enable(cs4344_mclk);
实际出来的时钟频率是:24MHz
在:Change freqency of mclk for ov5640_mipi with imx6dl 中说是可以改,但没看明白怎么改。
因此,我的问题是:
1)如何修改使用不同的时钟?
imx_clk_set_parent(clk[IMX6QDL_CLK_CKO2_SEL], clk[IMX6QDL_CLK_OSC]);
imx_clk_set_parent(clk[IMX6QDL_CLK_CKO], clk[IMX6QDL_CLK_CKO2]);
2)平台中是否有支持如下频率的时钟(只要找到其中一个即可),如:
能被44.1K整除的:11.2896MHz, 16.9344MHz,22.5792MHz
能被48K整除的:12.2880MHz, 18.4320MHz,24.5760MHz。
3)在mach-imx6q.c中,找到:
clk_set_parent(pll4_sel, lvds2_in);
clk_set_rate(pll4_audio_div, 786432000);
clk_set_rate(esai_extal, 24576000);
不知道能否用这个时钟源?或者最好能与i2s的bclk共用一个时钟源?
不知描述是否清楚。谢谢!
Yonghe.Luo
Hello Yonghe,
I.MX6Q的CCM_CKLO1/2,出不来你说的那几个时钟。其实,你没必要非要弄这些时钟出来。每类型codec的MCLK输入,都是有一个范围,而并非是一定要11.2896M,22.5792MHz等等。codec内部有PLL电路,可以对输入的MCLK进行变频处理,得到你所需要的时钟(通常叫sys_clk),这个sys_clk才是I2S或者PCM的bitclock。
如果你的codec要求,一定需要你提到的那些时钟,你就必须要外接晶体或者OSC了。
Have a nice day!
TIC weidong sun
Hello Weidong,
我们选用的这颗音频IC必须使用MCLK信号来自动识别音频的采用率,因此MCLK必须是采样率的整数倍(128x或256x等)。
您说“如果你的codec要求,一定需要你提到的那些时钟,你就必须要外接晶体或者OSC了”。是不是说平台自身是产生不了我所需要的这些时钟的,对吧?
如果答案是肯定的,那么,下面的描述就可以忽略了。
比如:如果我采用PCM1的来产生mclk,目前读出这个CLK的时钟是66MHz,而66MHz是分不出我们所需要的频率的。因此,我想问一下:
1)芯片内部是否有其他时钟可以比较接近的频率,如:修改pcm的时钟树(set_parrent) ?或者有其他时钟引脚?
2)是否可以使用I2S的时钟,同时产生MCLK、Bitclock、fsclock?(其中Mclk = 256 * fsclock)
可能表述不够清晰。
谢谢!
Yonghe.Luo