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.

[参考译文] ADS7138-Q1:读取寄存器值异常、无法成功写入寄存器

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1495598/ads7138-q1-abnormal-read-register-value-unable-to-successfully-write-register

器件型号:ADS7138-Q1

工具/软件:

我们团队的开发板计划使用 ADS7138QRTERQ1芯片作为 AD 芯片、以识别物理键盘(引脚 KEY_KEY)的 AD 值、并通过 SOC_SDA 和 SOC_S2C1_SCL 将转换后的 AD 值传输到主控制芯片 AM62A74UMHAAMBR。

目前、可以在 I2C 总线上识别 AD 芯片器件

器件树配置如下:

读取 AIN0的脚本内容如下:

当前问题是:

1.使用 i2cget - y 1 0x13命令直接读取任何寄存器、值将为0xff。

2.按下物理按钮时,读取任何寄存器,读取的值与万用表测得的电压值一致,可以理解为 AD 值。

为什么所有寄存器的行为都相同?

3、当我尝试使用写入命令更改其中一个寄存器的值、然后读取寄存器时、发现写入命令未生效、仍然是0xff。

请帮助我分析问题的原因、并根据上述信息提供解决方案。 谢谢你。
如果提供了参考例程、会更好。

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

    尊敬的 Ziming Yi:

    您能给我发送 I2C 线路的逻辑捕捉、而不是发送 i2cset 实用程序命令吗?

    此致、
    Joel

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

    尊敬的 Joel Meraz:

    由于我们需要收集 AIN0的 AD 值、因此我根据芯片数据手册和我自己的理解配置了以下寄存器:
    配置 PIN_CFG 寄存器以确保 AIN0是模拟输入。
    2.配置 SEQUENCE_CFG 寄存器并选择手动模式。
    将 MANUAL_CHSEL 寄存器设置为0x00 (通道0)。
    4.触发转换(可能通过写入特定寄存器或发送 I2C 命令来实现)。
    5.读取 NEW-CH0_SB (正在捕获的当前数据寄存器)和 NEW-CH0-MSB 寄存器以获取12位 AD 值。
    但我不确定配置是否已正确完成、因此我想请求您的帮助以确认配置寄存器的过程是否存在任何问题、从而满足读取 AD 值的要求?

    此致、

    齐明·易

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

    嗨、Ziming、

    您描述的顺序似乎是正确的、但我需要验证实用程序是否按您的预期向设备发送了正确的数据。 逻辑捕获或示波器捕获您的序列就足够了。 我在过去观察到、这些 I2C 命令行实用程序不会按预期发送数据。

    此致、
    Joel

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

    尊敬的 Joel Meraz:

    那么、我可以提供什么帮助来帮助您进一步验证分析吗?

    此致、

    齐明·易

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

    嗨、Ziming、

    是的、探测 ADC 的 SDA 和 SCL 引脚的逻辑捕获将有所帮助。 下面是一个示例、SDA 线位于顶部、SCL 线位于底部。

    或者、您可以提供 SDA 和 SCL 线路的示波器捕获、但这更难读取和解码。 如果您有可用的逻辑分析仪、我更倾向于使用它。

    此致、
    Joel

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

    尊敬的 Joel Meraz:

    这是 read_ain0.sh 的内容

    在调用 read_ain0.sh 时、我使用逻辑分析仪捕获 IIC 波形、如下所示:


    1、未按下物理按钮时、调用 read_ain0.sh 的结果如下


    逻辑分析仪捕获的波形如下:


    这是左侧波形的详细信号


    这是右侧波形的详细信号


    2、按下物理按钮时、调用 read_ain0.sh 的结果如下


    逻辑分析仪捕获的波形如下:


    这是左侧波形的详细信号


    这是右侧波形的详细信号


    如果有任何其他需要补充的信息、请联系我
    感谢你的帮助

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

    进一步检查后、控制器似乎发送了正确的7位地址、但逻辑分析仪错误地解析了该地址。 但是0xAE 命令似乎仍然不正确。 首先、请参阅 ADS7138-Q1"编程"部分(第8.5节)。 在这里、每个命令操作码都是这样的:

    提供了一个7位地址、后跟一个 R/~W 位和一个器件 ACK。 以下8位是不同器件寄存器访问功能的操作码。 有关选项、请参阅下表。

      

    现在、似乎在7位器件地址之后发送读取位、之后立即提供寄存器地址。 但是、需要在提供寄存器地址之前提供操作码。 以下是单个寄存器读取的命令结构。 我认为用操作码替换寄存器地址并替换寄存器地址的寄存器数据可能会有所帮助、但对于正在使用的命令行实用程序、我没有深入了解、这更像是一个问题。

    此致、
    Joel

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

    尊敬的 Joel Meraz:

    我们基于从单个寄存器读取的数据格式编写了代码

    因此、现在、无论是否按下物理按钮、读取的值都为0x00

    这是逻辑分析仪捕获的数据

    此致、

    齐明·易

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

    嗨、Ziming、

    您能重新附加逻辑捕捉器件吗? 这是一个有点低分辨率,我不能完全算出数字。

    此致、
    Joel

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

    尊敬的 Joel Meraz:

     

    这是逻辑分析仪捕获的数据

    这是关键代码内容

    因此、现在、无论是否按下物理按钮、读取的值都为0x00

    此致、

    齐明·易

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

    嗨、Ziming、

    此序列看起来正确。  最近使用的_CH7_LSB 寄存器未更新的原因是、必须首先启用 GENERAL_CFG 寄存器中的 STATS_EN 位才能使统计寄存器存储最新值。

    此致。
    Joel

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

    尊敬的 Joel Meraz:

    总结当前情况:

    目前、读取 I2C 寄存器的操作已验证能够成功读取单个寄存器的值。 我根据芯片手册使用0x00以外的默认值读取了许多寄存器、结果都是正确的。

    此外、写入 I2C 寄存器和验证操作也可以成功更改单个寄存器的值。 与将值0x02写入0x01寄存器一样、写入之前和之后的验证代码是有效且成功的。

    以0x01寄存器为例、逻辑分析仪为读取/写入寄存器捕获的数据目前符合芯片规范中指定的格式。

    读取0x01寄存器

    将0x20写入0x01寄存器

    再次读取0x01寄存器

    但是、当按下 Physical (物理)按钮时、读数0xA0仍将为0x00。

    我还读取一次与 CH0相关的所有寄存器。 按下物理按钮时读取的结果与 AD 值不同。

    所以我想问问:
    1.是否需要配置任何寄存器才能使 AD 芯片处理和转换模拟信号输入?
    2.正在读取哪个寄存器来读取 AIN0输入的 AD 值? 是最近的_C0_LSB 和最近的_C1_LSB 还是其他寄存器?

    此致、

    齐明·易

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

    嗨、Ziming、

    可通过两种方式读取 ADC 转换数据:

    1.启动对设备的读取(图8-13)

    2.从 Recentation_CHx_LSB 和 Recentation_CHx_MSB 寄存器读取。 这需要首先将 STATS_EN 位设置为1以启用更新寄存器。  如果只使用寄存器访问进行转换、还需要将 CNVST 位设置为1。 单个寄存器读取说明如下。

    因此目前似乎仍未设置 GENERAL_CFG 寄存器中的 CNVST 位。 从寄存器读回时、器件尚未启动任何转换、因此没有转换结果。

    此致、
    Joel

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

    尊敬的 Joel Meraz:

    今天,我尝试了两种方法来读取 AD 值基于答复
    方法1:开始读取设备(图8-12)

    根据该过程、配置是已知的、但由于许多寄存器都具有符合配置要求的默认值、因此只需首先读取并确认相关寄存器是否具有默认值。 如果它是默认值、则它满足配置要求、并且只需要配置 CAL=1。 然后发送 S+H 7位器件地址+读取标志+ A

    验证过程

    主机为总线上的转换起始帧读取提供以下值:

    将 LED 指示灯从左到右分配到6个编号为1-6的物理按钮

    我关于这种验证方法的问题是:
    1.我是否可以询问上述验证流程是否符合手动模式下的设备操作
    2.如果是、i2cCSF 读取的值是否代表 AD 值? 为什么它与测量的电压没有很好地对应?


    方法2:从 RENATE-CH0_SB 和 RENATE-CH0.MSB 寄存器中读取。
    需要将 STAT3和 CNVST 位设置为1

    然后、我在0x01寄存器中看到说明、认为 CAL 可能需要设置为1。 因此、我单独验证 STAT3=1 CNVST=1、CAL=0、、STAT3=1、CNVST=1、CAL=1的结果。

    上午读取的值如下:
    遗憾的是、我没有截取逻辑分析仪捕获的数据的屏幕截图
    使用 LED 指示灯从左到右对键盘1-6进行编号

    然而,在下午我准备答复时,我读了以下的价值观:
    使用 LED 指示灯从左到右对键盘1-6进行编号

    现在我不知道问题出在哪里。
    1.不确定早上读取的值是否正确 AD 值?
    2.为什么我可以在上午读取值,但下午晚些时候我只能读取1C 0E

    此致、

    齐明·易

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

    嗨、Ziming、

    控制器似乎正在向您提供的逻辑捕捉帧中的器件发送 NAK。 它只需要来自器件的一个8位数据帧、NAK 通知器件停止输出转换数据。 因此、您未在完整转换中读取数据。 在发送 NAK 之前、您需要将控制器配置为读入超过1个字节、但我不知道如何使用您的特定命令行工具来完成此操作。

    1.由于上述情况下控制器发送过早 NAK、我会说此序列不符合要求、您需要更改上述控制器配置以一次读取至少2个字节的数据、因为在2个字节中对1次 ADC 转换进行编码。  

    2.目前,没有 完整的12位转换会跨越2个字节进行编码。  第一个字节包含 ADC 数据的前8位(D[11:4])、下一个字节包含 D[3:0]、默认情况下末尾后跟4个零。

    我相信我们正在越来越接近所需的结果、并且逻辑捕获对于调试此问题非常有帮助。 请继续发送逻辑捕获、我可以提供进一步帮助。

    此致、
    Joel

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

    尊敬的 Joel Meraz:

    好消息!!


    根据手动模式流程配置寄存器后、我直接将01寄存器设置为0x2A、
    我修改了启动帧的代码并以以下格式发送:


    起始信号+ 7位器件地址(0x13)+ 1位读取标志位(1)+ ACK+2字节 ADC 数据


    读取的值如下所示:


    读取的值似乎是 AD 值。

    如前所述、在方法2中、我还成功读取了与 AD 值匹配的 RELATENT_C0_SB/MSB 的值

    因此、从 AIN0通道对 AD 值的当前读取已成功完成。 非常感谢您的指导和帮助。

    但随后我遇到了一个新问题、我将在下一篇文章中详细说明情况

    此致、

    齐明·易

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

    尊敬的 Joel Meraz:

    如硬件原理图中所示

    光电阻器的 AD 值通过 AIN2通道输入。

    因此、我尝试读取 RELATENT_C_2LSB 和 RELATENT_C_2MSB 的值以检查它们是否与测量的电压值匹配。


    但是、读取寄存器结果为00

    那么、我想问是否需要进行任何其他配置?

    此致、

    齐明·易

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

    嗨、Ziming、

    首先、我很高兴您的第一个问题已得到解决!  

    我认为这是因为仍然选择了通道0。 要更改为通道2、必须配置 MANUAL_CH_SEL 寄存器(地址0x11)中的 MANUAL_CHID 字段。 选择通道后、您可以通过 CNVVST 位开始转换、并在转换完成时从 REVENT_CH2寄存器中读取数据。

    如果这对我有帮助、或者我可以提供更多详细信息、请告诉我。  图8-12描述了通用过程、但您需要使用 CNVST 位手动启动转换并从 RUNNING_CHx 寄存器读取转换结果。

    此致、
    Joel

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

    尊敬的 Joel Meraz:

    这似乎是成功的兄弟。 非常感谢您在此期间提供的指导和帮助。 我要再次表示感谢。

    如果在后续开发过程中遇到任何相关问题、我希望有机会在此帖子下继续与您讨论。

    此致、

    齐明·易

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

    没问题! 很高兴能提供帮助。 如有其他问题、请随时联系我们。

    此致、
    Joel