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.

[参考译文] ADS1299:ADS1299 菊花链不改变采样率

Guru**** 2826825 points

Other Parts Discussed in Thread: ADS1299

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1618344/ads1299-ads1299-daisy-chain-not-changing-sampling-rate

器件型号: ADS1299

我将在菊花链配置中实现 2 个 ADS1299 芯片、如数据表的图 70 所示。  起始~、CLK、Δ V CS、SCLK 和 MOSI 由两个芯片共享、而 Daisy_In 连接到 MISO、而 DOUT1 连接到 MISO。   

我能够初始化芯片并从芯片中获取读数、但我发现第二个 ADS1299 的采样率与默认值 (250SPS) 相比没有变化。  我已经验证了第二个 ADS1299 正在接收命令、因为我可以成功地更改增益。

是否有东西会导致第二个芯片无法响应速率更改命令?

image.png

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

    您好、Seth。

    为了进行验证、在从第一个 ADS1299 进行初始化时、要从 CONFIG1 寄存器读取什么值、以及要尝试将 CONFIG1 寄存器更改为什么值? 此外、第一个 ADS1299 的采样率是否发生变化?

    我们的设备专家在办公室外 — 请期待 2 月 27 日的一周内回复。

    此致、

    Payton

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

    您好、Payton、

    我正在写入 0xB5 (181)、并确认我也在读回该内容、但仅来自第一个 ADS1299。  该功能应该将其设置为菊花链模式、振荡器输出(以同步两个芯片,因为其中一个芯片的 CLKSEL=0、另一个 CLKSEL=1)、并且输出数据速率为 500SPS。  我注意到的一点是、当我执行读取寄存器时、寄存器值不会在第二个 ADS1229 的 DOUT 引脚上输出。  采用菊花链拓扑时、是否无意中需要读取寄存器?  

    是的、第一个 ADS1299 的采样率正在发生变化。  上面的第 2 个和第 3 个通道(分别为棕色和红色)显示了两个芯片的 DRDY 线路。  此外、第 1 个信号(白色)是 DOUT->DOUT Daisy_In 信号、因此它按预期输出数据、但采用默认速率。  

    我还尝试过对整个电路板进行下电上电、看看它是否以某种方式锁定、但尚未解决问题。

    谢谢、
    Seth

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

    您好、Payton、

    我正在跟进、以了解该设备专家是否回来、并可以查看此问题。

    我一直在测试其他功能、这是唯一让我感到紧张的事情。   

    此外、我可以确认、我在所有 4 个电路板上都看到了这种行为、因此值得庆幸的是、这是一致的。

    谢谢、
    Seth

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

    尊敬的 Seth:

    感谢您的耐心。  

    您能否分享一个完整的原理图、其中显示了两个 ADS1299 器件之间的输入和连接?

    菊花链中的器件 1 无法知道其他器件是否“上游“连接。 默认情况下、即使是采用单个 ADS1299 的系统也会在“菊花链模式“(/DAISY_EN = 0) 下使用该器件。 您能否从 DAISY_IN0 断开 DOUT1、看看在执行寄存器读取命令时 DOUT1 引脚是否按预期切换? 在进行任何寄存器读取/写入之前、您能否确认正在向这两个器件发送 SDATAC 命令?

    此致、

    Ryan

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

    您好、Ryan、

    我上传了原理图。  请注意、芯片间连接在顶部工作表上进行。  各种跳线可以在菊花链和标准 SPI 模式之间配置 ADC。  

    在进行任何寄存器读取/写入之前、我已经验证是否发出了 SDATAC。  初始化过程为:

    1. 硬件复位脉冲。  (我已验证两个芯片都收到了。)
    2. 发送 SDATAC。 我已经在软件和逻辑分析仪上进行了确认。   
    3. 写入 CONFIG1-3、CHxSET (1-8)、偏置寄存器 (2x) LoFF 寄存器 (2x)。  我尝试没有设置任何这些,但这不能解决它。  
    4. 根据上述要求读取 CONFIG1。

    我注意到、当发送读取寄存器时、DOUT1 没有响应。  您提到了断开 DAISY_IN0 和 DOUT1 的连接。  是否有理由这样做?  我看到 DOUT1 稍后会在其 DRDY 变为低电平(如预期)时发送数据、因此我认为那里不会发生硬件冲突、对吧? (有关详细信息,请参阅 screeshot)

    我还验证了两个芯片之间的 CS 线路是一致的。 (它通过跳线在 PCB 上连接在一起,但值得进行完整性检查)

    谢谢、
    Seth

    e2e.ti.com/.../system.pdf

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

    尊敬的 Seth:

    没错、我想知道 DOUT1 引脚是否存在负载问题。 它输出转换数据但未响应 RREG 命令这一事实告诉我它可能不响应 SDATAC 命令。

    现在是否可以将设备 0 与设备 1 完全隔离、并尝试单独与设备 1 通信? 在测试寄存器读取/写入命令时、您是否可以 直接在 U6 的输入引脚上探测逻辑分析仪?

    您设置中的 SCLK 频率是多少?发送两字节 RREG 命令需要多长时间?  

    此致、

    Ryan

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

    您好、Ryan、

    我认为真正完全隔离器件的唯一方法是对器件 0 进行拆焊。  我宁愿避免这种情况,因为我现在不能真正地放弃一块板。 我使用了可用的跳线将器件分开:   

    1. 切割 JP11 并将 ADC_RST1 连接到备用 GPIO
    2. 切断 JP7.1-2 并短接 2-3、以允许单独 CS 切换
    3. 切割 JP8.1-2 并短接 2-3、以将 DOUT 从器件 1 直接引导到 MISO 上。

    我发现、如果我初始化两个器件、就能够在器件 1 上正常运行。  即使我不初始化 Device 0 而只保留它、这也是如此。  我随附了一个 Saleae 捕获、显示了这种行为。  

    当我将器件 0 保持在复位状态、然后与器件 1 通信时、会出现一种非常奇怪的行为。  具体而言、器件 1 在寄存器写入命令期间开始发送一些数据。 我猜是来自之前捕获的数据、因为它从 0xC0 开始、这是传输期间状态字节发送的地址。  我通过移除上面的 JP8.2-3 跳线来隔离 MISO 和 DOUT1 线路、验证了这确实是器件 1。  我已经附上了 Saleae 的捕获,虽然注意通道名称与其他文件略有不同。

    我在 2.5MHz 上运行 SCLK。   

    RREG 的两个字节需要大约 12us 的时间发送。  对于整个 3 字节事务、CS 线路在 31.5us 内处于低电平。 代码中存在一些延迟、并根据数据表规定进行了强制延迟、因此它不会线性扩展。

    当您问到逻辑分析仪直接位于 U6 的输入引脚上时、您尝试从中获得哪些信息?  使用逻辑分析仪时、整个总线应该(大致或更少)处于相同状态。  如果您想看看是否存在振铃或任何类型的不必要的模拟伪影、我可以在这些线上放置一个示波器来看看发生了什么。  

    此致、

    Seth

    e2e.ti.com/.../DualADS1299.zip

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

    尊敬的 Seth:

    您所描述的硬件更改与级联配置的预期一致、其中每个 AFE 共享 SPI 总线但使用专用/CS 输入。 很高兴至少此配置可以正常工作、器件 1 的行为符合预期。

    在第二个逻辑捕获中、我看到 SDAC 已发送、但器件似乎没有响应并继续输出转换数据。 它必须来自上个样本、因为我没有看到 DRDY1 切换且 ADC START 保持低电平。 读取转换数据时、您是否在时钟沿输出整个帧并读取所有 27 个字节?

    我不确定这是否有帮助、但我们可以尝试以下方法:

    1. 发送 STOP 命令或将 START 设置为低电平
    2. 发送 27 字节 0x00 来刷新数据缓冲区。  设置/CS = 1
    3. /CS = 0 并发送 SDATAC。 /CS = 1
    4. 继续读取/写入寄存器配置。

    在 SDATAC 模式下发送命令时、我不希望 DOUT 显示任何其他寄存器读取数据。

    此致、

    Ryan

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

    您好、Ryan、  

    我通常每个 DRDY-低电平信号读取所有 27 个字节。 在某些情况下、我在事务处理过程中点击了“重新编程“或“重置“、但这应该显示为间歇性故障、而不是始终如一的故障。  但是、就像仔细检查一样: 我将在启动时以及发送 SDATAC 并设置配置位之前发送复位脉冲。 难道不应该清除复位之前可能没有发送的任何剩余字节吗?  

    我会尝试一下这些指令。  

    需要仔细检查的一点 是:我会设置 主 时钟(非串行时钟)、使器件 0 在内部生成该时钟 (CLKSEL=1 和 CONFIG1:CLK_EN=1)、器件 1 正在接收该时钟 (CLKSEL=0)。  这会导致任何问题吗? 我是否应该从第三方源生成该时钟并让所有 ADS1299 使用输入模式?  或者我是否应该让所有 AFS1299 在内部生成它们而没有输出?

    谢谢、
    Seth

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

    您好、Ryan、

    我已经尝试过刷新缓冲区、结果是一样的。

    让我知道接下来要尝试什么。

    谢谢、
    Seth

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

    我正在尝试附加 Saleae 捕获,但网站给我一个错误。  特别是我尝试了 27 字节刷新,没有变化的行为。

    我发现了 RST0 线路引起的交互:我从器件 0 的输出驱动器件 1 的时钟、以同步两者。  将器件 0 保持在复位状态会禁用此功能、从而导致器件 1 上的设备挂起。

    我注意到的另一件事是、似乎 DRDY 信号是通过 SPI SCLK 清除的、即使没有使用 CS 引脚选择芯片也是如此。  这似乎会给在非菊花链模式下使用它带来很多痛苦。  我将尝试捕获一个示波器、以显示我的意思。  

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

    尊敬的 Seth:

    请原谅 E2E 站点出现故障 — 自昨天以来似乎没有人能够上传任何内容。

      无论您是从该器件发送命令还是读取数据、第一个 SCLK 下降沿都会按照第 9.4.1.2 节中的说明清除/DRDY。 我们想象到、即使总线与其他器件共享、MCU 也会捕获/DRDY 下降沿事件、并知道有数据等待读取。  

    此致、

    Ryan

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

    最好了解 DRDY 的意图。 如果仅在 SCLK + ADC 的 CS=0 上清除了该值、那么效果肯定会更好。 很明显、它被捕捉到而不是随机错过。 另外、它在 9.4.4.2 中的编写方式(我没有找到第 9.4.1.2 节,因此我假设这是一个拼写错误)、这意味着它还考虑了 CS 引脚状态。 在前面和后面的句子中没有提到 CS、所以我们如何知道 CS 适用于该段的其余部分、但这一句应以不同的方式处理。 我认为、数据表的未来读者将句子更改为“ DRDY 在第一个 SCLK 下降沿恢复高电平、与 CS 状态无关“会有所帮助。 甚至更好的选择是在段落后单独添加一条注释、指出“注意:DRDY 将响应 SCLK、无论 CS 状态如何“。

    我最终发现了这个问题的核心。 我已经设置菊花链、使第一个器件为 CLKSEL=1 和 CONFIG1.CLK_EN=1 来输出时钟、并使下游器件具有 CLKSEL=0 以接收该时钟。 这里的目的是让所有器件依靠一个时钟运行、并且 ADS1299 内部有足够准确的时钟源、这应该没问题。

    我认为发生的情况是、如果我设置 CLKSEL=0、然后尝试向 CONFIG1.CLK_EN 位写入 1、则会拒绝整个 CONFIG1 寄存器写入。 在表 6(第 9.3.2.2 节)中、当 CLKSEL=0 时、CLK_EN 位列为无关状态。

    “CLK_EN 位在菊花链配置中使用多个器件时很有用。“ 实现此目标的预期方法是什么? 我会问、因为图 70B 中的接线图显示了两个器件共享的 CS 和 MOSI 引脚、这意味着我需要向两个器件发送相同的配置命令。

    请告诉我。

    谢谢、
    Seth