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:ADS124S08在数据读取期间始终发回零、但寄存器读操作正常。

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

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/951185/ads124s08-ads124s08-always-sends-zeroes-back-during-data-reads-but-registers-read-fine

器件型号:ADS124S08

我有一个系统、其中有多个 ADS124S08器件连接到 Kintex7 FPGA。  SPI 以12.5MHz 的频率运行(速度较慢不会产生任何影响)。  每个器件共享 CS/DIN/SCK、但有自己的专用 DOUT 引脚连接到 FPGA。  在目标应用中、需要单次转换、但这些转换的速度并不是很重要。  

IOVdd=3.3V

DVDD = 3.3V

CLK =来自 FPGA 的3.3V 逻辑4.096MHz 时钟

RESET=3.3V

AVDD =+2.5V

AVSS =-2.5V

REFN0= 0V

REFP0 = 2.5V

启动/同步= 0V

DRDY =悬空

CS/DIN/SCK/DOUT 通过电阻器3.3V 逻辑连接到 FPGA。  DOUT 有一个启用的 ON-FPGA 上拉电阻器。

作为基本测试、我已将 ADS124S08配置为读取裸片温度传感器、并以增益1启用 PGA。  这将提供一些数据以供读取、而无需考虑输入。  尝试各种采样率确实会改变 DRDY/DOUT 线路的行为、但始终会导致全零数据。  

测试寄存器配置:


       常量 ADS124S08_REGMAP_debug_using_internal_temperature 传感器:ADS124S08_REGMAP_T:=(
       x"00",--标识号
       x"00",--状态  :清除上电复位标志
       X"01"、-- INPMUX
       X"C8",-- PGA     :最长稳定时间,PGA 启用,1倍增益
       x"eb",-- datarate:启用全局斩波,外部时钟,单冲,1000个样本/秒
       x"10"、--基准    
       x"00",-- IDACMAG
       X"FF",-- IDACMUX
       x"00"、-- VBIAS  
       x"51",-- SYS   :使用内部温度传感器作为数据源,8个样本计算,无 SPI 超时,带 CRC,无状态字节
       X"00"、-- OFCAL0
       X"00"、-- OFCAL1
       x"00"、-- OFCAL2
       X"00"、-- FSCAL0
       X"00"、-- FSCAL1
       X"00"、-- FSCAL2
       x"00"、-- GPIODAT
       X"00" -- GPIOCON        
       );

请参阅使用 saleae 逻辑捕获的波形以打开此处的文件:

drive.google.com/.../view

我可以成功读取加电默认寄存器内容并根据数据表进行验证、因此 SPI 通信似乎正常。  我还可以对寄存器进行写操作和回读、以验证新内容。 DOUT/DRDY 组合引脚在一段时间后从高电平转换为低电平、这取决于采样率、但后续切换 CLK 以获得 ADS124S08的全零响应。

欢迎就此问题提供任何意见。   

谢谢、

