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.

[参考译文] ADS131M02:ADS131M02:通过 SPI 进行通信时返回错误数据。

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

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1395709/ads131m02-ads131m02-false-data-returned-when-communicate-via-spi

器件型号:ADS131M02

工具/软件:STM32CubeIDE

我有一个关于 ADS131M02.I 的疑问。我将该外部 ADC 与 STM32L496RGT6TR.I 一起使用、还完成了与 ADC 的 SPI 连接。 但是、每当我尝试读取寄存器复位值时、每次我都得到相同的值、我就会陷入困境。 例如、我想读取我发送了 A0命令的器件 ID、响应 I received 2200h。另一个是状态寄存器、我为此发送了 A1命令、我接收到0x500、但对于另一个寄存器、我在我接收到0x500或任何其他值时发送了命令。 请引导我。

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

    嗨、Pavan lashkari、

    我看到了您的私人消息、但请在该主题中保持沟通、以便其他工程师可以在将来从该主题中受益。

    根据我的要求、请提供您用于读取寄存器(而不是您的代码)的 SPI 时序图、最好包含/DRDY 信号。 由于寄存器数据应在 第二帧中由 ADC 移出、而 RREG 命令在第一帧中发送到 ADS131M02器件、因此需要两个连续帧。

    BR、

    戴尔

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

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

    尊敬的 Pavan:

    我仔细检查了您对所面临的寄存器读取问题的描述。 读取 ID 寄存器的命令 A0h 是正确的、但读取状态寄存器(01h 地址)的命令应为 A080h、而不是 A1h。 请注意、RREG 命令中的位12-7是 寄存器地址的正确位、如下方突出显示。 另一个示例是、 您读取 增益寄存器(04h 地址)的命令应该是 A200h、而不是 A400h。  

    此外、如果 ADS131M02 ADC 上配置的字长(length)为24位、则命令应扩展到24位。 应针对不同的帧切换/CS 信号。 下面是从 ADS131M0x ADC 读取 GAIN 寄存器的时序示例、在第一个帧中发送了正确的 RREG 命令、并在第二个帧中在 SDO 上看到了 GAIN 寄存器数据:

    -戴尔

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

    您能告诉我如何使用 RREG 构建读取多个寄存器的命令以及我们如何读取多个寄存器吗?

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

    尊敬的 Pavan:

    如果您查看上面发布的命令定义表、RREG 的命令字为"101a aaaa annn nnnn"、其中"a aaaa a"是要开始读取的寄存器的二进制地址、"nnn nnnnnn"是要读取的连续寄存器的无符号二进制数减1。 当 您读取单个寄存器时、"nnn nnnn"应该是000 0000b。

    例如、若要 读取增益寄存器(其地址为04h = 000 0100b)、您的命令应为: 1010 0010 0000 0000、红色数字表示增益寄存器的地址。 蓝色数字是"nnn nnnnnn"、000 0000表示只会读取一个寄存器。 因此、整个命令为 A200h。 如果字大小为24位、则必须为其余8位填充0、这是 ADS131M02 ADC 上的默认字大小。 最后一个命令字是 A20000h、您可以在上面的时序图中看到 DIN 信号上的该命令字。

    如果您可以从微控制器生成与我的计时相同的计时、则应该能够成功从 ADS131M02读取寄存器。 一旦可以读取单个寄存器、可以修改"nnn nnnn"以使用一个命令字读取更多连续寄存器。

    如果您有任何其他问题、请告诉我。

    BR、

    戴尔

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

    尊敬的 Dale:

    我尝试读取通道0的输入电压。 我尝试使用电位器来调节输入电压、但从未得到正确的值。 那么、为了读取输入电压、我需要执行什么步骤? 并指示我也写入任何寄存器?

    此致、

    Pavan

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

    尊敬的 Pavan:

    我已经向您展示了 从该 ADC 读取寄存器的详细信息(正确的命令和时序)。 你是不是跟着他们尝试了? 您的寄存器写入是否正常工作? 如果没有、请提供您的写作时间以便我检查。  

    读取寄存器与写入寄存器类似、可以查看上面的命令定义表。 让我知道您读取寄存器的命令、并在寄存器不起作用时提供计时。

    我建议您在寄存器写入和读取工作正常后读取通道数据、从而确保 SPI 通信良好。

    -戴尔

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

    尊敬的 Dale:

    我尝试使用您在上一主题中提供的寄存器写入技术、将0x0F0E 写入时钟寄存器。 我收到的结果是0x418000。但我不确定我们为什么不会收到相同的写入和读取寄存器值。 您能告诉我如何读取该写入值吗?

    此致、

    Pavan

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

    尊敬的 Pavan:

    当您将0x0F0E 写入具有03h 地址的时钟寄存器时、我假设您正在向 ADS131M02 ADC 发送以下命令+数据:

     0110 0001 1000 0000 ->    0000 1111 0000 1110 -> 至 ADC

    您应该期待一个来自 ADS131M02: 010A AAAA ammm MMmm 的 响应、即0100 0001 1000 0000、因此您收到的0x418000是来自 ADS131M02 ADC 的正确响应。 ADS131M02数据表的8.5.1.10.8 WREG (011a aaaa annn nnnn)部分中介绍了这些信息。

    为了读取寄存器、您需要发送 RREG 命令来读取它。 在您写入寄存器时、ADC 不会移出寄存器的数据。 我建议您查看 ADS131M02 数据表中的所有详细信息

    -戴尔