当发送多个具有WRITE_TYPE_NO_响应的数据包时,Android BLE连接中断
我对一个需要使用蓝牙LE将固件文件从Android设备发送到STM32F4芯片的项目非常着迷 我已经在两端成功地实现了BLE,并且我正在使用它,并且在很长一段时间内没有任何问题 现在应该实现文件传输,该传输应能够发送大小约为250K的文件。我的实现似乎有效,但仅在10种情况中的一种情况下有效。它确实开始发送20字节的数据包,但是 在90%的测试用例中,在未确定的点上停止通信。我需要断开/重置并重新启动才能重新启动 STM32F4上文件转换器的特性定义为:当发送多个具有WRITE_TYPE_NO_响应的数据包时,Android BLE连接中断,android,bluetooth-lowenergy,file-transfer,stm32f4,Android,Bluetooth Lowenergy,File Transfer,Stm32f4,我对一个需要使用蓝牙LE将固件文件从Android设备发送到STM32F4芯片的项目非常着迷 我已经在两端成功地实现了BLE,并且我正在使用它,并且在很长一段时间内没有任何问题 现在应该实现文件传输,该传输应能够发送大小约为250K的文件。我的实现似乎有效,但仅在10种情况中的一种情况下有效。它确实开始发送20字节的数据包,但是 在90%的测试用例中,在未确定的点上停止通信。我需要断开/重置并重新启动才能重新启动 STM32F4上文件转换器的特性定义为: ret = aci_gatt_add_
ret = aci_gatt_add_char(fileServiceHandle,
UUID_TYPE_128, // File xfer UUID
uuid, // Char UUID
FILEIO_RECORD_LEN, // Maximum length of the characteristic value (20)
CHAR_PROP_WRITE|CHAR_PROP_WRITE_WITHOUT_RESP|CHAR_PROP_NOTIFY, // WRITE NOTIFY me
ATTR_PERMISSION_NONE, // Nothing special
GATT_NOTIFY_ATTRIBUTE_WRITE, // The application will be notified when a client writes to this attribute.
// An @ref EVT_BLUE_GATT_ATTRIBUTE_MODIFIED will be issued.
16, // Encryption key size
0, // is fixed length (1== variable size)
&fileRequestHandle); // ReturnValue als handle
在Andoid中,我将服务特性中的WRITE_TYPE_NO_响应标志设置为
public void onServicesDiscovered(BluetoothGatt gatt, int status) {
... aServiceCharacteristic.setWriteType(BluetoothGattCharacteristic.WRITE_TYPE_NO_RESPONSE);
对于最多8个数据包的FIFO,在onCharacteristicWrite回调函数中写入数据包
- 构建多达8个文件数据片段,并将其排入fifo队列
wrtCharacteristic.setValue(firstQueueItem)代码>
- 在onCharacteristicWrite回调中:
}如果队列不是empy{wrtCharacteristic.setValue(nextqueitem);
- 如果STM32F4中接收到最后一个数据包,则验证该组中的所有数据包,并发送回应答,从而在应用程序中引发事件。 然后,该事件触发发送接下来的8个数据包
这里有我遗漏的东西吗?我在哪里可以检查错误。非常感谢您的帮助。由于未知原因,此问题不再出现。与我在上面所说的相比,我的实现并没有改变。我试图为每组的最后一个数据包请求一个BLE响应,但这似乎没有任何区别
我感谢所有阅读和评论此条目的人。由于未知原因,此问题不再出现。与我在上面所说的相比,我的实现并没有改变。我试图为每组的最后一个数据包请求一个BLE响应,但这似乎没有任何区别
我感谢所有阅读和评论此条目的人。您在哪里调用
writeCharacteristic
?writeCharacteristic始终跟随设置值,并且仅在以前的任何写入操作完成时才会调用。我还尝试了setWriteType(BluetoothGattCharacteristic.WRITE\u TYPE\u DEFAULT)代码>但也没有成功。你应该检查Android中的蓝牙hci日志或嗅探器跟踪,看看到底发生了什么。我添加了很多跟踪,从中我怀疑STM32设备是问题的根源。看起来它在与SPI接口通信时遇到了问题。如果我能解决这个问题,我会更新它。感谢您的回复。您在哪里调用writeCharacteristic
?writeCharacteristic始终跟随设置值,并且仅在以前的任何写入操作已完成时才会调用。我还尝试了setWriteType(BluetoothGattCharacteristic.WRITE\u TYPE\u DEFAULT)代码>但也没有成功。你应该检查Android中的蓝牙hci日志或嗅探器跟踪,看看到底发生了什么。我添加了很多跟踪,从中我怀疑STM32设备是问题的根源。看起来它在与SPI接口通信时遇到了问题。如果我能解决这个问题,我会更新它。谢谢你的回复。