Arduino 带有CR95HF微控制器的RFid点击板拒绝响应
我有一个Arduino和一个来自Mikro Electronika的RFid点击板。点击板有一个微控制器CR95HF微控制器。根据发送ECHO命令的时间,我应该轮询并读取返回值0x55。如果我使用命令IDN(0x01)并发送一个datalength为零的数据,我应该获得控制器的ID 根据串行监视器,它只返回零(变量是否有问题?)。 根据逻辑分析仪,它返回的内容与发送的内容完全相同 (当我发送3时,它返回3,当我发送55时,它返回55)。 看起来微控制器对我发送的任何东西都没有反应,或者只是坏了 所以现在看起来它可以通过spi.transfer()函数发送一些东西,但是检索似乎有问题 这是我的密码:Arduino 带有CR95HF微控制器的RFid点击板拒绝响应,arduino,microcontroller,spi,Arduino,Microcontroller,Spi,我有一个Arduino和一个来自Mikro Electronika的RFid点击板。点击板有一个微控制器CR95HF微控制器。根据发送ECHO命令的时间,我应该轮询并读取返回值0x55。如果我使用命令IDN(0x01)并发送一个datalength为零的数据,我应该获得控制器的ID 根据串行监视器,它只返回零(变量是否有问题?)。 根据逻辑分析仪,它返回的内容与发送的内容完全相同 (当我发送3时,它返回3,当我发送55时,它返回55)。 看起来微控制器对我发送的任何东西都没有反应,或者只是坏了
#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点击板中产生短路。