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.

[参考译文] ADS7066:ADS7066IYBHT 的菊花链通信问题

Guru**** 2485735 points
Other Parts Discussed in Thread: ADS7066

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1548292/ads7066-daisy-chain-communication-issue-with-ads7066iybht

器件型号:ADS7066


工具/软件:

您好、

我们目前在菊花链配置中使用五个 ADS7066IYBHT 器件:
FPGA→ADC0→ADC1→ADC2→ADC3→ADC4→FPGA

我们正在尝试对0x800x8A每个 ADC 的 GENERAL_CFG 寄存器(地址:0x01)进行或写入、以启用内部基准并执行偏移校准。

使用的协议是 SPI-00(默认)、SCLK 频率为 1MHz。

0x080180从 FPGA 向 ADC0 发送数据(24 位)后、ADC0 的 SDO 输出似乎显示了正确的命令/地址/数据时序。 但是、对于 ADC2、ADC3 和 ADC4、SDO 上数据输出的时序会错位、并且 GENERAL_CFG 寄存器写入不会成功(接收到的命令和数据)0x00

我们随附了显示此问题的示波器波形。

我们想确认以下几点:

① 关于 SPI-00 协议时序
在 SPI-00 模式下、ADC 在 SCLK 的上升沿锁存 SDI 数据、在 SCLK 的下降沿更新 SDO 数据是否正确?

