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:RESET 命令后器件就绪标志(!RDY)为高电平

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1485801/ads124s08-device-ready-flag-rdy-high-after-reset-command

器件型号:ADS124S08

工具与软件:

您好!
我下面是数据表中的伪代码示例(10.1.6页、第90页)


但是、当我发送 RESET 命令、然后读取状态寄存器(使用 RREG 命令)以检查器件就绪标志时、它始终返回为1。

在发送 RESET 命令之前、该值为0 (本应该如此)。 我曾尝试过更大的延迟和/或不同的 SPI 速度、但结果始终是相同的。
我还尝试了其他库、结果是一样的。

我不知道我是不是在误解什么或者我是在做一些错误的事情。

代码如下

库:

// C++
#include "PUADS124S08.h"

void PUADS124S08::deselect()
{
  digitalWrite(cs, HIGH);
  SPI.endTransaction();
  // Wait >~20ns
  asm (
    "nop" "\n"
    "nop" "\n"
    "nop" "\n"
    "nop" "\n"
    "nop" "\n"
    "nop" "\n"
    "nop" "\n"
    "nop" "\n"
    "nop" "\n"
  );
}

void PUADS124S08::select()
{
  SPI.beginTransaction(spisett);
  digitalWrite(cs, LOW);
  // TODO: Wait 4096 * (1 / freq)
  asm (
    "nop" "\n"
    "nop" "\n"
    "nop" "\n"
    "nop" "\n"
    "nop" "\n"
    "nop" "\n"
    "nop" "\n"
    "nop" "\n"
    "nop" "\n"
  );
}

PUADS124S08::PUADS124S08(int cs) : cs(cs)
{
  pinMode(cs, OUTPUT);
  deselect();
}

bool PUADS124S08::reset()
{
  select();
  SPI.transfer(Commands::RESET);
  deselect();

  delayMicroseconds(100);
  if (!isready())
  {
    return false;
  }
  // TODO: FL_POR flag
  return true;
}

bool PUADS124S08::isready()
{
  uint8_t byte = readb(Registers::STATUS);

  #ifdef DEBUG
  Serial.println(millis());
  Serial.print("Status register: ");
  Serial.print("0b");
  Serial.print(byte, BIN);
  Serial.println();
  #endif

  return !(byte & 0b01000000);
}

uint8_t PUADS124S08::readb(uint8_t adrr)
{
  uint8_t com = Commands::RREG | (adrr & 0b00011111);
  uint8_t r;
  select();
  SPI.transfer(com);
  SPI.transfer(0x00);
  r = SPI.transfer(0x00);
  deselect();
  return r;
}

主页:

(代码块不工作)

```CPP
// main.cpp
#include
#include

#define MISO 16.
第19章:我是你的

PUADS124S08 ADC1;

void setup(){
 延迟(3000);
 引脚模式(MISO、输入);
 pinMode (MOSI、输出);

 Serial.begin(115200);
 SPI.begin();
 
 ADC1 = PUADS124S08 (15);
 serial.println(adc1.isready());

 // adc1.reset ();
 while (!ADC1.reset())
 {
   serial.println ("错误");
   delay(1000);
 }
 serial.println ("ADC Init");
 while (1);
}
```μ A

// main.cpp
#include <Arduino.h>
#include <PUADS124S08.h>

#define MISO 16
#define MOSI 19

PUADS124S08 adc1;

void setup() {
  delay(3000);
  pinMode(MISO, INPUT);
  pinMode(MOSI, OUTPUT);

  Serial.begin(115200);
  SPI.begin();
  
  adc1 = PUADS124S08(15);
  Serial.println(adc1.isready());

  // adc1.reset();
  while (!adc1.reset())
  {
    Serial.println("Error");
    delay(1000);
  }
  Serial.println("ADC Init");
  while(1);
}

串行:

740063
Status register: 0b11000000
Error
...
740231
Status register: 0b11000000
Error

逻辑分析仪

复位:

RREG:

然后我发送0x00

再次使用0x00来读取 MISO:

电气原理图:

此外、我正在使用 Raspberry PI pico (rp2040)与 Arduino 框架

如果有任何帮助、将不胜感激

谢谢

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

    尊敬的 Santiago Gonzalez T:

    是否在 RREG 命令前后切换 CS? 如果您无法尝试 将 CS 变为高电平、然后变为低电平、再发送完整命令、然后再次将 CS 拉至高电平?

    您是否还可以尝试将 START 引脚拉为高电平并查看 DRDY 引脚是否以~50Hz 的频率进行切换?  这将帮助我们确定 ADC 是否在工作。 您还可以尝试发送启动命令、前提是器件对命令的解释正确

    -Bryan

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

    是的、CS 已切换。 当不需要任何操作时、该位会变高、然后在任何传输之前等待~20ns (如果我的计算正确)、然后在传输变为高电平并再次等待、我会再次进行检查以防万一。

    我只使用带命令的 ADC、可以尝试使用 START 和 DRDY 引脚、但我宁愿仅使用命令。

    我假设命令得到了正确解释、或者至少 RREG 命令得到了正确解释、因为在启动时读取所有寄存器时、我会从数据表中获取默认值。

    如果我忽略了数据表中的伪代码示例、而只是在加电时将我的配置写入寄存器并发送启动命令、那么显然它会启动转换、我可以使用 RDATA 命令获取数据(我想)。

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

    尊敬的 Santiago Gonzalez T:

    ]如果只使用带有命令的 ADC、我可以尝试使用 START 和 DRDY 引脚、但我宁愿只使用命令。

    这只是我建议的故障排除步骤、旨在确保 ADC 正常工作。 不建议永久更改您的方案、该器件应在使用引脚或命令时良好运行

    [报价 userid="645387" url="~/support/data-converters-group/data-converters/f/data-converters-forum/1485801/ads124s08-device-ready-flag-rdy-high-after-reset-command/5707424 #5707424"]如果我忽略数据表中的伪代码示例、只需在加电时将我的配置写入寄存器并发送启动命令、显然它确实启动了转换、而且我可以使用 RDATA 命令获取数据(我想)。

    您该怎么做而不是遵循伪代码? 我假设您的步骤必须与这些步骤类似、所以您没有执行某些操作会导致 ADC 按预期运行。 我想看看我们是否可以缩小其范围

    -Bryan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    除了遵循伪代码、您该怎么做? 我假设您的步骤必须与这些步骤类似、所以您没有执行某些操作会导致 ADC 按预期运行。 我想看看我们是否可以缩小它的范围[/报价]

    只需将配置写入寄存器(使用内部基准、禁用基准缓冲器、将负输入设置为 AINCOM)并发送启动命令。 基本上跳过了有关发送 RESET 命令和读取状态寄存器的部分。

    您还可以尝试将 START 引脚拉高并查看 DRDY 引脚是否以~50Hz 的频率切换?  [报价]

    我是否应该在发送 restart 命令后尝试此操作? 是否仍需要在发送启动命令而之前不发送复位命令时取回一些数据?

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

    尊敬的 Santiago Gonzalez T:

    如果您已经使系统正常工作、则无需尝试我提出的 START 引脚或 DRDY 建议、这纯粹是为了进行故障排除、看起来您已经使 ADC 正常工作了

    您不必轮询 RDY 位、只需等待9.4.1.1部分中定义的2.2ms。 默认振荡器。

    如果还有其他问题、请告诉我

    -Bryan