为什么SPI.transfer()会在第二次调用时冻结?

时间:2015-11-21 22:02:17

标签: c arduino spi xbee

我正在尝试学习如何让Arduino通过SPI与XBee PRO S3B模块通信。作为一个问候世界,我想我会尝试阅读有关XBee模块配置的一些信息(特别是它的DL设置)。读取此信息需要首先通过SPI发送一个8字节长度的命令。

我使用Arduino SPI库的SPI.transfer()函数一次发送一个字节的命令。看起来我能够发送第一个字节就好了 - 问题是代码似乎在第二次调用SPI.transfer()时冻结。

在我的代码中,我将命令的数据存储在名为AT_getDL_CMD的字节数组中,其长度(8)存储在AT_getDL_LEN中。以下是代码的相关部分:

  // start the SPI library:
  SPI.beginTransaction(SPISettings(3000000, MSBFIRST, SPI_MODE0));

  // initalize the pins:
  pinMode(SPI_ATTN, INPUT);
  pinMode(SPI_SSEL, OUTPUT);
  digitalWrite(SPI_SSEL, LOW);

  // wait a little bit for the radio to be ready:
  delay(1000);

  Serial.println("Sending getDL API command");
  for (int i = 0; i < AT_getDL_LEN; i++) {
    Serial.print(SPI.transfer(AT_getDL_CMD[i]));
    Serial.print(", ");
  }

我得到的输出是:

  

发送getDL API命令

     

0,

所以看起来循环运行一次迭代但在第二次迭代时调用SPI.transfer()时冻结。

可能导致这种情况的原因是什么?它是否更有可能成为Arduino端或XBee端的问题?我是否正确使用SPI库?

0 个答案:

没有答案