BLE 4.2数据包长度扩展?

14个职位/ 0个新职位
最后一篇
Max44
离线
最后见到:10个月2个星期前
加入:2016-02-08 15:58
BLE 4.2数据包长度扩展?

嗨对话框,

我知道你已经说过“简而言之,DA1458X现在正式被称为BT 4.2设备,而无需支持可选功能。”但它并不清楚我是251字节的BLE PDU扩展被视为可选功能。如果它在SDK 5.0.3中得到支持,则需要一些配置吗?

我确实阅读了使用gatt_exc_mtu_cmd的帖子来定义一个较大的mtu,我正在调查一下。

谢谢,最大

设备:
mt_dialog.
离线
最后见到:3个月1周前
工作人员
加入:2015-06-08 34
嗨Max44,

嗨Max44,

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

谢谢mt_dialog.

Max44
离线
最后见到:10个月2个星期前
加入:2016-02-08 15:58
MT,

MT,

好的,谢谢。

正如您可能从以前的问题猜到,我正在尝试发送记录到EEPROM的一些传感器数据。我想发送EEPROM数据的页面(256字节)。我尝试使用在BLE_APP_PERITWAL中设置20个字节的数据的自定义特征来发送单个读取的单个页面,并且需要几乎1秒钟即可完成。

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

问候,最大

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

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

Max44
离线
最后见到:10个月2个星期前
加入:2016-02-08 15:58
Joacimwe,

Joacimwe,

感谢您的输入,我的数据流是从DA到Android平板电脑/手机,读取数据存储在连接到DA14580的EEPROM中。我已经研究了对数据读取的通知,但从最近与MT_Dialog讨论的讨论没有任何反馈,平板电脑/电话已读取和存储数据。我担心这可能导致数据丢失,如果我刚刚将数据推入数据特征,所以我实现了作为确认的流量控制特性。当然,这会增加BLE开销并进一步减慢数据传输。如果您知道处理此操作的一些更好的技术,请告诉我。现在,我计划查看数据特征中的字节数....如果似乎没有多大,可能会增加MTU值。这是我的新领域,所以我正在采取较小的步骤。

问候,最大

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

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

如果您只需用通知推动数据(一个接一个地发送它们并等待GattC_CMP_EVT发送下一个),那么它们将以最大速度顺序发送,并且由于链接层等待的链路层没有数据包将被丢弃为了确认在发送下一个数据包之前。

Android也以这样的方式构建,它不会丢弃传入的通知,而是以正确的顺序将所有通知转发给正在监听该特性的应用程序。

唯一可能发生的事情是连接丢失,这意味着传输中断,但所有接收到的通知仍然以正确的顺序接收。最简单的方法就是重新开始。

如果你想让外围设备知道Android设备已经收到了所有的通知,只需在任何特征上写一些值来表明这一点。您不需要确认中间包,只需要确认最后一个包。

Max44
离线
最后见到:10个月2个星期前
加入:2016-02-08 15:58
谢谢你!我给它一个

谢谢你!我会试一试。

Max44
离线
最后见到:10个月2个星期前
加入:2016-02-08 15:58
不幸的是,我不是

不幸的是,我不能让它工作。我修改了DA代码,将通知属性添加到数据特征中,并查看它是否按预期输出数据。然而,Android端不工作。我不能启用通知,在过程中得到一个写声明错误。我在这一点上卡住了。

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

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

Joacimwe
离线
最后见到:1年6个月前
大师
加入:2014-01-14 06:45
你是如何启用的

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

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

在Android方面,您需要写入描述符并在本地注册通知。

Max44
离线
最后见到:10个月2个星期前
加入:2016-02-08 15:58
好叫!我回去了

好叫!我回去了,发现了我的user_custs_config.h文件中的一些错误。我在建议时遵循了一个现有的实例,但它是表示属性的。我错过了编辑所有地点来改变它以通知。

我现在能够成功地在Android端编写描述符,并且至少能够启用通知。我还有一点工作要做,看看我是否能在我的测试用例中完成数据传输,但将报告回来。

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

最大

Max44
离线
最后见到:10个月2个星期前
加入:2016-02-08 15:58
Joacimwe,

Joacimwe,

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

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

我要看看我是否可以将测试扩展到1KB传输。你知道是否有限制我可以以这种方式流流的限制?我的EEPROM是一个2 Mbit,我也计划用作启动内存。我可能有大约230KB的记录数据发送。

最好的问候,马克斯

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

我猜BLE吞吐量小于EEPROM,因此EEPROM不是瓶颈。

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

Max44
离线
最后见到:10个月2个星期前
加入:2016-02-08 15:58
我的数据速率下降了

我的数据速率急剧下降与更大的1KB块,820毫秒。传输时间。我相当肯定这不是由于在运行测试之前将数据读入一个大数组时的任何EEPROM计时,但我将检查它。我想这可能与您提到的连接间隔有关吧?在DA方面,我在user_config.h中看到连接间隔值似乎是10 msec min和20 msec max。如果它们是默认的连接参数,这看起来没问题。我尝试改变user_config.h中的值。如果我把两者都设置为10毫秒,就会停止工作。如果我将最大值设置为11.25,我只得到稍微好一点的传输时间,791 msec。时间似乎也随着测试的迭代而变化。

在连接时,我看到了Android Studio调试器报告:OnClientConnParamsChanged() - 设备= 80:EA:CA:00:00:03间隔= 9状态= 0

根据注释,我认为DA14580以1.25 msec的增量设置间隔,那么9就是11.25 msec?

并且在20毫秒的最大间隔我得到:OnClientConnParamsChanged() - 设备= 80:EA:CA:00:00:03间隔= 15状态= 0 15 x 1.25 = 18.75

所以看来我可以稍微调整一些东西,但没有大大改进。

Max44
离线
最后见到:10个月2个星期前
加入:2016-02-08 15:58
我意识到我在浪费时间

我意识到我在da上使用时间来编写UART上的调试消息。我配置了所有这些,关闭了开发调试模式。现在,连接间隔最大设置为11.25毫秒如上所述,我将获得161毫秒的转移时间,每个分组为20字节为20个字节。这很好!

主题锁定