现在用音频codec是 tlv320dac3120 .目前主控给的 I2S 的 mclk是20m 。现有的代码里说不支持20m时钟。请问 3120这款能用20m时钟不?如果支持有没有相关代码。我们之前是用的am335x,当时用的3120。最近产品升级,用的5728就用的之前的codec。。另外主控am5728 这边 CLKOOUT2 (D18)能不能输出24m (如果可以又如何配置),12m的频率呢、在已有 tlv320dac3120.c 里只支持12m 和 24m。
原理图和 pcb 是根据,am57xx evm 来修改的。
meng wang11:
The AIC3104 CODEC is controlled from AM572x by I2C which is at address 0x18 and is connected to the McASP3 I2S interface on the AM572x processor. The AIC3104 requires a master clock (MCLK) that is supplied by the processor using the AM572x CLKOOUT2 pin. Depending on the requirements, this clock can be any range from 512KHz to 50MHz. The most likely frequencies to be used are 12MHZ, 13MHZ, 16MHz, 19.2MHZ or 19.68MHZ. Additionally, the RSTOUTn signal provides a reset to the AIC3014 whenever the system is reset.
我看到了上面的信息。看样子是 AM5728 可以设置成 12m 。但是在代码里用设置了,却起不了作用。,应该是设置不对。
meng wang11:
回复 meng wang11:
在 ./sound/soc/generic/simple-card.c 中。和尝试用了clk_set_rate 设置24m 12m。错误。 用 clk_round_rate 也是错误。就不知道怎么改变这个 rate 了
printk("test Wade dai->sysclk is %d and will set 12M\n", dai->sysclk);
ret = clk_set_rate(clk, 12000000);
if (ret){
printk("set clk rate error at 12M. then will try 24M\n");
ret = clk_set_rate(clk, 24000000);
if (ret) {
printk("set clk rate error at 24M. then will try use clk_round_rate \n");
ret = clk_round_rate(clk, 24000000);
if (ret) {
printk("set clk round rate error also\n");
}
}
}
ret = clk_get_rate(clk);
printk("test Wade after set rate dai->sysclk is %d\n", ret);
——————————————————————————————
——————————————————————————————
以下是打印信息:
[ 8.293141] test Wade dai->sysclk is 20000000 and will set 12M
[ 8.293145] set clk rate error at 12M. then will try 24M
[ 8.293148] set clk rate error at 24M. then will try use clk_round_rate
[ 8.293150] set clk round rate error also
[ 8.293153] test Wade after set rate dai->sysclk is 20000000
[ 8.293158] test by Wade dai_props->codec_dai.sysclk is 20000000
Jian Zhou:
回复 meng wang11:
用的是最新的AM5728SDK么?AIC3104的主时钟由AM5728的clockout2提供,这个clockout2应该在驱动层可以直接修改频率。
meng wang11:
回复 Jian Zhou:
我用的是 clk_set_rate 这个函数,,但是设置不起作用。我用的是 2.0 的sdk ..
Denny%20Yang99373:
回复 meng wang11:
可以通过DEVMEM工具直接改寄存器看看
meng wang11:
回复 Denny%20Yang99373:
查看datasheet 也没有找到 clkout2 的频率配置。clkout2 可以mux 很多clk 比如 sysclk ,但是哪个能配置成12m ,以及配置到12m后会不会对板子的其他功能有影响并不确定,不能随便改
Jian Zhou:
回复 meng wang11:
你的clkout2这个引脚是直接连到音频codec的MCLK上了么?现在测量出来是24M的输出?
meng wang11:
回复 Jian Zhou:
是的,直接连到 codec 的 mclk 上面。参考你们demo板的原理图 。输出测试出来 是 20m 不是24m(示波器量) 。codec 这样目前代码不支持20m。20m 是在 simple-card.c 中用 clk_get_rate(clk); 得到的。其默认配置的 20m 也不知道在哪里配置的。
Jian Zhou:
回复 meng wang11:
肯定是在最底层的clock初始化配置出来的,检查过dts文件么?
meng wang11:
回复 Jian Zhou:
dts 检查过好多次。确实没看出来在哪配置。