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.

[参考译文] ADS124S08:通过 RDATA 命令读取数据时出现问题

Guru**** 2390755 points
Other Parts Discussed in Thread: ADS124S08

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1355814/ads124s08-issues-when-reading-data-by-rdata-command

器件型号:ADS124S08

亲爱的人们:

我在单次模式下使用 ads124s08一个通道、并使用通过 COM 运行 LabVIEW Code 的主机 PC 对其进行控制。

如果我启动 LabVIEW 代码、ads124s08并运行以下第 I 节和第2节代码:  

第1节:(在 main 函数中)

将 CS 设为低电平;
td 延迟(CSST);


发送 RESET 命令(06h)、确保器件在上电后正确复位;
延迟4096·tCLK;


使用 WREG 命令写入相应的寄存器配置;(设置单次触发;PGA;采样率;选择单通道 AI6+AI7)


td 延迟(SCCS);
将 CS 清除为高电平;


将 START/SYNC 设置为低电平;
延迟至少为24tCLK·;
将 START/SYNC 设置为高电平;               //首次启动 ADC 单次转换
延迟至少为28tCLK·;
将 START/SYNC 设置为低电平;               // ADC 转换完成,停止进行下一次转换

第2节:(在中断函数中)

环路
{
 等待 DRDY 转换为低电平;(中断)
 将 CS 置为低电平;
 td 延迟(CSST);


 发送 RDATA 命令;


 发送24个 SCLK 上升沿以读取 DOUT/DRDY 中的转换数据;


 td 延迟(SCCS);
 将 CS 清除为高电平;


 将 START/SYNC 设置为高电平;                    //再次开始 ADC 单次转换
 延迟至少为28tCLK·;
 将 START/SYNC 设置为低电平;                    // ADC 转换完成,停止进行下一次转换

                                      //等待/DRDY 中断

通过这种方式、ads124s08将在单次模式下"连续"采集。 然后我停止 LabVIEW 代码、它将在第2节中停止循环。 到目前为止情况非常好。

问题是、如果我再次重新启动 LabVIEW 代码、有时(可能是20%)我可以看到第一个样本显然是错误的(其余样本都是正常的)。 通过进一步的研究,我发现错误的第一个样本正是前一次采集的最后一个样本,如下图。

     

我个人认为问题可能来自 内部数据保存寄存器、因为我是通过 RDATA Command 读取 ads124s08。 似乎我在第2节中停止循环、并重新启动第1节、最后一个样本可以保留在数据保存寄存器中、主机 LabVIEW 将在下一次采集中再次读取。

我的问题是,

1) 是否有办法可以完全清除数据保存寄存器中的数据、以便以后采集时永远不会读取数据?

2) 在第一节中,我发送一个延迟4096*tclk 的 RESET 命令,尝试重置 ads124s08。 但结果不好、因为我仍然可以找到错误的第一个样本。   

3) 此外,从数据表第66页,"重置命令重置数字滤波器并将所有配置寄存器值设置为默认设置". 复位对数据寄存器没有影响?

4) 当然、如果我关闭设备硬件电源然后再次打开电源、一切都运行良好。 我从未见过错误的第一个样本。  但我在实际工作中无法做到这一点。

