关于sdk中sdhci驱动的dwcmshc_k230_sdhci_set_clock函数的询问

Viewed 143

问题描述


下面为sdk的dwcmshc_k230_sdhci_set_clock函数,为什么要在sdhci_calc_clk计算出clk之后,强行 clk |= SDHCI_PROG_CLOCK_MODE;呢?
这会导致频率计算公式固定为Base clock *M/N,为什么要这么做呢?

另外上板出现了mmc0 tuning failed,会是这个原因导致的吗?

static void dwcmshc_k230_sdhci_set_clock(struct sdhci_host *host, unsigned int clock)
{
u16 clk;

host->mmc->actual_clock = 0;

sdhci_writew(host, 0, SDHCI_CLOCK_CONTROL);

if (clock == 0)
	return;

clk = sdhci_calc_clk(host, clock, &host->mmc->actual_clock);
clk |= SDHCI_PROG_CLOCK_MODE;
sdhci_enable_clk(host, clk);

}

@wjx 您好,请问这个驱动的代码是您写的吗,这行代码的作用您知道吗

@wjx对了,还想问下有没有usbphy设备和寄存器的详细介绍?

2 Answers

你好,请问你这是使用的什么sdk

我用的是linux sdk,只有linux不包含rtsmart的那个

你是用的emmc吗?可以降频试一下,以及看一下电压和频率。

tuning failed 和你贴的这段代码没关心,失败原因是因为 尝试次数太少 补丁如下https://github.com/kendryte/k230_linux_sdk/commit/969d28a0de95b5a574b309a23d063da12502bbca

|SDHCI_PROG_CLOCK_MODE 原因 我感觉可能是因为SDHCI_PROG_CLOCK_MODE对应的信号线连反了。

好的,那是硬件原因导致的quirk吗,我去掉|SDHCI_PROG_CLOCK_MOD之后发现也能用,但是上板的启动时间变长了

@wjx 意思是clk |= SDHCI_PROG_CLOCK_MODE;这行代码的作用其实是把可编程时钟关了是吗?

我理解是这样的,