BLE 4.2包长度扩展?

14个帖子/ 0新
最后发表
Max44
离线
最后看到:9个月,4个星期前
加入:2016-02-08等等
BLE 4.2包长度扩展?

嗨,对话框中,

我知道你说过“简而言之,DA1458x现在正式成为BT 4.2设备,不支持可选功能”,但我不清楚251字节的BLE PDU扩展是否被认为是可选功能。如果它在SDK 5.0.3中支持,是否有一些配置需要它?

我确实读了使用GATT_EXC_MTU_CMD定义更大的MTU的文章,我正在研究。

谢谢你,马克斯

设备:
MT_dialog
离线
最后看到:两个月四个星期前
工作人员
加入:2015-06-08 34
嗨Max44,

嗨Max44,

4.2的新特性将LE的链路层PDU的有效载荷从27字节扩展到251字节,这在580上是不支持的,因为它是4.2的可选特性。当选择一个更大的MTU时,你不会改变LE的PDU,但是在L2CAP之上的上层接受更大的有效载荷的能力,发送数据包的实际有效载荷保持不变。

由于MT_dialog

Max44
离线
最后看到:9个月,4个星期前
加入:2016-02-08等等
太,

太,

好的,谢谢。

正如您从前面的问题中可能猜到的那样,我正在试验发送一些登录到EEPROM的传感器数据。我想发送EEPROM数据页(256字节)。我尝试使用在ble_app_peripheral中设置的20字节数据的自定义特征发送带有多次读取的单个页面,这几乎花费了1秒。

我不确定创建一个具有更大字节数的特征并增加MTU值是否会导致更快的数据传输。你认为会有帮助吗?

问候,马克斯

Joacimwe
离线
最后看到:一年6个月前
大师
加入:2014-01-14 06:45
你应该做的是使用

为了能够在一个连接事件中发送多个20字节的数据包,你应该使用Write Without Response而不是Write With Response。这将提供与增加MTU相同的性能。

Max44
离线
最后看到:9个月,4个星期前
加入:2016-02-08等等
Joacimwe,

Joacimwe,

感谢您的输入,我的数据流是从DA到Android平板电脑/手机,读取存储在连接到DA14580的EEPROM中的数据。我曾研究使用通知读取数据,但从最近与MT_Dialog的讨论,没有任何反馈,平板电脑/手机已经读取和存储数据。我担心如果我只是将数据放入数据特征中,这可能会导致数据丢失,所以我实现了一个流控制特征作为确认。当然,这增加了BLE开销并进一步减慢了数据传输。如果你知道一些更好的处理方法,请告诉我。现在,我计划考虑增加数据特征....中的字节数也许还可以增加MTU值,如果这似乎没有什么作用的话。这对我来说是新的领域,所以我要一步步来。

问候,马克斯

Joacimwe
离线
最后看到:一年6个月前
大师
加入:2014-01-14 06:45
我明白了。我以为你是

我明白了。我以为你在用另一个方向写数据。

如果你只是把数据和通知(送他们一个接一个,等待GATTC_CMP_EVT发送下一个),他们将以最大速度和没有数据包会下降的空气由于链路层等待确认之前的数据包发送之前下一个。

Android也以这样一种方式构建,它从不丢弃收到的通知,而是将它们按照正确的顺序转发给正在侦听该特性的应用程序。

唯一可能发生的情况是连接丢失,这意味着传输中断,但所有接收到的通知仍然按照正确的顺序接收到。最简单的方法是重新启动所有内容。

如果希望外设知道Android设备已收到所有通知,请在任何指示此的特征上写一些值。您不需要确认中间数据包,只是最后一个数据包。

Max44
离线
最后看到:9个月,4个星期前
加入:2016-02-08等等
谢谢你!我给它一个

谢谢你!我会试试的。

Max44
离线
最后看到:9个月,4个星期前
加入:2016-02-08等等
不幸的是,我不是

不幸的是,我没法让它工作。我修改了DA代码,向数据特征添加一个notify属性,并查看它是否如预期的那样输出数据。然而,Android端不工作。我不能启用通知,在进程中获得写入声明错误。我被困在这一点上了。

