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.

[参考译文] ADS7038:MISO 意外行为

Guru**** 2461290 points
Other Parts Discussed in Thread: ADS7038

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1381948/ads7038-miso-unexpected-behavior

器件型号:ADS7038

工具与软件:

我尝试在手动模式下操作 ADS7038、所有输入均配置为模拟输入。 我在模式0中使用 SPI、频率相对较低、可以排除时序问题(100KHz)。 AVDD 和 DVDD 由微控制器(本例中为 Raspberry PI 4b)在3V3处驱动。 通过使用电阻梯、我已将 AVDD 抽头至每个模拟输入、生成的输入电平与预期相符。

作为一种简单的概念证明、在上电后、我将进行三次写入:0x08 (写入操作码) 0x01 (写入寄存器 GEN_CFG)和0x01 (触发软复位)。

立即出现问题-传输第一个字节后 SDO 正在进行通信。 它会可靠地返回0x00、0xE0、0xE3。

我看了示波器上的 SPI 信号来验证。 它们看起来有点脏(在时钟边界振铃)、否则看起来在正确的时间处于正确的水平。

我在 MISO 上添加了一个上拉电阻、但这并没有改变该行为。

我的电路遵循数据表中的指导原则-我使用1uF 电容器隔离了 AVDD、DVDD 以及接地去耦、并且注意不要让模拟信号线穿过数字信号线。

我是否可以采取任何其他故障诊断步骤来确定问题的根源?

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

    尊敬的 Stephen:

    您能否确认您在 SDO 上读取了正确的转换数据、但在写入器件时看到了问题? 如果是、您是否能够通过 SDI 引脚发送逻辑捕获您通过 SDI 引脚将器件作为输入的序列以及其他 SPI 引脚的状态?

    当您向器件发出命令(no-op 除外)时、SDO 不应生成任何有意义的数据。 在寄存器读取的情况下、您将在  接下来的24位 SPI 帧中的前8个 SCLK 周期获得8位值。

    如果出现振铃、这并不一定会影响数据完整性、但您可以为数据引脚添加一个串联的小电阻器、以便稍微清理这些边沿。 22欧姆应该没有问题。 如果您认为这是硬件问题、能否将原理图和逻辑捕获共享?

    此致、
    Joel

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

    您好、Joel:

    我认为我没有得到正确的转换数据-无论我发送何种命令、我都得到了无效的值0xE0和0xE3、这也是我开始进行故障排除的原因。 以下捕获显示了按预期传输的写入命令:

    这里、我将发送通用配置寄存器的地址、您可以看到 MISO 上出现意外对话:

    我已经对读取各种寄存器进行了实验、当我发送[READ ADDR NOOP]后跟[NOOP NOOP]时、我在第二个24位帧的第一个周期获得响应。 很难说其他命令(如 READ)是否有效、因为我在某些情况下看到的是0xE3E0或0x000 (与对写入操作的虚假响应相同)。 下电上电后读取状态寄存器时、我可以看到 BOR 标志设置、而将其写入0x01后、我可以看到 BOR 标志被清除。

    这是我用于测试它的电路的原理图。 电阻梯用于为每个与页面相连的模拟输入提供已知输入。

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

    Andy、您好!

    这种振铃确实看起来非常严重。 我的第一个建议是移除所有 SPI 线路上的上拉电阻器、因为它们通常不是必需的。 我还提到过、串联一个22欧姆或33欧姆电阻器有助于减慢这些时钟边沿并抑制振铃。 您可以看到的时钟振铃也会向其他线路中引入噪声、因此可以减少这一切。 如果您还有任何问题、请告诉我这是如何解决的。

    此致、
    Joel

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

    我将1k 电阻与所有 SPI 线路串联、它仍然在振铃。 我删除了上拉电阻器、但问题仍然存在。

    我的 SPI 波形看起来与数据表中的示例相同、因此我不清楚如何继续。

    上电顺序是否重要? 在为 AVDD 供电之前、DVDD 是否需要保持高电平一段时间?

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

    尊敬的 Stephen:

    感谢您的耐心。 我想我发现了您的问题。 要写入寄存器、您必须发送一个24位 SPI 帧、即 当 CS 为低电平时为24位。 目前、看起来您将 CS 拉为低电平、发送8位、再次将 CS 拉为高电平、然后按顺序发送接下来的8位。 这些操作应在同一帧中完成、其中第一个字节包含命令操作码、第二个字节是寄存器地址、第三个字节是要写入寄存器的数据。 让我知道这是否更适合你!

    此致、
    Joel

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

    我实际上是从那种方法开始的、但它并不起作用、因此改为一次发送一个字节。

    我再次尝试、现在器件没有意外通话、但也没有按我的预期响应。

    是否存在我可以作为完整性检查发送的简单一个或两个帧序列、从而使器件产生可预测的响应? 我尝试了将0x80写入 DATA_CFG、将0写入 CHANNEL_SEL、并且读取的是最近数据、但未获得 MISO 的任何响应。

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

    尊敬的 Stephen:

    您是否手头有逻辑分析仪可提供逻辑捕获而不是示波器捕获?

    我建议从 SYSTEM_STATUS (0x0)读取、因为默认情况下它会返回0x81。 SDI 上的此命令应读取0x10 00 00。 您应该在接下来的24位帧中在 SDO 上读取0x81 00 00。 这将在48个 SCLK 周期内总共2个 SPI 帧、间隔为 CS 高电平。

    此致、
    Joel