RFduino - 故障传输

时间:2016-08-06 08:31:12

标签: rfduino

我有一个项目,我将数据发送到Android手机。我通过串口获取数据到rfduino,然后将这些数据发送到手机。 首先,我有20个字节的数据块。我使用“Serial Event”设置一个标志,然后在主循环中读取和发送数据。根据rfduino工作人员的建议,串行波特率为9600。

现在我有40个字节的数据。 Rfduino读取40个字节的串行数据并分两部分发送(参见代码)。每个部分的第一个字节是用于在不同分组之间进行干扰的标识符。 在一些成功的传输之后,数据变得腐败。通常,一旦传输开始出现故障,我必须重新启动连接以获取正确的数据。

这是代码的基本概念:

void loop() {
  if (mData)
     {
      mData = false;
      Serial.readBytes(data, 40);
      while(!RFduinoBLE.send(&data[0], 20));
      while(!RFduinoBLE.send(&data[20], 20));    
      }
}

void serialEvent(void) {
  mData = true;
}

我用逻辑分析仪检查了串行数据,没有任何问题。我还用wireshark检查了变速箱。两个20字节块都在相同的连接间隔内发送。一段时间后,RFduino发送的数据就会损坏。

当我省略第二个数据包并且只发送20个字节时,问题就不会发生。

我认为,无线电干扰了串口的读取。我尝试在while(RFduinoBLE.radioActive);之前使用Serial.read,但我认为数据在此之前已缓冲。所以这并没有改变任何事情。

此外,我试图将发送功率降至最低,没有任何改进。

我也尝试了不同的连接间隔。我每128ms有一个新数据。这限制了最大值。连接间隔。所有的改变都没有任何帮助。

我已经读过BLE无线电优先级需要大约5-6ms并且有一个6字节的数据缓冲区。使用9600波特率,此缓冲区溢出。

我还没有找到这些语句的来源,但是将波特率降低到4800似乎改善了错误数据的问题。 这仍然不是令人满意的数据速率,并且仍然会发生传输故障。不是那么经常,但仍然。

我已经没有想法如何解决这个问题,并希望任何想法! 我的意思是每128ms发送40个字节一定是可能的......那不是那么多。

我已经在RFduino论坛上发布了这个问题 - 直到现在才回答 - 我想知道是否有人遇到与RFduino类似的问题。

RFduino Forum

0 个答案:

没有答案