② 关于寄存器初始化
我们当前正在 ADC 初始化期间设置以下寄存器:

  • GENERAL_CFG 寄存器 (0x01)= 0x8A
    →GENERAL_CFG[1]:CAL = 1(已启用 ADC 失调电压校准)
    →在 ADC 初始化过程中是否需要执行失调电压校准?

  • OPMODE_CFG 寄存器 (0x04)= 0x08
    Δ V OPMODE_CFG[3:→:CLK_DIV = 1000b(采样频率= 62.5kSPS)

如果必须配置其他寄存器才能在菊花链模式下正确运行 ADC、请告知我们。

③ 关于通信问题的假设

我们怀疑该问题可能是由于向所有 5 个 ADC 发送数据时 SCLK 时钟数量不足而引起的。

由于链由 5 个器件组成、因此我们认为在单次 SPI 传输中需要 24 位× 5 = 120 位 SCLK、才能通过所有器件正确传播数据。

但是、我们目前0x080180按顺序发送 24 位命令/地址/数据 () 5 次、这可能不足以让下游 ADC 通过 SDO 接收和传递数据。

④ 要确认的问题

  • 在菊花链模式下写入 5 个 ADC 时、是否需要在单次传输中发送 120 个 SCLK 时钟?

  • 或者、只要之后发送额外的 SCLK 时钟 (24 ×(N−1)= 96 位)以允许数据通过链传播、单独发送 5 组 24 位命令是否有效?

  • 在菊花链模式下运行 ADS7066 时、我们是否应该注意任何其他时序或配置点?

感谢您的确认和支持。
可根据要求提供示波器捕获和电路原理图。 如果您需要更多详细信息、请告知我们。

此致、
Conor

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

    您好 Conor、  

    感谢您的提问和详尽的说明!

    • 是、使用 SPI-00 会在上升沿锁存、并在下降沿转换。  

    • 一般的 CFG 看起来很好! 失调电压校准不是必需的、但建议进行此校准。 如果启用 CLK_DIV 是目标、则 OPMODE_CFG 看起来也很好
      1. 这里我想注意的是、仅当启用了均值计算功能时才应使用振荡器分频 (CLK_DIV)。
        1. 当启用均值计算时、需要一次单次转换、并且所有后续转换都在内部生成、该内部转换的速率由 OPMODE_CFG 中的寄存器设置。
        2. 否则、转换率应由 CONVST 引脚信号确定。 如果在没有均值计算模式的情况下需要 62.5ksps 的采样率、则需要相应地调整 SPI/SCLK。
      2. 您是否计划启用均值计算模块?   
      3. 您是否可以在不设置 OPMODE_CFG_CLK_DIV 值的情况下尝试写入器件?
      4. 菊花链不需要寄存器配置、可以保持 CS 为低电平、提供足够的 SCLK、并且只需要按照数据表中的图 7-7 连接器件。  

    • 120 个 SCLK 应该足以支持 5 个器件。  
      1. 当器件继续接收 SCLK 时、CS 在进入菊花链模式时保持低电平、并通过 SDO 输出通过 SDI 进入的信号。
      2. 因此、在使用 5 个器件的情况下、前 24 个 SCLK 将写入器件 0、从而保持 CS 为低电平、直到共享的图像中看到接下来的 24 个 SCLK、才会在 SDO0 上看到输入。 这意味着器件 1 将在 25-48 SCLK 期间发送命令、在 49-72 SCLK 期间发送器件 2、在器件 3 73-96 期间发送命令、最后是在器件 4 上发送 97-120 命令。
      3. 如果您想读回 FPGA 中的值、则需要额外的 24 个 SCLK。  
      4. 5 个器件和 FPGA 之间的距离是否特别长?
        1. 在 1MHz 我不会太担心,除非他们是非常远离彼此
        2. 如果比较第一个和最后一个器件(或最接近和最远的器件)的 SCLK 输入、是否存在显著的差异?

    • 不需要单个 N x 24 SCLK、突发模式可以正常工作、只要总 SCLK 仍为 Nx24 (5 个器件为 120)

    • 使用菊花链时需要考虑的一个重要时序是数据吞吐率 (1/t_cycle)
      • 器件同时接收启动转换的命令、该命令不应超过 3.2us、遵循 Nx24 SCLK、最后在 CS 再次变为高电平之前接收到 t_quiet。
      • 在菊花链中时、可以说 t_cycle = t_conv + N*(24*t_sclk)+ t_quiet  
        • 对于 62.5ksps、t_cycle = 16us  
        • T_SCLK =(t_cycle - t_conv - t_quiet)/(N*24)-->(16us - 3.2us - 20ns)/120 = 106.9ns -> SCLK = 9.4MHz
        • 其中 SCLK = 1MHz
          • T_cycle = 3.2us +(120*1us)+ 20ns = 123.22us ->采样率= 8.1ksps  
    • 除了吞吐量外、重要的是确保满足 SDI 时的建立和保持时间(分别为 t_su_ckdi 和 t_ht_ckdi)、同样对于 1MHz、我认为这不会是问题、但要确保会很好。  更大的问题是器件相差太远且 SDI/SDO 信号是否降低、或者它们之间相差太远、如果缓冲器增加了一些延迟或类似的情况、则使用缓冲器。  
      • 从您的图像中、我可以看到一些位丢失、黄色信号似乎也比绿色信号更低、很难使用共享的图像进行确认、但如果您可以确认 SCLK 上升沿是否与预期的 SDI 信号对齐、如果不是、它们是否与 SDO 上显示的内容相关

    此致、  

    Yolanda  

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

    你好、 Yolanda、

    感谢您的答复。

    Δ V 关于转换周期和采样率 ①
    例如、如果所需的采样率为 62.5ksps、则目标转换周期 (t_CYCLE) 应约为 16µs。

    为了满足此要求、可以使用以下公式计算必要的 SCLK 时钟周期:
    (16µs−3.2µs−20ns)÷120≈106.9ns、
    这对应于大约 9.4MHz 的 SCLK 频率。

    由于我们的目标是以 62.5ksps 的采样率运行、因此理解所需的最小 SCLK 频率约为 9.4MHz 是否正确?

    可以使用以下公式计算转换周期 (t_cycle):
    T_cycle = t_conv + N×(24 ×t_SCLK)+ t_quiet

    因此、降低 t_SCLK(即增加 SCLK 频率)会缩短 t_cycle、从而可以使采样率高于 62.5ksps。

    基于此、我们认为为了实现 62.5ksps 运行、需要至少约为 9.4MHz 的 SCLK 频率。

    有关 OPMODE_CFG 和 SCLK ② 的 Δ T

    • 我们已配置OPMODE_CFG = 0x08(即)CLK_DIV = 8

    • 根据数据表、CLK_DIV仅当启用均值计算模式时才会使用该设置。

    • 因此、如果不使用均值计算功能、建议忽略该OPMODE_CFG设置并相应地验证运行情况。
      (参考: ADS7066 数据表–第 18 页)

    根据我们对 ADC 数据表的审阅、采样率和转换周期 (t_cycle) 似乎可以通过OPMODE_CFG寄存器进行修改。

    如您所述、必须正确配置 SCLK 频率以匹配所选的采样率和转换周期 (t_cycle)。

    使用OPMODE_CFG(,)的默认配置时OSC_SEL = 0CLK_DIV[3:0] = 0100
    采样率为 250ksps、转换周期t_cycle () 为 4µs。

    在这种情况下、所需的 SCLK 周期为:
    (4 µs − 3.2 µs − 20 ns) ÷ 120 ≈ 6.5 ns
    这对应于大约 153.4MHz 的 SCLK 频率。
    这种理解是否正确?

    为了降低所需的 SCLK 频率、我们CLK_DIV[3:0] = 1000在中进行了配置OPMODE_CFG

    尽管均值计算模式可通过OSR_CFG寄存器启用或禁用、
    我们不打算在我们的应用中使用均值计算函数。

    关于菊花链通信和 ADC 初始化的 Δ ③

    非常感谢您有关菊花链通信和 SCLK 传输方法的详细说明。

    目前、FPGA 根据菊花链模式的规格生成通信时序、因此我们认为时序本身没有问题。

    但是、我们正在观察波形失真、ADC0 器件可能会损坏。 我们目前正在进行部件更换。

    为了确认这一点、我们感谢您在以下关于 ADC 初始化的两点方面提供指导:

    • 在配置每个寄存器之前、是否需要复位 ADC?
      我们知道、可以通过将RSTGENERAL_CFG寄存器中的位设置为“1"来复“来复位 ADC。
      您能否在配置寄存器之前确认此步骤是否是必需的?

    • 以下 URL 指向用于控制 ADS7066 的 C 语言示例代码:
      https://github.com/TexasInstruments/precision-adc-examples/blob/main/devices/ads7066/ads7066.c
      在示例代码中、有一个initADS7066(void)函数执行 ADC 的初始配置。
      根据此函数、我们似乎需要清除 BOR 标志。

      根据数据表、SYSTEM_STATUS可以通过向该位写入“1"来“来清除寄存器中的 BOR 位(“向该位写入 1b 以清除标志“)。
      您能否确认是否有必要在 ADC 初始化期间清除 BOR 位?

    我们希望您能确认这些问题。
    谢谢、

    Conor

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

    您好 Conor、

    1. 正确、要在菊花链中配置采样率、需要配置的是您所示的 SCLK。  
    2. 当未启用均值计算时、应省略 OPMODE_CFG 配置。 默认值设置为 100b、因为是 ADS7066 的最高限值。 仅当启用了均值计算功能时、才应将其设置为 1000b 或任何其他值。
      1. 理想情况下、如果目标是菊花链中有 5 个器件、则 SCLK 需要 153.5MHz。 不过、SCLK 具有 60MHz 的最大限制、因此无法实现这一点。
      2. 对于菊花链中的 5 个器件、最大采样率为~190ksps(如果使用 SCLK = 60MHz 和允许所需其他 SPI 时序要求的控制器)。   
      3. 在菊花链中且未启用均值计算功能时、请按照您在第 1 部分中分享的示例配置采样率。  
    3. 您能否分享有关所看到失真类型的更多信息?  
      1. 每次寄存器写入都不需要复位、实际上、复位器件会将所有寄存器恢复为默认值。  
      2. 至于初始化、我们建议在初始上电后完成复位、然后清除 SYSTEM_STATUS 寄存器中的 BOR 标志、这是一个很好的做法、但它并不总是必需的。  
        1. SYSTEM_STATUS 寄存器中的 BOR 位指示检测到设置下电上电或复位事件的标志。 可通过向该寄存器写入 1 来清除该寄存器、这也是建议值、但不需要该值。  
        2. 此外、我们还建议 在上电/复位后执行偏移校准(在 GENERAL_CFG 寄存器中将 CAL 设置为 1)、并在扩展运行期间定期执行偏移校准以保持最佳性能。

    我想添加一些附加信息、以解释  在未启用均值计算的情况下为何应省略 OPMODE_CFG 的任何配置。  

    ADS7066 在单次转换模式下运行、在该模式下、由 CS 上升沿触发单次转换。 当 CS 变为高电平时、该器件会生成内部转换启动信号、以开始转换先前采集的样本。 除非启用了均值计算、否则内部转换启动信号在 CS 上升沿之间发生一次、从而使控制器完全控制采样速率、仅受时序限制((t_cycle≥4µs、t_conv 和 t_acq≥800ns 的时间、以及数据表中表 6.6 和 6.7 中设置的其他要求)。

    对于较慢的采样率、只需增加 CS 上升沿之间的时间(例如,较慢的 SCLK、较长的 t_quiet)。  

    启用均值计算功能 (OSR_CFG) 时、该器件使用内部振荡器在单个 CS 上升沿后在内部生成 N 次转换。 此参数的时序通过 OSC_SEL 和 CLK_DIV 设置(请参阅表 7-3)。 控制器不再驱动采样率、内部时序将接管直到平均值计算完成。  

    如果未启用均值计算、则忽略任何 OPMODE_CFG 配置。  

    我希望这对用例有所帮助、在介绍的 5 个器件为菊花链、62.5ksps 的用例中、我建议遵循第 1 节中的示例、将 SCLK 设置为 9.4MHz 、并省略 OPMODE_CFG 上的任何配置。

    9.4MHz 是否是当前系统中的一个选项? 还是 62.5ksps 是硬性要求?  

    此致、  

    Yolanda