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.

[参考译文] ADS8684:ADS8684:无法正确读取 SDO 线路

Guru**** 2362840 points
Other Parts Discussed in Thread: ADS8684, ADS8688, SN74HCS72
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/990797/ads8684-ads8684-impossible-to-properly-read-sdo-line

器件型号:ADS8684
主题中讨论的其他器件: ADS8688SN74HCS72

大家好、

我在使用 ADS8684时遇到一些问题(与 ADS8688器件相同、但只有4个模拟输入)。 就在 SPI 时钟的下降沿之后、SDO 线移动得非常快。 它与时钟关闭、以至于我的 SPI 主器件无法正确读取 SDO 上传输的数据。

我已经使用我的 Saleae 逻辑分析仪捕获了一些屏幕截图、其中显示了类似的问题。 下面、我尝试在器件上电后读取寄存器0x01 (AUTO_SEQ_EN)。

逻辑分析仪显示 SDI 和 SDO 线路上的数据:

- SDI =[0x02、0x00、0x00]=>正确

- SDO =[0x00、0x01、0xFF]=>不正确。 有时这是[0x00、0x01、0xFE]、仍然不正确。

下面是 ADS8684器件3个字节末尾的绿色标记处的详细信息:

我们看到 SDO 线在时钟下降沿之后的41ns 发生变化!! 有时、这种情况非常接近、以至于逻辑分析仪无法发挥作用、我能够同时看到 SDO 发生变化。

您是否知道下降沿之后它为什么会快速变化? 我当时认为线路应该在时钟的上升沿改变以避免出现问题,但 ADS8684似乎并不是这样做的。。

我使用过此器件、您是否遇到过此类问题? 您如何解决这些问题?

我的配置:

- SPI 主器件是具有 SPI-GPIO 驱动器的 Linux 目标(这不是真正的 SPI 外设、它驱动 GPIO、这说明时钟不是很精确)

- SPI 模式1 (CPOL = 0且 CPHA = 1、因为此器件需要此模式)。

-逻辑分析仪采样频率为24MHz。

谢谢、

Joel

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

    您好、Joel、

    您在 SDO 上观察到的现象是正确的、SCLK 下降沿和 SDO 上有效数据之间的最短时间为10ns、请参阅时序图(图1)中的 tht_CKDO 参数和 ADS8684数据表中的时序要求表。

    您的控制器应能够在  tht_CKDO 时间范围内检索数据。 应使用控制器上的硬件 SPI 外设、而不是软件 SPI 接口。 此外、您的控制器应足够快、以便检索数据。

    此致、

    戴尔

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

    谢谢 、这就是我的问题答案、我刚刚使用数据表进行了两次检查、您会给出正确的信息。 最小10ns、因此行为正确。 这是我错过的东西。

    我无法使用 SPI 外设、因为我使用的是与 SPI 模式1不兼容的 RPI cm3 SPI1。 我现在设想了两种解决方案来解决这个问题:

    -在 将 SCLK 设置为低电平之前读取 MISO 引脚、因此我确信它还没有改变 (仅需要驱动程序的补丁、因此它是纯软件且易于操作-但缺点是驱动程序是全局修改的、因此这会阻止将驱动程序用于另一条总线、甚至用于同一总线上的另一个 SPI 器件)、

    -在由 SCLK 下降沿触发的 SDO 线路上的 ADS8684输出端添加硬件锁存栅极电路。 这需要 修改电路、但可能会确保在时钟下降沿之后读取控制器上的 MISO 输入时避免不必要的 SDO 变化。

    我将在 这里为对此感兴趣的其他人发布我的最终解决方案。

    Joel

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

    您好、Joel、

    期待您的实验结果、谢谢。

    此致、

    戴尔

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

    您好 

    我尝试修补驱动程序时, 这就像在一个文件(下面的修补程序)中移动2行一样简单,经过几次测试后,不会报告任何问题。 我认为这是一个可行的解决方案。

    有趣的是、这修改了仅供 SPI 模式1和3使用的函数、因此如果其他 SPI 器件使用模式0或2、则仍然可以使用其他 SPI 器件。

    --- a/drivers/spi/spi-bitbang-txrx.h	2021-04-02 19:12:08.253013080 +0200
    +++ b/drivers/spi/spi-bitbang-txrx.h	2021-04-02 19:13:37.981013080 +0200
    @@ -96,13 +96,13 @@
     		}
     		spidelay(nsecs); /* T(setup) */
     
    -		setsck(spi, cpol);
    -		spidelay(nsecs);
    -
     		/* sample MSB (from slave) on trailing edge */
     		word <<= 1;
     		if ((flags & SPI_MASTER_NO_RX) == 0)
     			word |= getmiso(spi);
    +
    +		setsck(spi, cpol);
    +		spidelay(nsecs);
     	}
     	return word;
     }

    我还没有尝试过硬件解决 方案、但我认为 SN74HCS72 (www.ti.com/.../SN74HCS72-Q1 -具有负边沿触发输入的 D 触发器)是一种解决方案。

    Joel