关于 RDATA 命令、您能提供一些建议吗? 谢谢。

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

    尊敬的 Jun Liu:

    如果您在 START/SYNC 引脚切换后读取转换数据、则您提供的描述不遵循器件操作。  如果您要两次读取相同数据、则很可能您还没有真正开始下一次转换、而下一次转换将复位数字滤波器、以清除转换缓冲区。  这似乎是代码中的计时问题。   

    对这种情况进行故障排除的最佳方法是使用逻辑分析仪并监控 SPI 通信、START/SYNC 和 DRDY 引脚。  除了转换寄存器可能保存相同的数据外、LabVIEW 代码也有可能保存值并错误地返回。  在这种情况下、您实际上不能使用调试器、因为它并不能完全清楚哪个代码(固件或 GUI)有故障。  因此、您需要验证读取转换数据的通信和时序是否正确。

    Unknown 说:
    1) 是否有办法可以完全清除数据保存寄存器中的数据,这样我以后再也不会读取数据?

    只要数字滤波器复位、转换缓冲器中的数据就应该变为"0"。  在写入某些寄存器时以及启动/同步引脚被切换时会发生这种情况。

    Unknown 说:
    2) 在第一节中,我发送一条延迟4096*tclk 的重置命令,尝试重置 ads124s08。 但结果不好、因为我仍然可以找到错误的第一个样本。   [/报价]

    发送复位命令应该会清除所有内容。  此外、如果您写入 MUX、PGA、REF 等寄存器、则该值应复位。  这就是我怀疑 LabVIEW 代码存在问题的原因。

    Unknown 说:
    3) 此外,从数据表第66页,"重置命令重置数字滤波器并将所有配置寄存器值设置为默认设置"。 复位对数据寄存器没有影响?

    复位数字滤波器将复位使用 RDATA 命令读取的转换缓冲器值。

    Unknown 说:
    4) 当然,如果我关闭设备硬件电源然后再接通电源,一切都运行良好。 我从未见过错误的第一个样本。  但我在实际工作中无法做到这一点。

    这会使代码中的所有内容重新开始。  在应用程序中启动和停止代码不一定能清除已存储的存储器。  如果一个新的转换已完成、您应该获得最新的转换结果。  如果您得到"0"或其他一些数据、则是在结果准备就绪之前读取转换数据。

    此致、

    鲍勃 B

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

    感谢 Bob 的回复。 我将尝试通过监控 SPI 通信、START/SYNC 和 DRDY 引脚来调试更多细节。

    PS:我还有一个问题吗?

    1) 1)如果我计划直接读取 ads124s08数据(不使用 RDATA 命令)。 我的/DRDY 中断服务代码中的"直接读取数据"和"通过 RDATA 命令"有何区别?  

    据我所知, 根据数据表第16页,读直接数据(没有 RDATA 命令)定时要求,只需发送24个 SCLK (没有 STATUS 和 CRC)后,/DRDY 是足够的?

    2)"直接读取数据"的含义是、从 DRDY 的下降沿到 读回不发生串行活动、或数据无效。" 在数据表的9.5.4.1部分?  

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

    尊敬的 Jun Liu:

    1) 1)如果我计划直接读取 ads124s08数据(不使用 RDATA 命令)。 我的/DRDY 中断服务代码中的"直接读取数据"和"通过 RDATA 命令"有何区别?  

    据我所知, 根据数据表第16页,读直接数据(没有 RDATA 命令)定时要求,只需发送24个 SCLK (没有 STATUS 和 CRC)后,/DRDY 是足够的?

    [/报价]

    当 ADC 转换完成时、新的转换结果将自动放入输出缓冲区。  DRDY 的下降沿指示新转换结果已就绪、可供您读取。  只要您在发布下一个转换结果前已完成读取结果、您就应该没问题。  RDATA 命令允许您随机读取数据、并会阻止下一个转换数据的自动输出、直到 RDATA 和转换数据读取完成。

    如果您确实是直接读取数据、则只需发送有关要读取的字节数的 NOP。  仅读取转换数据的3个字节数据。  如果您使用 STATUS 和 CRC、则需要调整读取的字节数以匹配要传输的数据。

    2)"直接读取数据"的含义是:从 DRDY 的下降沿到 读回不发生串行活动,或者数据无效。" 在数据表的9.5.4.1部分?  [/报价]

    这意味着数据位于输出缓冲区中、因此如果您尝试在 SCLK 上发出命令或有一些活动、转换数据将开始在器件时钟输出。  因此、您需要确保在时钟沿输出数据并有意进行采集。  SPI 为全双工、因此您可以在捕获数据的同时发出 WREG 命令。  但是、如果您发送 WREG 命令(或其他一些命令)而未同时读取转换数据、则将丢失转换数据、在这种情况下需要使用 RDATA 命令。

    此致、

    鲍勃 B

    [/quote]