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.

[参考译文] ADS7828:从 ADS7828到 I2C 读回的值不正确

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1191700/ads7828-values-read-back-from-ads7828-thru-i2c-are-not-correct

器件型号:ADS7828

我将提出一个带有 ADS7828器件的新电路板。 当我通过 I2C 读取通道值时、通道1不正确。

我测量了通道0 (0V)和通道1 (0.23V)的输入值、但当我读回通道值时、所有通道看起来都相同、但不正确。

我将单端输入与内部 VREF 配合使用。 我在2.50V 时测量了 VREF 引脚。

我认为 命令寄存器和通道读取具有正确的 I2C 序列。  

对这里的问题有什么想法吗?

谢谢。

Dan

我将通过 TCL 脚本文件生成 I2C 命令。 附件包括:

-包含 ADS7828器件的原理图页面

- I2C 结果快照

-脚本运行多次的结果的快照

  e2e.ti.com/.../2020CAME_2D00_2M_5F00_pg42.pdf

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

    Dan、

    1. 首先、我建议使用示波器或逻辑分析仪确认数字通信是否正确完成。  器件是否在应应答时间?  I2C 写入的发生顺序是否如图3所示?  是否按照图3进行了相应的写入和读取?  使用正确的 i2c 地址吗?  请附上一张图片、我将进行审阅。
    2. 您是否正确配置了命令字节?  单端或差分、通道选择和断电状态。
    3. 假设所有这些都正确、我们应该看模拟: 测量 Vdd 和 REFout。  您使用的是内部基准还是外部基准?  如果是内部情况、您应该能够确认 REFout 是否准确。  直接在输入引脚上进行测量、以确保信号符合您的预期。
    4. 在原理图中、我可以看到 SDA 和 SCL 有两组不同的网络名称。  这两条不同的 i2c 总线吗?  如果是、ads7828 i2c 总线是否具有上拉电阻器?

    此致、

    艺术

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

    尊敬的 Art:

    1) 1)附加的 I2C 访问的示波器图片
    命令0x8C 的 I2C_WRITE_ACCESS ->结果正常
    命令0x8C 的 I2C_WRITE_ACCESS_ZOOM ->数据外观在时钟上升沿有效
    I2C_READ_ACCESS。 在命令访问= 0x8C 后读取2个字节。 数据读取 MSB = 0x00、LSB = 0x03
    I2C_READ_ACCESS_ZOOM。 放大访问结束
    I2C_READ_ACCESS_Zoom1。 放大数据。
    I2C 地址= 0x48
    ADS7828确实会通过 ACK 进行响应。
    我在两个不同的板上尝试了这些访问、结果相同。


    2) 2)命令字节配置
    CB = 8C、单端、通道0、内部基准、A/D 导通
    CB = 9C、单端、通道1、内部基准、A/D 导通
    CB =交流、单端、通道2、内部基准、A/D 开启
    CB = BC、单端、通道3、内部基准、A/D 导通

    3) 3)测量 Vrefout = 2.50V
    测量 VDD = 3.4V
    CH0输入= 0.0V
    CH1输入= 0.22

    4)另一条 I2C 总线(CXP_EEPROM)是 FPGA 之外的另一条 I2C 总线。
    ADS7828 I2C 从器件与 I2C 多路复用器位于同一总线上、该多路复用器的 I2C 访问没有问题。
    SDA_3.3V/SCL_3.3V 具有上拉至3.3V。

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

    Dan、

    1. I2C 命令序列是合理的、其结果表明您进行了良好的通信。 I2C 波形看起来很干净。  我主要要求提供这些图片、以确认您没有任何数据完整性问题。  说实话、在查看这些波形时、我很难确认准确的通信结果、但是我的确确认看起来是正确的。
    2. 我同意您的配置字节。
    3. 您的模拟电压看起来不错。
    4. 您可以与 I2C 多路复用器通信这一事实表明不存在 i2c 问题。

    后续步骤:

    1. 在最初的帖子中、您提到每个信道的值相同。 在最后一个帖子中、您提到您得到的是 MSB=0x00、LSB=0x03。  这非常接近于0V 测量值。  这是您在所有通道上获得的所有读数吗?  当我查看您的软件屏幕截图时、看起来所有读数都接近零、并且可能有一些噪声。 (即数字绕几个代码移动)。
    2. 假设所有读数均为零、通常会使我认为某个东西悬空或已断开。 完成输入读数后、是否直接在器件引脚上进行了检查?  您是否在任何引脚上都遇到了焊接问题?
    3. 您是否有多个原型? 此部件可能已损坏。
    4. 看起来您的计划是让参考持续开启。 在您最初打开基准之后、您是否等待它稳定(请见读取基准时打开/关闭部分)。  在基准有时间加电前、您的所有命令有可能会被执行。
    5. 这是一个困难的问题。 所有通信看起来都正确、配置/通信非常简单。   模拟测量结果看起来都正确、但您的器件无法进行转换。  

    很抱歉你在这里遇到的困难。  我希望我们能尽快解决这个问题。

    艺术

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

    艺术

    在这个设计中、有一个电源 IC 的封装不正确、我们必须将其翻转过来、然后从 IC 写入焊盘。 这导致系统中出现大量400kHz 噪声。 这将在密码上进行更正。

    我没有使用仪表、而是使用示波器来查看通道1和接地端。 在电源和接地端出现很多噪声。 通道1输入是顶部示波器信号、它具有0.22V 的直流值、但上面有很多噪声。 这是否会导致 A/D 产生0V/不良的值?

    我为通道1从0x000读取到0x003、并且在写入命令字节和读取通道数据之间存在1秒的延迟。

    此致、

    Dan

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

    Dan、

    我认为输入端的噪声可能会使器件处于奇怪(意外)的模式。  如果噪声信号低于0V 或高于 Vdd、则违反了绝对最大工作规格。  超出最大绝对值可能会导致损坏或导致运行异常。  在本例中、它看起来表明噪声信号钳位在0V、这表明 ESD 二极管可能会导通、但实际上、信号会变为低于0V。  根据输入电流、这可能会损坏器件或使其进入奇怪的模式。

    您是否可以尝试以下操作:

    1. 更换 ADC。
    2. 断开或禁用开关电源、并以线性实验室电源代替开关电源。
    3. 重新测试 ADC。

    感谢提供有关开关噪声的信息。  希望这解释了异常操作、并可以在您的下一个版本中消除此问题。

    艺术

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

    艺术

    我在2个电路板上看到过此行为(我只有2个电路板)。 我不认为该器件会损坏、因为通道输入引脚的路径中有高阻值电阻器。

    更换返工的电源 IC 会有些复杂。 电源 IC 是 FPGA 的电源之一、FPGA 具有上电序列、该电源在序列中处于上电序列。 FPGA 需要上电才能使其 I2C 接口工作。

    现在、我们希望通过主板的介入来解决电源问题。 如果您对此没有任何想法、我将继续、结束本次调查。

    Dan

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

    Dan、

    您是否确认已根据数据表引脚排列使用了正确的封装?  如果您为设计创建了新的原理图/布局符号、则可能存在错误。  如果你仔细检查这个,它看起来是正确的,我没有太多的建议。

    在这种情况下、我可以订购一些器件、将其连接到调试系统、并确认正确的命令序列、并记录预期输出。  我考虑这样做的主要原因是、您所做的一切看起来都是正确的、但您却可以获得所有通道的接近零的输出。  如果这只是一个原型、我很可能是器件损坏或组装问题、但我对两个原型怀疑。  您的命令序列中可能出现错误、即使它看起来是正确的。  因此、如果我提供详细的文档、您可以逐步进行此操作并确认您的通信。   如果您希望我这么做、请告诉我。

    艺术

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

    艺术

    我查看了占用空间、结果看起来是正确的。

    如果您着手创建详细的通信程序、我将继续并将其与我的 I2C 访问进行比较。

    Dan

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

    Dan、

    我将执行该操作。  这需要一些时间。  我会尽快告诉你。

    艺术

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

    尊敬的 Art:

    我在仔细研究 I2C 问题、发现在命令和数据读取之间没有重复的启动条件。 我 在命令发送后执行停止条件。

    这是否是我的问题?为什么我读的价值不高?

    谢谢。

    Dan

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

    Dan、

    很抱歉、此操作花费了很长时间。  我有这些器件、只需要安排在实验室中的一些时间。  当我查看图3时、似乎确实需要重复启动。  如果您可以尝试一下、那将非常有用。  该图确实有注释"要确保总线操作的安全并循环回到写入寻址阶段、以便进行下一次转换、请使用重复启动。"  对所有涉及读取的内容重复此相同注释。  请告诉我您是否可以测试重复的启动;我认为您可能已经解决了这个问题。

    艺术

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

    艺术

    我无法让 Xilinx Ultrascale+ PS I2C 内核在结尾没有停止条件的情况下生成命令写入 我需要在 Xilinx 社区论坛上提出一个问题、询问如何做到这一点。

    Dan

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

    Dan、

    在我这边、我将尝试在实验中确认这一点。

    艺术

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

    艺术

    生成重复启动似乎比我的 peek/poke 命令更复杂、需要用到 SW/驱动器人员。 希望这会在几天内发生。

    Dan

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

    艺术

    我们能够在命令写入和读取访问之间创建 I2C 重复启动条件、但我仍然获得与之前相同的结果。

    Dan

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

    Dan、

    我们将在我们这边测试这个。  我们今天连接了电路。  我们将在下周编写软件。

    艺术

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

    艺术

    我做了更多的测试。

    I 强制通道0至0.85V、并且在0.234V 上测量了通道1输入。 通道 o 和1读回的 A/D 值在0x000至0x005范围内。

    控制字节为8°C (通道0)和9°C (通道1)。

    在测试中、我从单端模式更改为差分模式、我得到了预期的值?

    控制字节= 0C。 数据读取= 0x3F3。 1011 x 610uV = 0.617V

    通道0 = 0.85V

    通道1 = 0.234V

    增量= 0.85 - 0.234 = 0.616V

    不确定此测试的含义、但我通过了测试。

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

    艺术

    在进一步审查后、我发现了我的问题(我可以为这一个踢自己)。

    这说明我没有正确跟踪通道解码。 我正在使用以下工具:

    通道0 = OOO

    通道1 = 001

    通道2 = 010

    通道3 = 011

    它应该是:

    通道0 = 000

    通道1 = 100

    通道2 = 001

    通道3 = 101

    在我的板上、所有偶数通道输入均为0V、所有奇数通道的输入均为0.234V。

    当我以为我在查看通道1-4时、事实证明我使用的是全部为0V 的所有偶数通道。

    现在我有了正确的通道寻址方案、我将读回正确的值。

    我将继续、认为此问题已解决。

    Dan

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

    Dan、

    谢谢您告诉我。  对不起,我也没有看到"ooo"。  我想大家以前都这么做过。

    最美好的祝福艺术