我运行的是三星Galaxy Tab a平板电脑,搭载Android 6.0.1系统。测试应用程序是由Bluetooth Developer Studio生成的,非常简单。每个自定义特性(仅从ble_app_peripherals SDK示例中稍加修改)都有用于写、读的按钮,并为为该特性定义的内容启用通知。所以…我可以扫描、连接和读写其他特征,但当我点击数据特征的启用通知按钮时,它导致写入声明错误(通过Android Studio的调试模式看到)。应用中的BLE代码使通知生效,看起来与Android Developer示例.....几乎相同所以我不明白为什么它没有像广告上说的那样有效。错误消息没有任何帮助....状态码129。

如果你知道任何细微的事情来纠正这个错误,让我知道。我不认为在这里详细讨论Android是合适的,但是如果你想离线讨论,我可以给你发一个电子邮件地址。我在网上看到很多人抱怨三星(Samsung)的棉花糖(Marshmallow)版本,所以也许我在其中遇到了一些不能用的东西。我没有其他Android设备可以尝试,但可以考虑在三星平板电脑上使用Android 5。

Joacimwe
离线
最后看到:一年6个月前
大师
加入:2014-01-14 06:45
你是怎么做到的

如何在DA14580端启用通知?您都需要设置ATT权限,还需要对GATT特征声明设置一点。客户端特征配置描述符也必须存在。

最简单的方法是遵循具有通知特性的现有示例代码。

在Android端,您既需要编写描述符,也需要在本地注册通知。

Max44
离线
最后看到:9个月,4个星期前
加入:2016-02-08等等
好叫!我回去了

好叫!我返回并在我的user_custs_config.h文件中发现了一些错误。正如您所建议的,我遵循了一个现有的示例,但它是用于指示属性的。我错过了把所有地方都修改成通知。

我现在可以在Android端成功编写描述符,至少可以启用通知。我还有一些工作要做,看看我是否能完成测试用例中的数据传输,但会返回报告。

谢谢你一直以来的帮助。非常感激。

马克斯

Max44
离线
最后看到:9个月,4个星期前
加入:2016-02-08等等
Joacimwe,

Joacimwe,

我的测试用例发送200个字节(连续10次读取20个字节)在纠正启用通知问题后工作。我在Android平板电脑上测量了30毫秒,从我收到一个写命令的响应开始发送数据到获取存储在平板电脑阵列中的DA的所有200字节。

这是一个巨大的进步!!再次感谢您的指导。

我将看看能否将测试扩展到1KB的传输。你知道我能以这种方式传输多少数据是有限制的吗?我的EEPROM是2mbit,我也打算把它用作引导内存。我可能有大约230KB的日志数据要发送。

最好的问候,马克斯

Joacimwe
离线
最后看到:一年6个月前
大师
加入:2014-01-14 06:45
我猜BLE吞吐量是

我猜BLE吞吐量小于EEPROM,所以EEPROM不是瓶颈。

一个技巧是降低连接间隔(寻找连接参数更新请求)以更快地发送数据。否则,就我所知,你能流多少是没有限制的。

Max44
离线
最后看到:9个月,4个星期前
加入:2016-02-08等等
我的数据速率下降了

我的数据速率在一个更大的1KB块(820毫秒)时急剧下降。传输时间。我非常确定这不是由于在运行测试之前将数据读入一个大型数组时的任何EEPROM计时,但是我会检查它。我想这可能是你提到的连接间隔造成的吧?在DA侧,我在user_config.h中看到连接间隔值是10毫秒分钟和20毫秒最大。如果它们是默认的连接参数,这看起来没问题。我尝试修改user_config.h中的值。如果我都设置为10毫秒,就会停止工作。如果我将最大值设置为11.25,那么传输时间只会稍微好一点,791毫秒。时间似乎也随着测试的迭代而变化。

在连接上,我看到Android Studio调试器报告:onClientConnParamsChanged() - Device=80:EA:CA:00:00:03 interval=9 status=0

根据评论,我认为DA14580以1.25毫秒为增量设置间隔,所以9应该是11.25毫秒?

当最大间隔为20毫秒时,我得到:onClientConnParamsChanged() - Device=80:EA:CA:00:00:03 interval=15 status=0 15 x 1.25 = 18.75

看来我可以稍微调整一下,但不会有太大的改善。

Max44
离线
最后看到:9个月,4个星期前
加入:2016-02-08等等
我意识到我在浪费时间

我意识到我在用DA上的时间在UART上编写调试消息。我关闭了所有这些配置,并关闭了开发调试模式。现在,将连接最大间隔设置为如上所述的11.25 msec,对于50个包(每个包20字节),我将获得161 msec的传输时间。这是好!

主题锁定