我想发送100kB的数据到da14580。但是我发现它非常慢。我如何提高速度?非常感谢你!
嗨dairylcs,
如何提高发送数据的速度没有一个简单的答案,你的问题非常笼统。一个简单的答案是增加设备的连接间隔,但这是非常普遍的,因为每个连接间隔中传输的数据量取决于设备在每个连接间隔中可以发送的数据包量。此外,传输数据的方式与速度有关,例如,如果您在发送下一个指示之前使用指示,则上一个指示必须由主机确认,这将在传输中施加额外的延迟。您可以查看DSPS示例并检查实现。
谢谢你的对话
您从哪种设备发送数据?
iphone or other anriod phone
如果需要流量控制并将接收到的数据转发到UART,可以使用Dialog的dsp。
否则你可以自己完成:
对于Android:您可以使用“无响应写入”在一个连接事件中发送多个数据包。在DA14580端,设置特性属性ATT\u CHAR\u PROP\u WR\u NO\u RESP。在Android端,使用characteristic.setWriteType(BluetoothGattCharacteristic.WRITE\ TYPE\ NO\ RESPONSE)。然后使用characteristic.writeCharacteristic发送前20个字节。当您获得状态为success的onCharacteristicWrite回调时,您可以发送接下来的20个字节。继续这样直到你完成。注意:由于Android中的一个bug,如果连接在传输过程中意外丢失,请确保在重新连接之前关闭gatt对象,否则在重新连接之后可能无法再次写入它。您还应该使用gatt.requestConnectionPriority(BluetoothGatt.connection\u PRIORITY\u HIGH)将连接间隔从默认的50毫秒减少到最小值。如果需要自定义参数,还可以使用DA14580端的连接参数更新请求过程。您还可以使用gatt.requestMtu请求更大的MTU,以便通过将碎片从应用程序移动到L2CAP层来略微提高吞吐量,从而消除一些头开销。
iOS有点困难,因为如果发送数据太快,核心蓝牙会丢弃没有响应命令的传出写入。但是,您可以为大约每10个数据包插入一个带有响应的Write来轻松解决这个问题。
嗨dairylcs,
如何提高发送数据的速度没有一个简单的答案,你的问题非常笼统。一个简单的答案是增加设备的连接间隔,但这是非常普遍的,因为每个连接间隔中传输的数据量取决于设备在每个连接间隔中可以发送的数据包量。此外,传输数据的方式与速度有关,例如,如果您在发送下一个指示之前使用指示,则上一个指示必须由主机确认,这将在传输中施加额外的延迟。您可以查看DSPS示例并检查实现。
谢谢你的对话
您从哪种设备发送数据?
iphone or other anriod phone
如果需要流量控制并将接收到的数据转发到UART,可以使用Dialog的dsp。
否则你可以自己完成:
对于Android:
您可以使用“无响应写入”在一个连接事件中发送多个数据包。
在DA14580端,设置特性属性ATT\u CHAR\u PROP\u WR\u NO\u RESP。
在Android端,使用characteristic.setWriteType(BluetoothGattCharacteristic.WRITE\ TYPE\ NO\ RESPONSE)。
然后使用characteristic.writeCharacteristic发送前20个字节。当您获得状态为success的onCharacteristicWrite回调时,您可以发送接下来的20个字节。继续这样直到你完成。注意:由于Android中的一个bug,如果连接在传输过程中意外丢失,请确保在重新连接之前关闭gatt对象,否则在重新连接之后可能无法再次写入它。
您还应该使用gatt.requestConnectionPriority(BluetoothGatt.connection\u PRIORITY\u HIGH)将连接间隔从默认的50毫秒减少到最小值。如果需要自定义参数,还可以使用DA14580端的连接参数更新请求过程。
您还可以使用gatt.requestMtu请求更大的MTU,以便通过将碎片从应用程序移动到L2CAP层来略微提高吞吐量,从而消除一些头开销。
iOS有点困难,因为如果发送数据太快,核心蓝牙会丢弃没有响应命令的传出写入。但是,您可以为大约每10个数据包插入一个带有响应的Write来轻松解决这个问题。