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.

[参考译文] ADS131A04EVM:异步中断模式接受的配置命令。 但是、该器件在第一个数据周期以所有零进行响应。 然后 DRDY 不会再次变为低电平

Guru**** 2391945 points


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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/859211/ads131a04evm-configuration-commands-accepted-for-async-interrupt-mode-however-the-device-responds-back-with-all-zeroes-on-first-data-cycle-then-drdy-doesn-t-go-low-again

器件型号:ADS131A04EVM

大家好、我使用的是评估套件、其中 FPGA 以有线方式作为主器件、但由于 ADC 在第一个 DRDY 下降沿未向我提供数据、因此遇到了一些问题。 然后、我看不到 DRDY 恢复为低电平、因此我想知道我是否在以下位置设置不正确:

 

对于具有+/-2.5V 输入电压的异步中断模式、我具有以下设置:

JP1:已安装、以允许 FPGA 成为主器件

我使用的是 USB 电源、因此将 JP2和 JP3跳线保持原样

JP5:1-2: (M0:IOVdd 异步中断模式)

JP6:2-3 (M1:GND 24位)

JP7:我尝试了2-3和浮点并获得了相同的结果。 (禁用 M2汉明码)

JP8:未安装(的电荷泵)

JP9:已尝试安装和卸载。 (使用板载参考)

JP10:未安装(使用板载 IOVDD)

JP11:2-3 (使用+/-2.5V 电源)

我使用以下配置过程来启用 ADC 的4096过采样、以便在异步中断模式下提供4kHz 的采样率。 如果 CFG 中的设置不正确、请告诉我:

发送空命令:0x000000

发送解锁命令:0x065500

发送 SYS_CFG_REG 写入:0x4B6800

发送 CLK1_REG 写入:0x4D0000

发送 CLK2_REG 写入:0x4D0000

发送 ADC_EN 寄存器写入:0x4F0F00

发送唤醒命令:0x003300

发送锁定寄存器命令:0x055500

发送空命令:0x000000  (我在这里得到的每个响应都是正确的、您可以在逻辑分析器快照中看到它)

等待 ADC 将 DRDY 拉至低电平、然后继续并读取所有通道数据。 当我读取数据时、我将锁定寄存器命令返回为4个数据通道的状态、但平坦 DIN。 当我保持 ADC 不变并复位 FPGA 以重新启动初始化例程时、我只有在 DRDY 变为低电平后才能看到来自 ADC 的正确数据。 然后、读取该值后、我不会看到 DRDY 再次变为低电平。

这是初始化:

