吞吐量过低(对于大特性)

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
10个帖子/ 0新
最后一篇
pvmellor
离线
最后一次露面:1年7个月前
加入:2017-04-27 20:30
吞吐量过低(对于大特性)

请参见附件中的PDF和时间数据的详细信息。

谢谢,

保罗。

附件:
设备:
PM_DIALOG.
离线
最后一次露面:17小时49分钟前
职员
加入:2018-02-08 11:03
嗨pvmellor,

嗨pvmellor,

谢谢你的截图。让我查一下,我会尽快给您答复。你能解释一下你是如何发送数据的吗?你在使用通知吗?另外,一个嗅探日志将非常有助于了解数据包是如何通过空气交换的。

谢谢,PM_DIALOG.

pvmellor
离线
最后一次露面:1年7个月前
加入:2017-04-27 20:30
数据被发送到DA14850

数据从智能手机(Android和iOS)发送到DA14850。它通过一个简单的特征WRITE发送,不需要响应(或发送)。我们已经订购了数据包嗅探器,但是我们希望你可以帮助我们从DA14580软件侧追踪这个过程。

pvmellor
离线
最后一次露面:1年7个月前
加入:2017-04-27 20:30
我们已经尝试了改变

我们已经尝试更改user_gapm_conf和user_connection_param_conf的user_config.h中的参数,但没有任何对实际传输速度的差异。您有任何想法/建议可以帮助吗?它的速度很慢。有没有办法讲述运行时在运行时使用的参数?

PM_DIALOG.
离线
最后一次露面:17小时49分钟前
职员
加入:2018-02-08 11:03
嗨pvmellor,

嗨pvmellor,

你能检查一下我的最大mtu大小吗?请在user_config.h中设置user_gapm_conf结构的max_mtu项到256。

谢谢,PM_DIALOG.

pvmellor
离线
最后一次露面:1年7个月前
加入:2017-04-27 20:30
好的尝试了这个 - 没有

好吧,我试过了,恐怕没有什么区别。任何其他想法?你能复制这个吗?一个简单的应用程序重复编写一个256byte的特征应该可以证明这个问题。

pvmellor
离线
最后一次露面:1年7个月前
加入:2017-04-27 20:30
我们做了很多

我们现在已经完成了很多工作。我们可以成功发送L2CAP连接参数更新请求

app_easy_gap_param_update_start(connection_idx);

我们看到主服务器(智能手机)更改了连接间隔,新参数与我们在Response消息中看到的参数匹配

user_catch_rest_hndl()... gapc_param_updated_ind

这些也匹配GTL流开/关投票时间。所以这一切都在正常工作,我们可以设置15ms的连接间隔让我们说。

但是,对于256字节特性写入,它仍然需要太多的连接事件期限:约44。即使我们将特性的大小降低到64字节,也需要10个连接事件以将其写入DA14580。如果需要,我可以提供追踪(遗憾我们不能只添加JPEG到这些票证)。并且只需16个字节,特征仍然需要2个连接事件来传输。

所以我有一些问题:

  • 你希望得到这个结果吗?我们在0.66秒内获得256个字节的吞吐量 - 这是384字节/秒:当然我们可以期待更多!
  • 你能复制这个并在你的那端进行测试看看你是否有同样的问题吗?我们运行一个外部处理器并启用GTL。
  • 您能解释一下为什么需要这么多连接事件才能发送少量数据吗?这似乎是至关重要的考虑。
  • 我们尝试了一个Adafruit“Bluefruit Le Sniffer”,但它只能看到广告数据包,它无法嗅到连接包。您是否可以推荐使用DA14580的嗅探器,所以我们可以追踪在空中发生的事情?
  • 是否有一种方法来告知链路层中使用的当前活动连接参数是什么?
  • 我们的问题似乎越来越少于每个连接事件的数据包,但它也很有趣:
    • DA14580支持每个连接事件的数据包有多少?
    • 在“user_connection_param_conf”中有min和max连接事件参数。这些控制每个连接事件发送的数据包数量吗?如果有,你如何详细说明它们?

感谢您及时支持客户等待......

谢谢,

保罗

PM_DIALOG.
离线
最后一次露面:17小时49分钟前
职员
加入:2018-02-08 11:03
嗨pvmellor,

嗨pvmellor,

让我检查你的问题并尝试复制你的问题,我会尽快回复你。

谢谢,PM_DIALOG.

pvmellor
离线
最后一次露面:1年7个月前
加入:2017-04-27 20:30
嗨,抱歉唠叨,但有

嗨,抱歉唠叨,但是你能够在这个方面取得任何进展吗?我们现在被困在你最后等待回复/帮助。请参阅上面的具体问题。

谢谢!

PM_DIALOG.
离线
最后一次露面:17小时49分钟前
职员
加入:2018-02-08 11:03
嗨pvmellor,

嗨pvmellor,

设备在连接间隔期间发送的数据量取决于中央允许外设发送的数据包。每个选择标准MTU的数据包的有效负载是20字节。所以你发送的每个数据最多可以携带20个字节。您无法控制BLE在连接间隔期间将发送多少数据包,因为这取决于连接的主人,如果他不想接受数据,他只是不会接受它,即使您表示有更多的数据要发送。如果您希望发送超过20字节的数据,那么您必须增加您的MTU大小,然后L2CAP将获取剩余的数据,切掉数据,并将它们放入多个数据包中。

具体来说,一个设备可以通过空气发送的字节数受MTU (Maximum Transfer Unit)的限制,MTU默认限制在23字节,包括ATT层开销,所以有效载荷是20字节。通过增加MTU的大小,这意味着您可以通过空气发送更多的字节。在您的情况下,最大传输单元应该是您希望发送的字节数+ 3个额外字节。您应该修改user_config.h头文件的user_gapm_conf结构的.max_mtu。在此之后,为了与中央执行交换,当您有一个连接(在user_on_connection中)时,应该发送GATTC_EXC_MTU_CMD,并且580将执行交换。没有实现MTU交换功能的API,但是你可以使用下面的代码片段:

静态void user_gattc_exc_mtu_cmd(uint8_t conidx)

{

struct gattc_exc_mtu_cmd * cmd = ke_msg_alloc(gattc_exc_mtu_cmd,

ke_build_id(task_gattc,conidx),task_app,

gattc_exc_mtu_cmd);

cmd-> req_type = gattc_mtu_exch;

ke_msg_send(cmd);

}

请检查附带的截图。我已经实施了256bytes - “没有回复写作”特征。此外,.max_mtu = 259,我在user_on_connection中使用上面的代码片段。为您的信息,我工作在SDK5.0.4的BLE_APP_PERITELAL示例上。正如您可以在附加的快照中看到的,则256bytes划分为较小的数据包。256bytes以1个连接间隔从BLE通用应用程序发送到外设。您可以看到,在空中发送数据时,仅使用通道-30,这意味着只有1个连接间隔。有效载荷通过7400位/秒。为什么您获得较小吞吐量的可能原因是您可能没有完成MTU Exchange,因此对于发送256bytes,需要超过1个以上的连接间隔。请注意,可能会发生重新传输。 You are able to use API uint16_t gattc_get_mtu(uint8_t idx) to poll the negotiated MTU. Regarding you question for the sniffer; I used the Frontline sniffer products for debugging BLE protocol.

谢谢,PM_DIALOG.