乐鑫技术交流
直播中

王利祥

8年用户 1520经验值
私信 关注
[问答]

从从设备发送的SPI数据中Msb丢失是怎么回事?

我在 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% modulation, 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) 但我遇到了同样的问题...
有人可以帮我解决这个问题吗?

更多回帖

发帖
×
20
完善资料,
赚取积分