工具与软件:
您好!
我下面是数据表中的伪代码示例(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 框架
如果有任何帮助、将不胜感激
谢谢