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

⚠️
大家好. .谢谢你来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,包含在主对话网站中。所有岗位和账户都已迁移。我们现在只接受新论坛的流量-请在上面发布任何新帖子//www.wsdof.com/support.我们将在未来几天修复bug /优化搜索和标记。
10个帖子/ 0个新
最后发表
pvmellor
离线
最后看到:1年7个月前
加入:2017-04-27 20:30
吞吐量过低(对于大特性)

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

谢谢,

保罗。

附件:
设备:
PM_Dialog
离线
最后看到:2小时27分钟前
工作人员
加入: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_config.h中的参数user_gapm_conf和user_connection_param_conf,但是对实际传输速度没有任何影响。你对此有什么想法/建议吗?它确实很慢。是否有一种方法可以告诉在运行时使用了哪些参数?

PM_Dialog
离线
最后看到:2小时27分钟前
工作人员
加入: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。

然而,它仍然需要太多的连接事件周期来传输数据:大约44个256字节的特征写入。即使我们将特征的大小减少到64字节,也需要10个连接事件才能将其写入DA14580。如果需要,我可以提供踪迹(遗憾的是,我们不能只是添加一个jpeg到这些票)。而且在只有16字节长的情况下,一个特征仍然需要2个连接事件来传输。

所以我有一些问题:

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

感谢您的及时支持,因为有客户在等着我们……

谢谢,

保罗

PM_Dialog
离线
最后看到:2小时27分钟前
工作人员
加入:2018-02-08 11:03
嗨pvmellor,

嗨pvmellor,

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

谢谢,PM_Dialog

pvmellor
离线
最后看到:1年7个月前
加入:2017-04-27 20:30
抱歉跟你唠叨,但是

嗨,抱歉唠叨,但你在这方面有进展了吗?我们现在被困住了,等待你们那边的答复/帮助。请参见上面的具体问题。

谢谢!

PM_Dialog
离线
最后看到:2小时27分钟前
工作人员
加入: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,但是你可以使用下面的代码片段:

Static user_gattc_exc_mtu_cmd(uint8_t conidx)

struct gattc_exc_mtu_cmd *cmd = KE_MSG_ALLOC(gattc_exc_mtu_cmd,

TASK_APP KE_BUILD_ID (TASK_GATTC conidx),

gattc_exc_mtu_cmd);

cmd - > req_type = GATTC_MTU_EXCH;

ke_msg_send (cmd);

请查看附件的截图。我已经实现了一个256字节的“无响应写入”特性。此外,.max_mtu=259,我在user_on_connection中使用了上面的代码片段。为了让您了解,我研究了SDK5.0.4的ble_app_peripheral示例。正如您在附件的快照中所看到的,256字节被分成了更小的数据包。256字节以1个连接间隔从BLE通用应用程序发送到外设。您可以看到,当通过空中发送数据时,只使用了Channel-30,这意味着只有一个连接间隔。通过的有效负载是7400比特/秒。您获得较小吞吐量的可能原因是您可能没有进行MTU交换,因此发送256字节需要超过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