大家好!!
我有一个关于DA14681的蓝牙4.2的问题要问。
蓝牙4.2带宽测试:--------------------------------------------*我们正在通过ble向android手机发送更大的数据包(每包247字节)。我们现在的速度是5.3KBytes/sec,你能告诉我DA14681支持的最大带宽是多少吗。我需要更多的输入来增加带宽。
嗨,德拉吉,
我们目前正在对此进行调查,没有对Android手机的估计,我可以提到的是,到目前为止,我们实现的最大速率约为80kB/s,但这两款设备都是68x开发套件,而不是手机,使用247的MTU和数据长度扩展功能,连接间隔为30ms,连接事件长度为3.75ms,68x时钟频率为96MHz。在不同的设备android或iOS的情况下,预期的吞吐量将远低于预期的吞吐量,因为在实现高吞吐量方面至关重要的参数是不被连接的主机所接受的,并且这仍在调查中。
关于提高系统的吞吐量,您可以使用PDU的长度、MTU的大小和当前连接使用的连接间隔(较小的连接肯定会有助于提高数据吞吐量)来试验这些参数。
谢谢你的对话
嗨,MT\u dialog,
我们目前正在向Android手机发送音频流。UART设置为230kbps(DA14681,CPU时钟为96MHz)。所以数据来自UART,然后通过BLE4.2转发到Android。
到目前为止,我们所能达到的最佳性能是8K字节/秒。这对于我们的申请来说还是很低的。我们使用以下功能向android发送32KB的数据:ble\u error\u t ble\u gatts\u send\u event(uint16\u t conn\u idx,uint16\u t handle,gatt\u event\u type,uint16(t长度,const void*值);
在循环中调用该函数时(使用247字节的串),BLE会在几次调用后断开连接。
1.该函数是否适合发送32K字节的数据?2.这个函数是异步的吗?如果是这样的话,SDK是否提供回调或某个事件来通知何时准备好发送下一组数据?
当做!
你好jairo.borba,
是的,为了通过通知或指示通过BLE发送数据,这是一个合适的函数,但是在while循环中使用这个函数并一个接一个地发送通知并不是一个好主意。虽然我不完全理解异步的意思,但函数只会将通知放在低层缓冲区中,并在下一个连接事件时发送数据。是的,当通知进入事件缓冲区时,ble\u gatts\u send\u event()返回一个事件,您应该在应用程序层获得一个ble\u EVT\u gatts\u event\u SENT消息。因此,您应该始终获取完成消息,然后将其他数据放入缓冲区,如果没有,设备将存储未进入缓冲区的消息,并且最终,当分配的消息不适合您分配的内存时,您将耗尽堆,您的f/w将断言。
嗨,德拉吉,
我们目前正在对此进行调查,没有对Android手机的估计,我可以提到的是,到目前为止,我们实现的最大速率约为80kB/s,但这两款设备都是68x开发套件,而不是手机,使用247的MTU和数据长度扩展功能,连接间隔为30ms,连接事件长度为3.75ms,68x时钟频率为96MHz。在不同的设备android或iOS的情况下,预期的吞吐量将远低于预期的吞吐量,因为在实现高吞吐量方面至关重要的参数是不被连接的主机所接受的,并且这仍在调查中。
关于提高系统的吞吐量,您可以使用PDU的长度、MTU的大小和当前连接使用的连接间隔(较小的连接肯定会有助于提高数据吞吐量)来试验这些参数。
谢谢你的对话
嗨,MT\u dialog,
我们目前正在向Android手机发送音频流。UART设置为230kbps(DA14681,CPU时钟为96MHz)。
所以数据来自UART,然后通过BLE4.2转发到Android。
到目前为止,我们所能达到的最佳性能是8K字节/秒。这对于我们的申请来说还是很低的。
我们使用以下功能向android发送32KB的数据:
ble\u error\u t ble\u gatts\u send\u event(uint16\u t conn\u idx,uint16\u t handle,gatt\u event\u type,
uint16(t长度,const void*值);
在循环中调用该函数时(使用247字节的串),BLE会在几次调用后断开连接。
1.该函数是否适合发送32K字节的数据?
2.这个函数是异步的吗?如果是这样的话,SDK是否提供回调或某个事件来通知何时准备好发送下一组数据?
当做!
你好jairo.borba,
是的,为了通过通知或指示通过BLE发送数据,这是一个合适的函数,但是在while循环中使用这个函数并一个接一个地发送通知并不是一个好主意。虽然我不完全理解异步的意思,但函数只会将通知放在低层缓冲区中,并在下一个连接事件时发送数据。是的,当通知进入事件缓冲区时,ble\u gatts\u send\u event()返回一个事件,您应该在应用程序层获得一个ble\u EVT\u gatts\u event\u SENT消息。因此,您应该始终获取完成消息,然后将其他数据放入缓冲区,如果没有,设备将存储未进入缓冲区的消息,并且最终,当分配的消息不适合您分配的内存时,您将耗尽堆,您的f/w将断言。
谢谢你的对话