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.

[参考译文] ADS131M08:WREG 命令

Guru**** 2393725 points
Other Parts Discussed in Thread: ADS131M08

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1459351/ads131m08-wreg-command

器件型号:ADS131M08

工具与软件:

大家好、团队成员:

在尝试写入 ADS131M08 ADC 的时钟寄存器时遇到一些困难。 我的目标是改变 XTAL_DIS 位(我使用外部晶体)。

下图显示了我要发送到 ADC 的帧:0x618000(WREG)、后跟寄存器数据(0x24E)、0x00以满足字大小要求。 但是、回读寄存器时、其值保持默认值。

您能帮我解决这个问题吗?

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

    大家好、Lucas:

    您是否可以上传类似以下时序的时序、包括/CS、SCLK、SDI 和 SDO? 如果可能、也最好包含/DRDY 信号。 该时序用于将0x0E0E 寄存器数据写入 GAIN 寄存器(04h 地址)。  

    为了清除、您是否计划将  CLOCK 寄存器中的 XTAL_DIS 位设置为"1"? 该位的默认值为"0"。 时钟寄存器定义为晶体振荡器使能、低电平有效。 因此、0 =振荡器被启用、1 =振荡器被禁用。

    BR、

    戴尔

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

    尊敬的 Dale:

    感谢您的答复!

    遗憾的是、我的示波器只有2个通道、只能测量 SDI、SDO 和 SCK。

    我之所以设置 XTAL_DIS 位、是因为我使用外部晶体。 数据表有点令人困惑、因为该位的说明为"禁用晶体振荡器"、默认情况下设置为"0"(启用)。

    我所面临的问题是、我没有从通道获得任何测量结果。 我希望这与振荡器有关、因为振荡器的工作默认使用 MCU 提供的时钟信号。

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

    大家好、Lucas:

    如果使用 MCU 提供的外部时钟信号、则不使用外部晶体、因此  CLOCK 寄存器中的 XTAL_DIS 位应设置为"1"以禁用晶体振荡器。

    您 使用的是哪个通道、且未获得 任何测量结果? 将 0x24E 写入此 ADC 上的时钟寄存器时、您仅启用通道1、但禁用所有通道的其余部分。

    BR、

    戴尔

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

    尊敬的 Dale:

    我尝试使用时钟寄存器的默认值进行测量、但我仅收到第一个字(状态)。 所有通道都返回零。 我在 SCK 线上发出了总共9个字(每个24位)、但我只获取了状态。

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

    大家好、Lucas:

    您能先回答我的问题吗?

    戴尔

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

    尊敬的 Dale:

    我使用的是晶体振荡器。

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

    大家好、Lucas:

    我的问题是、您 使用的是哪个通道、而您没有获得 任何测量结果? 当您将 0x24E 写入此 ADC 的时钟寄存器时、您仅启用通道1但禁用所有通道的其余部分、那么您要测量和检查 通道1或其他通道吗?

    BR、

    戴尔

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

    尊敬的 Dale:

    首先、我尝试读取默认激活的通道、根据时钟寄存器的复位值、应该启用所有通道。 DRDY 变为低电平后、我将 CS 引脚拉至低电平、然后在 SDK 线路上发出9字(24位)命令。 但是、它无法正常工作-所有通道都从 ADC 返回零、并且我仅收到状态。

    鉴于这种行为、我分析了数据表、并注意到时钟寄存器 XTAL 位说明中有一句关于"晶体振荡器禁用"的歧义句子。 因此、我开始尝试更改 XTAL 和通道使能位以查看它是否会起作用。

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

    大家好、Lucas:

    感谢您提供的信息。

    您是否有可用于检查的外部时钟(振荡器或来自 CPU 的时钟)? 我没有晶体、因此无法为您进行检查。 我的理解是、您的寄存器读数(包括其他寄存器)是正确的、如果我的理解不正确、请告诉我。 您的 SCLK 频率和晶振频率是多少? 您是否尝试过对其他寄存器进行编程并回读以进行检查? 您的时序和原理图将非常有助于识别问题、您可以对 /CS、SCLK、SDI 和 SDO 信号使用不同的捕获。 您可以使用这些配置在不写入任何寄存器的情况下收集数据。  

    BR、

    戴尔

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

    尊敬的 Dale:

    我有一个7.68 MHz 晶体、我们无法使用 MCU 馈送时钟、只能使用晶体。 我的 SCLK 频率是2.5Mb/s

    更新:

    我最终成功地正确写入了寄存器。 此问题似乎与我的代码有关。 更改 XTAL 位的状态后、DRDY 引脚停止振荡。 当使用外部晶体时、寄存器的默认值似乎正确。 但是、我仍然无法执行通道读数。

    在下图中、我在不更改任何寄存器值的情况下为 ADC 加电、并 在 DRDY (CH4、蓝色走线)变为低电平之前在 SCLK (CH2、浅蓝色走线)上发出3个字(9字节)。 如您在 MISO 信号(CH1、黄色迹线)上所见、我只接收第一个状态字、而以下数据全部为 NULL。 这些值应为 NULL 以外的任何值。

    您能帮我解决这个问题吗?

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

    大家好、Lucas:

    /DRDY 是指示数据转换是否完成的信号。 低电平/DRDY 表示数据已就绪、您可以读取。 根据时序、您是在/DRDY 为高电平期间发送 SCLK、这是不正确的。 来自 ADC 的/DRDY 信号可用作 微控制器的中断、/DRDY 的下降沿可以触发中断、然后您可以在中断子例程中将 SCLK 发送到 ADC。

    此外、应向 ADC 发送更多 SCLK 以读取所有通道数据。 预计10个字(30字节)会移出状态字+所有通道数据+CRC。

    根据晶体频率和默认 OSR=1024、实际数据速率为~3.76ksps。 这表示您需要在265us 期间读取所有数据。 您的2.5MHz SCLK 频率 太低、无法读取数据。 您需要提高 SCLK 频率。  当 DVDD 为3.3V 时、最大 SCLK 频率为25MHz。

    在向 ADC 发送 SCLK 时是否要切换/CS?

    BR、

    戴尔

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

    尊敬的 Dale:
    我将实施您建议的更改。 您能否更详细地解释为什么我需要在3.76ksps 内增加2.5Mbit/s 的 SCLK 频率?

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

    大家好、Lucas:

    要在一个帧中读取10个字、需要10*24*(1/2.5M)=96us。 265us 是包括高电平/DRDY 时间的总采样周期。 根据您的时序、您可以看到 LOW /DRDY 很短。 您可以通过示波器检查/DRDY 的实际低电平时间。 当/DRDY 为低电平时、您必须将所有 SCLK 发送到 ADC。

    BR、

    戴尔

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

    尊敬的 Dale:

    是否有办法增加 DRDY 的低电平持续时间? 如我之前发送的示波器屏幕截图所示、对于1024的 OSR、这个持续时间小于5 µs。 我有一个 MCU 在80 MHz 下运行、通过中断来处理信号、但在 DRDY 再次变为高电平之前仍无法发出 SCLK

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

    尊敬的 Dale:
    您能解释一下执行 测量的正确命令顺序吗?  

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

    尊敬的 Dale:

    我按照下面的顺序进行操作。 您能帮助我确定错误在哪里吗?

    uint8_t reset[30]={0};

    RESET[0]= 0x00;
    RESET[1]= 0x06;
    RESET[2]= 0x00;

    HAL_DELAY (10);// 10ms 延迟

    HAL_GPIO_WritePin (SPI3_CS_GPIO_Port、SPI3_CS_Pin、RESET);

    HAL_SPI_TRANSMIT (&hspi3、reset、30,100);

    HAL_GPIO_WritePin (SPI3_CS_GPIO_Port、SPI3_CS_Pin、SET);

    uint8_t dummy[30]={0};

    drdy_flag = 0;

    while (1)

      if (drdy_flag == 1)
      

        HAL_GPIO_WritePin (SPI3_CS_GPIO_Port、SPI3_CS_Pin、RESET);
        HAL_SPI_RECEIVE (&hspi3、dummy、30、10);
        HAL_GPIO_WritePin (SPI3_CS_GPIO_Port、SPI3_CS_Pin、SET);

        for (uint8_t i = 0;i<sizeof (conversion);i++)
        
          conversion[i]= dummy[i];
          Dummy [i]= 0;
        }

        for (uint8_t i = 0;i<9;i++)
        
          Channel[i]=(conversion[3*I]<< 16)|(conversion[3*I+1]<< 8)| conversion[3*I+2];
        }

        drdy_flag = 0;
      }

    }

    我从 ADC 获得的响应始终如下:

    第一个字:0xFF2800

    2ST 字:null

    3ST 字:null

    4ST 字: null

    第5个 字: null

    6st 字: null

    第7个 字: null

    8ST 字: null

    第9 个字: null

    10ST 字:0x95E400

    SPI 以2.5Mb/s 的速率运行(我还尝试了20Mb/s 的速率、但是响应是一样的)。 我仍然无法测量 CS 引脚、需要解决这个问题。 所有寄存器处于各自的复位值。

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

    大家好、Lucas:

    是否有办法增加 DRDY 的低电平持续时间? 如我之前发送的示波器屏幕截图所示、对于1024的 OSR、这个持续时间小于5 µs。 我有一个在80 MHz 下运行的 MCU、通过中断处理信号、  

    DL:您的数据速率为3.75ksps、对于 ADS131M08的/DRDY、周期约为266us。 我不知道您的/DRDY 低电平时间为何如此短 且小于5us。 您能否仔细检查/DRDY 的时间间隔(下降至下降沿或上升至上升沿)是否为~266us? 这是从 ADC 到 MCU 的专用信号/布线吗?

     "但在 DRDY 再次变为高电平之前、仍然无法发出 SCLK "

    DL:这不是 ADC 引起的问题、我不是 MCU 专家、但 MCU 应该能够在外部中断信号的下降沿触发 SCLK 后发送 SCLK、我以前从未见过这样的问题。 您必须根据 MCU 软件或配置解决此问题、可以联系 MCU 制造商以获取支持。

    您能解释一下执行 测量的正确命令顺序吗?  

    DL:没有读取数据的命令序列。 你唯一需要做的就是,重现我在上一篇文章中向你展示的时间。 您可以在以下链接中找到示例代码、还可以在 ADS131M08数据表的第9.16节中看到示例代码。

      ADS131M08-ADS131M08 —C-EXAMPLE-CODE  示例 C 代码

    关于您的软件代码、我不知道您正在使用哪个 MCU、并且我也不是 MCU 专家、但您好像是通过使用"while"循环检查 DRDY 标志来发送 MOSI 数据。 我通常使用一个中断子例程、这是在 MCU 中进入中断的一种有效且快速的方法、这可能是您无法在/DRDY 变为高电平之前发送 MOSI 数据的原因、因为您的"while"循环需要很长时间才能进行检查。  我想您需要联系 您的 MCU  制造商以获取支持。

    如果您可以共享您的原理图、我可以为您进行检查。

    BR、

    戴尔

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

    尊敬的 Dale:

    是的、DRDY 周期大约为266 µs、低电平时间小于5 µs。

    我拍摄了一些示波器照片、以展示发生的情况。 遗憾的是、坏消息是、我没有给我认为是的寄存器进行写入。

    下面的图片捕获了复位、写入、读取操作和转换读数:

    MISO:黄色迹线
    MOSI:紫色迹线
    SCLK:浅蓝色迹线
    CS:蓝色迹线

    首先、出于上电目的、执行50ms 延迟。 以下是发送用于复位 ADC 的10字(24位)命令(0x11):

    在 RESET 命令之后、针对 t_REGACQ 要求执行1ms 延迟。 在此延迟之后、执行写入命令。 如图所示、我将仅使用值0xFF5A 写入一个寄存器(时钟):

    在写入操作之后、会延迟50ms。 然后在同一寄存器(时钟)上执行读取操作。 示波器捕获如下所示:

    如上所示、时钟寄存器的值不是0xFF5A、而是其默认值0xFF0E。 读取操作后、我开始在 SCLK 线上发出10个字、我接收的 ADC 测量值如下所示:

    在示波器捕获中、紫色迹线(CH3)表示 DRDY 信号、蓝色迹线(CH4)表示 CS 信号。 如第一个映像所示、我收到的第一个字是0xFF2800、后跟8个 NULL 字、最后一个字是0x95E400。 我不确定这些值(0xFF2800和0x95E400)代表的是什么。

    执行写操作和读取转换时、我有什么操作错误? 读取操作似乎工作正常

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

    您好!

    响应0xFF28包含在器件复位后下一帧的第一个字中、这是正确的响应。

    我不知道您是否注意到了您的 SCLK 行为。 为什么我在下面强调了您的 SCLK 在振幅上表现出奇怪的行为? 它的振幅不一致。

      

    顺便说一下、我无法从示波器捕获中查看详细信息、请参阅 ADS131M08数据表的第8.5.1节。 该器件仅支持 SPI 模式1 (CPOL = 0、CPHA = 1)。 主机控制器和 ADS131M08都必须在 SCLK 上升沿启动数据、并在 SCLK 下降沿锁存数据。 在此模式下、SCLK 将空闲为低电平。  

    BR、

    戴尔

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

    尊敬的 Dale:
    与 SCK 信号振幅相关的行为完全是由于示波器可视化。 我可以向您保证、所有信号的振幅都与具有更大缩放的图像相匹配。
    SPI 配置为以下设置:CPOL = 0、CPHA = 1、8位数据大小、MSB 在前、波特率为2.5Mb/s (也尝试20Mb/s)、禁用 CRC。

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

    此设置中是否有任何步骤我可能操作错误、或者是与 SPI 帧相关的问题?

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

    大家好、Lucas:

    如果您可以保证您的数字信号并按照我之前向您展示的方式以及下面的时序示例将信号发送到 ADS131M08、则无法从 ADC 获得正确的响应和数据。 您可以检查并比较计时和计时。

    WREG 用于将0x0E0E 寄存器数据写入 GAIN 寄存器(04h 地址):

    RREG 读取增益寄存器(04h 地址)_RESPONSE 0x0E0E 寄存器数据将显示在下一帧中:

    NORMAL Operation_6字(每个字的长度为24位)和帧(例如、ADS131M08需要更多 SCLK 和 NULL):

    我希望您的硬件没有任何问题、因为我没有看到您的原理图和电路。

    BR、

    戴尔

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

    尊敬的 Dale:

    我使用 WREG 命令将0x0E0E 写入增益寄存器。 但是、当我使用 RREG 命令读回同一寄存器时、我只接收到0x00作为其值。 ADC 仍会为通道测量返回 NULL。

    我还生产了带有额外测量点的新版本 PCB。 请注意、我的下一个结果可能会略有延迟

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

    大家好、Lucas:

    感谢您提供的信息。 我将保持这个话题不变、一旦您的新电路板恢复正常并且获得新的测试结果、请告诉我。

    BR、

    戴尔

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

    尊敬的 Dale:

    我的新电路板终于到达、我在尝试将值写入0x0E0E增益(0x04)寄存器的同时执行了一些测量。

    下图的组织方式如下:
    其中涉及的信号 MISO、MOSI、SCLK、DRDY 和 CS . 但是、由于我的示波器只有四个输入、因此我捕获了两组测量值:

    • 第一组包括 DRDY 示波器的 CH4 (强蓝色迹线)上进行测量。
    • 第二组包括 CS 测量通道4、捕获相同的事件以进行比较。

    SPI 通信行为

    有 DRDY 信号(CH4)

    • RESET 命令:

    下面是与 RESET 命令(在10字通信帧中发送0x11)相关的3个图像:

    • 写入命令:

    • 读取命令:

    如下所示、读取命令返回 NULL

    • 通道测量:

    有 CS 信号(CH4)

    • RESET 命令:

    • 写入命令:

    • 读取命令:

    • 通道测量:

    尽管进行了这些测试、但我仍然无法写入增益寄存器或从通道读取测量值。 您是否在这些帧中看到任何缺失? 我还没有弄清楚。

    谢谢

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

    你(们)好、Dale

    我刚才在 osc 测量中捕获的还有一条信息:

    在上面可以看到、CH4是 DRDY 信号、CH1是 CS 信号。

    在我开始在 SCLK 线路中发出时钟信号之前、DRDY 信号具有较窄的高电平行为。

    上图显示、首先我具有窄的高电平 DRDY 行为;然后我与 DRDY 同步执行复位、写入和读取操作、结果更改为窄的低电平行为;然后通信后、它再次变为窄高电平行为。
    这是否正常? 在我的通道读取期间、DRDY 始终处于窄低电平行为。

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

    大家好、Lucas:

    我强烈建议您这样做

    • 购买并使用一个小型逻辑分析仪(例如 Saleae)、以便可以像我向大家展示的那样获得清晰的计时信息。 现在很难确定您的时间安排。
    • 首先读取一个具有非零默认值的内部寄存器。 在您的测试中、您正在读取具有0000h 默认数据的 Gain1寄存器、您的寄存器写入 Gain1寄存器不起作用、这就是您 从 Gain1寄存器得到0000h 的原因。  您可以在 ADC 上电后读取其他寄存器(MODE 或 CFG 寄存器)、这可以验证您的寄存器读取时序是否正确以及 ADC 是否正常运行。  

    如果您能将其与我分享、您的原理图将会很有帮助。

    /DRDY 的窄脉冲表示丢失了读取数据。 您可以在 首次或在 ADS131M08数据表中的数据收集暂停后查看8.5.1.9.1采集数据部分中的详细信息。

    BR、

    戴尔

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

    尊敬的 Dale:

    我的读取命令可以正常工作-我可以正确读取寄存器。 所有这些都根据数据表返回各自的默认值。

    该问题与写入操作和通道读数有关。

    除了逻辑分析仪外、您是否希望我为时序分析拍摄更精确的示波器快照?

    我将尝试获取一个逻辑分析仪、但所需的时间可能比我掌握的时间长。

    下图显示了 ADS131M08和我的微控制器(STM32L476RG)的原理图

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

    尊敬的 Dale:

    好消息! 我终于发现了正在发生的事情。

    事实证明、我的电路板设计中采用了连接到 MCU GPIO 的 SYNC/RESET 引脚。 该 GPIO 默认使用低逻辑电平进行初始化、从而使 ADS 在整个时间内保持复位状态。

    我只需将此 GPIO 的默认状态更改为高电平、ADC 便会开始发送通道数据。

    感谢您的帮助。

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

    大家好、Lucas:

    感谢您的更新、我很高兴您 找到 它。

    BR、

    戴尔