我在 ESP8266 (Wemos D1 mini R2) 和
NFC 卡 (BM019) 之间使用 SPI
通信时遇到了一个奇怪的问题。
(我在 Windows 10 上使用 Arduino IDE)安装了 es8266 版本 2.5.2
SPI 初始化正常(并且 NFC 协议的 BM019 设置正常)
Master(ESP8266)发送的所有数据都被 slave 正确接收
但是当我从从机询问数据,第一位丢失,所有接收到的数据都左移一位(???)
SPI init:
代码:
全选
const int SSPin = 15; // Slave Select pin
const int IRQPin = 16; // Sends wake-up pulse for BM019
const int MOSIPin = 13;
const int SCKPin = 14;
void setup() {
...
SPI.setDataMode(SPI_MODE0);
SPI.setBitOrder(MSBFIRST);
SPI.setClockDivider(SPI_CLOCK_DIV128);
SPI.begin();
…
digitalWrite(SSPin, LOW);
SPI.transfer(0x00); // SPI control byte to send command to CR95HF
SPI.transfer(0x02); // Set protocol command
SPI.transfer(0x02); // length of data to follow
SPI.transfer(0x01); // code for ISO/IEC 15693
SPI.transfer(0x0D); // Wait for SOF, 10% modula
tion, append CRC
digitalWrite(SSPin, HIGH);
}
稍后在代码中(例如 Inventory 命令或从 NFC 标签读取数据,所有数据都向左移动一位,最高有效位丢失......(我已经用逻辑分析仪验证了 Slave 发送的数据是好的) :
代码:
全选...
digitalWrite(SSPin, LOW);
SPI.transfer(0x02); // SPI control byte for read
RXBuffer[0] = SPI.transfer(0); // response code sent (Logic Analizer) 0x80 but RXBuffer[0]=0
RXBuffer[1] = SPI.transfer(0); // length of data sent (Logic Analizer) 0x0D but RXBuffer[1]=0x1A
digitalWrite(SSPin, HIGH);
我尝试使用 ESP32 (MH-et-LIVE) 但我遇到了同样的问题...
有人可以帮我解决这个问题吗?