This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TDA4VE-Q1:主题:TDA4 SPI 时钟配置问题

Guru**** 2539500 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1562804/tda4ve-q1-subject-tda4-spi-clock-configuration-issue

器件型号:TDA4VE-Q1


工具/软件:

尊敬的 TI 支持团队:

1.我们的问题

  1. 我们使用的是 TDA4 SoC、并且在 SPI 时钟方面遇到了问题。 当基准时钟设置为 125MHz 时、使用spidev_test -s 15000000来配置 SPI 时钟、实际测量的频率始终约为预期值的 1/3。 例如、在设置 15MHz 时、测量的频率约为 5MHz。 我们不清楚 SPI 时钟的实际产生方式。 您能澄清一下吗?

  2. 为什么我们可以分配几乎任何时钟作为 SPI 基准时钟? 例如、即使我们在器件树中配置了与 USB 相关的时钟、SPI 仍能正常工作。 为什么会这样?

  3. 我们想配置 20MHz SPI 时钟。 但是、根据文档、似乎只有 50MHz、25MHz、16.6MHz 和 12.5MHz 可用。 是否确实不支持 20MHz? 或者是否可以生成 20MHz?


2.我们的工作和观察

用例 1:基准时钟= 125MHz
器件树:

MAIN_spi0:SPI@2100000{
兼容=“ti、am654-mcspi“、“ti、OMAP4-mcspi“;
REG =<0x00 0x02100000 0x00 0x400>;
中断= ;
#address-cells =<1>;
#size-cells =<0>;
电源域=<&K3_PDS 339 TI_SCI_PD_EXCLUSTED>;
Clocks =<&K3_CLKS 339 1>;
STATUS =“已禁用“;
};

我们手动修改spi-omap2-mcspi.c (omap2_mcspi_setup_transfer) 并在示波器上测量时钟。 计算公式如下:

div = (ref_clk_hz + speed_hz - 1) / speed_hz; speed_hz = ref_clk_hz / div; clkd = (div - 1) & 0xf; extclk = (div - 1) >> 4; clkg = OMAP2_MCSPI_CHCONF_CLKG;

结果表明、实际时钟始终约为预期速度的 1/3。


用例 2:基准时钟= 50MHz
器件树:

MAIN_spi0:SPI@2100000{
兼容=“ti、am654-mcspi“、“ti、OMAP4-mcspi“;
REG =<0x00 0x02100000 0x00 0x400>;
中断= ;
#address-cells =<1>;
#size-cells =<0>;
电源域=<&K3_PDS 339 TI_SCI_PD_EXCLUSTED>;
Clocks =<&K3_CLKS 339 2>;
STATUS =“已禁用“;
};

同样、我们手动修改了相同的驱动程序函数并使用了相同的计算方法。 示波器确认了相同的不匹配问题。


摘要:

  • SPI 输出时钟始终大约是所请求频率的 1/3。

  • 我们不明白为什么可以分配任何任意的参考时钟源并且这些时钟源仍然有效。

  • 我们想知道 20MHz 是否可实现、或者是否仅支持列出的时钟频率。

您能帮助说明 SPI 时钟生成如何在 TDA4 上运行、以及我们的观察结果是否为预期行为吗?

非常感谢。