这是首次读取的数据:

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

    Tony、


    数据表中没有非常清楚地说明它、但当转换完成时、会指示/DRDY。 但是、转换被放入数据缓冲区、之后的/DRDY 周期是您可以时钟输出数据的时间。 这会增加读取数据的一个数据周期延迟。 在第一个/DRDY 之后、由于输出数据缓冲区开始为空、因此在器件启动时数据应提供000000h。 第二个/DRDY 将具有第一个 ADC 输出数据。

    至于/DRDY 未返回低电平的行为、我需要更加仔细地完成您的序列。 我要注意的是、在 EVM 上、丝印中的 MISO 和 MOSI 标签互换了。 因为您能够从器件中读取数据、我想您现在已经知道了。

    虽然我需要一些时间来阅读您的序列、但让我为您提供一些有关 EVM 勘误表的注意事项:

    - S5和 S8上的缓冲区/页眉的丝印错误
    -R89应该被移除或者缓冲器不执行任何操作
    -同样、MISO 和 MOSI 标签交换用于 J3引脚3和5
    - R90应该是空载的(但是它应该仍然有效、我只是觉得1kΩ 是一个很强的下拉电阻)


    吴约瑟

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

    Tony、


    现在、我有机会浏览一下该图、我确实有几个问题。 我不确定这些问题是否是由于逻辑分析仪中的分辨率导致的、但在初始化过程中、有两件事情是关闭的。 以下是随 DOUT 读数一起发送的图像(可能很难读取、因此您可能必须参考原始发布图像):



    首先、在 null 命令字中、我仅计算了23位。 我不确定这通常是否是 null 命令响应的问题、但我只是想指出这一点。 其次、在最后一个字中、即 lock 命令的响应、通常会得到 lock 命令响应、看起来响应会被一个位移。 响应看起来像82AA80h。

    因此、我将检查通信的速度和时间。 我认为这通常不会使器件关断、但由于这些错误、我会验证时序是否正确。

    我还会查看/RESET 引脚是否为高电平。 /RESET 为低电平有效、因此如果为低电平、则您将使器件保持复位状态、这将阻止器件运行。 我还会检查 CLKIN 是否到达器件。

    我会注意到、我看不到任何通常会成为问题的东西。 除了我指出的情况外、该器件似乎基本上是正确响应的。



    吴约瑟

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

    您好、Joseph、

    我继续将零值更正为24个时钟周期。 我也看不到评估套件配置有任何问题。 当我添加正确的零数时、我注意到器件给我回了一个针对 SPI 故障的 STAT_1寄存器错误、因此我在状态机中添加了对 STAT_S 寄存器的额外读取。 我发现寄存器中的位0被置位、对应于每帧发送的 SCLK 不足的 F_FRAME 误差。 我去计算每个时钟、因为您发现缺少时钟、现在我在我的捕获中看不到任何缺失的 SCLK。 根据我的理解、对寄存器的读取或写入应是24个时钟、M1设置为接地。 我在引脚和接头上进行了测量、我正在测量接地。 我在 M2接地或悬空时得到相同的误差。  我缺少什么?

    另一个问题是 DRDY 在第一个数据周期未就绪。 我是否应该将第一个采样更改为仅仅是一个24时钟 NULL 语句? 或者它是否需要完整的120个时钟(状态、通道1-4)。

    以下是我今天捕获的一些波形图。 这是新的 NULL 和状态读取:

    这是第一个显示 SCLK 数量不正确的状态的数据捕获:

    这是新的完整数据帧读取、显示了每帧的正确时钟数。

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

    Tony、


    解码波形需要一些时间、但我需要更多的时间来找出问题所在。

    查看您发送的图、第一幅图如下所示:

    假设第一个字节符合预期、则解码为:

    输出:2F0F00 003300 055500 223000
    输入:003300 055500 000000 250000

    此事务是一个 WAKEUP、LOCK、然后是 NULL 命令、然后是地址05h (STAT_S)的读取。 输入响应如预期(我猜第一个输出是对启用 ADC 写入的响应)。 此时、看起来您已经从 null 命令中获得了错误。 空响应是读取 STAT_1、提供了 F_SPI 和 F_ADCIN。

    第二个事务看起来像是从 STAT_S 读取的最后250000的响应、给出了 F_FRAME 错误:

    输出:250100
    输入:000000

    最后一个事务看起来就像显示了整个合并事务。 它看起来是 NULL、解锁、然后是一系列单寄存器写入。 之后是一个唤醒、然后是一个锁定、后跟一个 NULL (然后是一个添加的对 STAT_S 的读取):

    输出:FF0400 FF065500 2B6800 2D0400 2E0000 2F0F00 003300 055500 223000
    输入:000000 065500 4B6800 4D0400 4E0000 4F0F00 003300 055500 000000 250000

    首先、回到您的第一个帖子、/DRDY 是否仍不会变为低电平? 根据您的问题、您现在似乎正在查看 SPI 通信错误、以确定 F_FRAME 错误的来源。 这种通信看起来是正确的、但可能有助于添加几个额外的空命令、仅查看来自 STAT_1寄存器的响应。 每次读取 STAT_1寄存器时、如果错误消失、应将其清除以供以后读取。 尽管我们遇到了 F_SPI 错误、但读写操作看起来确实正常。


    吴约瑟

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

    Joseph、

    器件现在按预期工作、并且我始终收到正确的数据。 事实 证明、我需要对状态机中的 DRDY 中断进行去抖(DRDY 恰好落在时钟的上升沿、从而导致竞态条件)、因此这是我一直关于 DRDY 的问题。   

    尽管数据是正确的、但我仍然会始终收到 F_FRAME 错误。 我将关闭此帖子、但值得提及的是、F_FRAME 错误似乎是假的。

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

    Tony、



    我很高兴您能够让您的系统正常工作、并且能够始终如一地收集数据。

    至于 F_frame error、出于巧合、我们最近遇到了类似的问题、我确实需要尝试一些东西。

    在复位后启动器件时、您可以使用 null 命令获取就绪响应。 不过、需要一个 SCLK 来准备 SPI。 第一个 SCLK 被器件忽略。 这意味着就绪响应将被移动一位、而器件在需要24位时将接收23位、从而导致 F_FRAME 错误。

    为了解决这个问题、我会尝试两种方法中的一种。 对于第一个就绪响应、以额外位(或字节)为单位时钟。 额外的位应该会得到 F_FRAME 误差。 另一个要尝试的方法是发送两次正常的 null 命令、然后通过读取 F_frame 错误来清除该错误。 后续读取应清除 F_SPI 位。

    我们还没有机会测试这些解决方案、但我们正在进行测试。 如果您有兴趣、我会在我们这么做时告诉您。



    吴约瑟

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

    Tony、



    本主题的另一个附录。 如果在器件启动后发送 F_FRAME 标志(正如我在上一篇文章中提到的)、需要检查的一件事是启用 ADC 后的通信。

    设置 ADC_ENA 后、器件会期望数据传输将包含 ADC 数据、因此即使您不尝试读取数据、也需要在每个帧中传输4个字。

    同样、使用 F_FRAME 读取 STAT_S 寄存器应清除该位。



    吴约瑟