Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino 带有CR95HF微控制器的RFid点击板拒绝响应_Arduino_Microcontroller_Spi - Fatal编程技术网

Arduino 带有CR95HF微控制器的RFid点击板拒绝响应

Arduino 带有CR95HF微控制器的RFid点击板拒绝响应,arduino,microcontroller,spi,Arduino,Microcontroller,Spi,我有一个Arduino和一个来自Mikro Electronika的RFid点击板。点击板有一个微控制器CR95HF微控制器。根据发送ECHO命令的时间,我应该轮询并读取返回值0x55。如果我使用命令IDN(0x01)并发送一个datalength为零的数据,我应该获得控制器的ID 根据串行监视器,它只返回零(变量是否有问题?)。 根据逻辑分析仪,它返回的内容与发送的内容完全相同 (当我发送3时,它返回3,当我发送55时,它返回55)。 看起来微控制器对我发送的任何东西都没有反应,或者只是坏了

我有一个Arduino和一个来自Mikro Electronika的RFid点击板。点击板有一个微控制器CR95HF微控制器。根据发送ECHO命令的时间,我应该轮询并读取返回值0x55。如果我使用命令IDN(0x01)并发送一个datalength为零的数据,我应该获得控制器的ID

根据串行监视器,它只返回零(变量是否有问题?)。 根据逻辑分析仪,它返回的内容与发送的内容完全相同 (当我发送3时,它返回3,当我发送55时,它返回55)。 看起来微控制器对我发送的任何东西都没有反应,或者只是坏了

所以现在看起来它可以通过spi.transfer()函数发送一些东西,但是检索似乎有问题

这是我的密码:

#include <SPI.h>

// CR95HF: Write, poll, read, reset
#define   CMD             0x00
#define   POLL            0x03
#define   READ            0x02
#define   RESET           0x01

#define   ECHO            0x55

const int _SSpin = 10; // CS
const int _IRQpin = 6; // INT_out : 2, INT_in : 6, tried both, barely to no difference
//const int _SI0pin = A3;
//const int _SI1pin = A0;

void WakeupCR95HF()
{
 //Serial.println("Wake up!");
 digitalWrite(_IRQpin, LOW);
 delay(100);
 digitalWrite(_IRQpin, HIGH);
 delay(100);
}

bool EchoResponse()
{
    byte len = 0;

  // write to CR95HF
  digitalWrite(_SSpin, LOW);
  delay(100);
  SPI.transfer(0x00);

  // Serial.print("echo code: ");
  // Serial.println(ECHO);

  SPI.transfer(0x55);
  //SPI.transfer(0x00);
  digitalWrite(_SSpin, HIGH);
  //delay(1000);

  // poll to CR95HF, is it ready?
  byte tmp = 0;

  digitalWrite(_SSpin, LOW);
  while (!tmp)
  {
   delay(100);
    //Note: whatever I send, I get the same thing back. I send 3, then tmp is 3. I send 8, tmp is 8.
    SPI.transfer(0x03);
    tmp = SPI.transfer(0);

   // Serial.print("Polling: ");
    Serial.println(tmp, BIN);

    tmp = (tmp & 0x08) >> 3;

    delay(100); 
  }
  digitalWrite(_SSpin, HIGH);
  delay(20);

  // ready to write
  byte res = 0;

  digitalWrite(_SSpin, LOW);
  delay(100);
  SPI.transfer(0x02);
  res = SPI.transfer(0);

 // Serial.print("reading: ");
 // Serial.println(res);

  delay(100);
  digitalWrite(_SSpin, HIGH);
  delay(100);

  if (res == ECHO)
  {
    return true;
  }
 return false;
}

void setup() {
Serial.begin(9600);

// I believe this is not possible on Arduino or not nessaccery, tried it anyway, no change
// pinMode(_SI0pin, OUTPUT);
// pinMode(_SI1pin, OUTPUT);

 pinMode(_SSpin, OUTPUT);
 pinMode(_IRQpin, OUTPUT);

// digitalWrite(_SI0pin, HIGH);
// digitalWrite(_SI1pin, LOW);

  digitalWrite(_IRQpin, HIGH); // wakeup
  delay(20);
  digitalWrite(_SSpin, HIGH);  // slave select, low = ready to write/read
  delay(20);

  SPI.begin();
  // 2 MHz max clock speed, Most Significant Bit first, SPI_MODE unknown (probably 0, all were tried)
  SPI.beginTransaction(SPISettings(2000000, MSBFIRST, SPI_MODE0));

  WakeupCR95HF();

  while(!EchoResponse())
  {
    WakeupCR95HF();
  }
 // Serial.println("Connection established");
}

void loop() {
}
#包括
//CR95HF:写入、轮询、读取、重置
#定义CMD 0x00
#定义轮询0x03
#定义读取0x02
#定义重置0x01
#定义回显0x55
常数int _SSpin=10;//反恐精英
常量int_IRQpin=6;//INT_out:2,INT_in:6,两者都试过,几乎没有区别
//const int_SI0pin=A3;
//常数int_SI1pin=A0;
void WakeupCR95HF()
{
//Serial.println(“醒来!”);
数字写入(_IRQpin,低);
延迟(100);
数字写入(_IRQpin,高);
延迟(100);
}
bool回声响应()
{
字节len=0;
//写入CR95HF
数字写入(_SSpin,低);
延迟(100);
SPI.传输(0x00);
//串行打印(“回显代码:”);
//Serial.println(ECHO);
SPI.传输(0x55);
//SPI.传输(0x00);
数字写入(SSpin,高);
//延迟(1000);
//呼叫CR95HF,准备好了吗?
字节tmp=0;
数字写入(_SSpin,低);
而(!tmp)
{
延迟(100);
//注意:无论我发送什么,我都会得到相同的结果。我发送3,然后tmp是3。我发送8,tmp是8。
SPI.传输(0x03);
tmp=SPI.transfer(0);
//串行打印(“轮询:”);
串行打印LN(tmp、BIN);
tmp=(tmp&0x08)>>3;
延迟(100);
}
数字写入(SSpin,高);
延迟(20);
//准备好写作了吗
字节res=0;
数字写入(_SSpin,低);
延迟(100);
SPI.transfer(0x02);
res=SPI.传输(0);
//连续打印(“阅读:”);
//序列号println(res);
延迟(100);
数字写入(SSpin,高);
延迟(100);
if(res==ECHO)
{
返回true;
}
返回false;
}
无效设置(){
Serial.begin(9600);
//我相信这在Arduino和nessaccery上都是不可能的,不管怎样都试过了,没有改变
//引脚模式(引脚,输出);
//pinMode(_-SI1pin,输出);
pinMode(_SSpin,输出);
pinMode(_IRQpin,输出);
//数字写入(_SI0pin,高);
//数字写入(_-SI1pin,低);
digitalWrite(_IRQpin,高);//唤醒
延迟(20);
digitalWrite(_SSpin,高);//从选择,低=准备写入/读取
延迟(20);
SPI.begin();
//2 MHz最大时钟速度,最高有效位优先,SPI_模式未知(可能为0,已全部尝试)
SPI.beginTransaction(SPISettings(2000000,MSBFIRST,SPI_MODE0));
WakeupCR95HF();
而(!EchoResponse())
{
WakeupCR95HF();
}
//Serial.println(“建立连接”);
}
void循环(){
}

看起来问题出在Arduino UNO Click Shield上。看起来在反RFid点击板中产生短路。看起来问题出在Arduino UNO点击屏蔽上。它看起来在反RFid点击板中产生短路。