Zis

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

    Zismos、您好!

    请注意、由于我们的内部防火墙、我们无法访问 Google 驱动器文件、您能否在后续帖子中发布逻辑分析仪图片? 我不知道您到目前为止分享了什么、 但是、当您写入寄存器并读回结果、初始开始转换(您似乎看到 DOUT/DRDY 切换)以及在选择温度传感器后开始转换时、查看 SCLK、CS、DOUT 和 DIN 引脚的状态将会有所帮助。

    此外、如果您有一个原理图要共享、这将很有帮助。

    请注意、在所有3个 CS 引脚连接在一起的情况下、您将无法单独配置每个 ADC、即它们都将共享相同的配置设置。 我只是想确认这是预期行为。

    布莱恩

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

    Zismos、您好!

    您还可以获得以下两点:

    1. 您可以在 ADS124S08上使用的最大 SCLK 速度为10MHz、而您使用的是12.5MHz。 请降低 SCLK 速度、否则器件将无法正常工作
    2. 您已在上面提供的配置设置中将 FSC 寄存器设置为所有零。 请注意、该寄存器是增益调节值、因此乘以转换结果。 因此、如果 FSC=0、那么您将转换结果乘以0、因此这就是您在输出上看到的结果。 具体查看第84页的 FSC[23:16]默认值以及第57页的第9.3.14.2节、了解更多信息

    布莱恩

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

    很棒的地方!

    我已经纠正了您遇到的两个问题、现在使用 SCLK=5MHz 并且正确使用 FSC 寄存器(不会从默认值发生变化)。

    现在、转换结果是非零、但分布奇怪。  已尝试在芯片温度传感器源和 DVDD/4测试源上使用。  这两种模式的行为方式相同:转换结果非常 接近0x000000或非常接近0xFFFFFF.


    附加了一些标记为逻辑分析仪的捕获。  下面是 SPI 流量的转储、并附有一些注释。  为了便于实现、32位传输总是被使用、并且不需要的值被 NOP (0x00)填充。

    将根据需要共享部分原理图、但连接如第一篇文章中所示、所有模拟输入悬空(连接到所有打开的模拟开关)、使用 DVDD/4作为输入源。



    时间 MOSI MISO 注释
    5.2E-08 0x02000000 0x00000000 WAKE 命令(针对所有芯片的全新上电)
    1.005E-05 0x20000000 0x00000800 转储寄存器
    2.005E-05 0x21000000 0x00008000 转储寄存器
    3.005E-05 0x22000000 0x00000100 转储寄存器
    4.005E-05 0x230000 0x00000000 转储寄存器
    5.005E-05 0x24000000 0x00001400 转储寄存器
    6.005E-05 0x25000000 0x00001000 转储寄存器
    7.005E-05 0x26000000 0x00000000 转储寄存器
    8.005E-05 0x27000000 0x0000FF00 转储寄存器
    9.005E-05 0x28000000 0x00000000 转储寄存器
    0.00010005 0x29000000 0x00001000 转储寄存器
    0.000110052 0x2A000000 0x00000000 转储寄存器
    0.00012005 0x2B000000 0x00000000 转储寄存器
    0.00013005 0x2C000000 0x00000000 转储寄存器
    0.00014005 0x2D000000 0x00000000 转储寄存器
    0.00015005 0x2E000000 0x00000000 转储寄存器
    0.00016005 0x2F000000 0x00004000 转储寄存器
    0.00017005 0x30000000 0x00000000 转储寄存器
    0.00018005 0x31000000 0x00000000 转储寄存器
    0.00019005 0x41000000 0x00000000 写入
    0.000199848. 0x21000000 0x00000000 读回
    0.00020985 0x4300C800 0x00000000 写入
    0.00021965 0x230000 0x0000C800 读回
    0.00022965 0x4400EB00 0x00000000 写入
    0.00023945 0x24000000 0x0000EB00 读回
    0.00024945 0x49009200 0x00000000 写入
    0.00025925 0x29000000 0x00009200 读回
    0.000269448 0x08270000 0x000000FF START + READ + READLENGTH=1字节+ NOP。 读取以‘1’结尾的寄存器
    0.038572438 0x00000000 0x00000309 具有 CRC 的直接读取转换结果
    0.038583838 0x08270000 0x000003FF START + READ + READLENGTH=1字节+ NOP。 读取以‘1’结尾的寄存器
    0.076886834 0x00000000 0x000021E7 具有 CRC 的直接读取转换结果
    0.076938434 0x08270000 0x000021FF START + READ + READLENGTH=1字节+ NOP。 读取以‘1’结尾的寄存器
    0.115241432 0x00000000 0x0000348C 具有 CRC 的直接读取转换结果
    0.11525283 0x08270000 0x000034FF START + READ + READLENGTH=1字节+ NOP。 读取以‘1’结尾的寄存器
    0.15355583 0x00000000 0x00001070 具有 CRC 的直接读取转换结果
    0.15360743 0x08270000 0x000010FF START + READ + READLENGTH=1字节+ NOP。 读取以‘1’结尾的寄存器
    0.1910424 0x00000000 0x00001070 具有 CRC 的直接读取转换结果
    0.191921822 0x08270000 0x000010FF START + READ + READLENGTH=1字节+ NOP。 读取以‘1’结尾的寄存器
    0.230225018 0x00000000 0x00000715 具有 CRC 的直接读取转换结果
    0.230276616 0x08270000 0x000007FF START + READ + READLENGTH=1字节+ NOP。 读取以‘1’结尾的寄存器
    0.268579608 0x00000000 0xFFFFFA14 具有 CRC 的直接读取转换结果
    0.268591008. 0x08270000 0xFFFFFAFF START + READ + READLENGTH=1字节+ NOP。 读取以‘1’结尾的寄存器
    0.306894002 0x00000000 0x0000041C 具有 CRC 的直接读取转换结果
    0.3069456 0x08270000 0x000004FF START + READ + READLENGTH=1字节+ NOP。 读取以‘1’结尾的寄存器
    0.345248394 0x00000000 0x0000194F 具有 CRC 的直接读取转换结果
    0.345259794 0x08270000 0x000019FF START + READ + READLENGTH=1字节+ NOP。 读取以‘1’结尾的寄存器
    0.383562782 0x00000000 0xFFFFFA14 具有 CRC 的直接读取转换结果
    0.38361438 0x08270000 0xFFFFFAFF START + READ + READLENGTH=1字节+ NOP。 读取以‘1’结尾的寄存器
    0.421917568 0x00000000 0xFFFFF125 具有 CRC 的直接读取转换结果
    0.421928968 0x08270000 0xFFFFF1FF START + READ + READLENGTH=1字节+ NOP。 读取以‘1’结尾的寄存器
    0.460231956 0x00000000 0x00001070 具有 CRC 的直接读取转换结果
    0.460283556 0x08270000 0x000010FF START + READ + READLENGTH=1字节+ NOP。 读取以‘1’结尾的寄存器
    0.498586538 0x00000000 0x00000F2D 具有 CRC 的直接读取转换结果
    0.498597938 0x08270000 0x00000FFF START + READ + READLENGTH=1字节+ NOP。 读取以‘1’结尾的寄存器
    0.536900922 0x00000000 0x00001D53 具有 CRC 的直接读取转换结果
    0.536952522 0x08270000 0x00001DFF START + READ + READLENGTH=1字节+ NOP。 读取以‘1’结尾的寄存器
    0.575255512 0x00000000 0xFFFFED71 具有 CRC 的直接读取转换结果
    0.575266912 0x08270000 0xFFFFEDFF START + READ + READLENGTH=1字节+ NOP。 读取以‘1’结尾的寄存器
    0.613569902 0x00000000 0xFFFFFD01 具有 CRC 的直接读取转换结果
    0.613621502 0x08270000 0xFFFFFDFF START + READ + READLENGTH=1字节+ NOP。 读取以‘1’结尾的寄存器
    0.65192449 0x00000000 0x00001662 具有 CRC 的直接读取转换结果
    0.65193589 0x08270000 0x000016FF START + READ + READLENGTH=1字节+ NOP。 读取以‘1’结尾的寄存器
    0.690239078 0x00000000 0xFFFFCD91 具有 CRC 的直接读取转换结果
    0.690290678 0x08270000 0xFFFFCDFF START + READ + READLENGTH=1字节+ NOP。 读取以‘1’结尾的寄存器
    0.728593864 0x00000000 0xFFFFEA64 具有 CRC 的直接读取转换结果
    0.728605266 0x08270000 0xFFFFEAFF START + READ + READLENGTH=1字节+ NOP。 读取以‘1’结尾的寄存器
    0.766908256 0x00000000 0x0000041C 具有 CRC 的直接读取转换结果
    0.766959856 0x08270000 0x000004FF START + READ + READLENGTH=1字节+ NOP。 读取以‘1’结尾的寄存器
    0.805262848 0x00000000 0x00001848 具有 CRC 的直接读取转换结果
    0.805274248 0x08270000 0x000018FF START + READ + READLENGTH=1字节+ NOP。 读取以‘1’结尾的寄存器
    0.843577246 0x00000000 0x00000309 具有 CRC 的直接读取转换结果
    0.843628844 0x08270000 0x000003FF START + READ + READLENGTH=1字节+ NOP。 读取以‘1’结尾的寄存器
    0.881931836 0x00000000 0x00001177 具有 CRC 的直接读取转换结果
    0.881943236 0x08270000 0x000011FF START + READ + READLENGTH=1字节+ NOP。 读取以‘1’结尾的寄存器
    0.920246228 0x00000000 0xFFFFFE08 具有 CRC 的直接读取转换结果
    0.920297828 0x08270000 0xFFFFFEFF START + READ + READLENGTH=1字节+ NOP。 读取以‘1’结尾的寄存器
    0.95860082 0x00000000 0xFFFFEA64 具有 CRC 的直接读取转换结果
    0.95861222 0x08270000 0xFFFFEAFF START + READ + READLENGTH=1字节+ NOP。 读取以‘1’结尾的寄存器

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

    Zismos、您好!

    您如何确定新转换数据何时就绪? 由于您尚未连接 DRDY 引脚、因此您必须轮询 DOUT/DRDY、我认为吗? 我在您发送的数据中没有看到任何这些事务(可能在缩小的图像中、但我看不到 SPI 线路的详细信息)。

    此外、从上面提供的表中、从发出 START 命令到读取数据似乎存在~38ms 的延迟。 但您已将数据速率设置为1000SPS、这应使用 SINC 3滤波器和单冲转换模式在~3ms 内提供响应。 您能澄清一下这里发生了什么吗?

    布莱恩

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

    Zismos、您好!

    在内部对此进行了一些回顾之后,我看到您正在使用最大延迟设置(4096*tMOD)和全局斩波模式,因此38.3ms 是合理的。 请注意、这会将您的有效数据速率从1000SPS 降至26SPS。

    您是否已检查外部基准电压是否对您的系统有效? 您说过您使用的是2.5V 外部 VREF、您是否在 ADC 上的 REFx0引脚上测量了该电压、以确保您实际为这些引脚施加2.5V 电压?

    此外、请确保禁用 REFP0上的 VREF 缓冲器、因为它与电源相同(VREF = AVDD = 2.5V)。 缓冲器将无法一直驱动到电源轨(AVDD)、因此即使引脚上有2.5V 电压、VREF 电压也可能会下降。

    您还应了解 ADS124S08上的编码方案是使用二进制补码的双极性编码方案。 因此、您看到的值、例如 FFFFEDh 不接近于满量程、而是非常低的负电压值(-5.6uV)。 因此、您看到的值都非常接近0V、无论是正还是负。

    布莱恩

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

    我已经解决了这个问题。  启用 G_CHOP 会导致接近零的值。  

    斩波函数是否平均 x 和-x 而不是 x 和-(-x)?  或者、斩波可能不适用于这些内部测试源?

    禁用 G_CHOP 后、DVDD/4和内部温度传感器源都会产生大致的预期值。  

    不是很重要、我可以在主机端实施斩波。

    感谢您提出的许多好建议!

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

    Zismos、您好!

    我很高兴您能找到问题。 由于 DVDD/4和温度传感器测量仅用于诊断、因此测量相对粗略、因此它们绕过器件内的斩波功能(在您提供的说明中忽略此功能表示歉意)。 因此、如果您想执行这些诊断测量、只需关闭斩波即可。 对于精密信号测量、您绝对可以使用斩波功能来减少失调电压和失调漂移、并通过额外的平均值计算小幅降低噪声。

    如果您对 ADS124S08有任何疑问、请联系我们。 如果它们与此特定主题无关、请开始新主题、我将在此处回答您的问题。

    布莱恩