嗨,对话框中,
我知道你说过“简而言之,DA1458x现在正式合格为BT 4.2设备,但不支持可选功能”,但我不清楚BLE PDU扩展到251字节是否被视为可选功能。如果SDK 5.0.3支持,是否需要一些配置?
我读了关于使用GATT_EXC_MTU_CMD来定义更大的MTU的帖子,我正在研究它。
谢谢你,马克斯
嗨max44,
4.2的新特性将LE的链路层PDU从27字节扩展到251字节的有效载荷,这在580上是不支持的,因为它是4.2的可选特性。当选择更大的MTU时,你不会改变LE的PDU,但在L2CAP之上的上层接受更大的有效载荷的能力,传输数据包的实际有效载荷保持不变。
由于MT_dialog
太,
好的,谢谢。
正如您可能从前面的问题中猜到的那样,我正在试验发送一些记录到EEPROM中的传感器数据。我想发送几页EEPROM数据(256字节)。我尝试使用ble_app_peripheral中设置的20字节数据的自定义特性发送带有多次读取的单个页面,几乎花了1秒的时间。
我不确定是否创建具有较大数量的字节并增加MTU值的特征,将导致更快的数据传输。你认为它会有所帮助吗?
问候,马克斯
您应该在没有响应而不是用响应写入时使用写入,以便能够在一个连接事件中发送多个20个字节数据包。这将为您提供与增加MTU相同的表现。
Joacimwe,
感谢输入,我的数据流是从DA到Android平板电脑/手机,它正在读取存储在连接到DA14580的EEPROM中的数据。我曾考虑过使用notify读取数据,但从最近与MT_Dialog的讨论来看,并没有任何反馈表明平板电脑/手机已经读取并存储了数据。我担心如果我只是将数据推入数据特性中,可能会导致数据丢失,所以我实现了一个流控制特性作为确认。当然,这增加了BLE开销并进一步降低了数据传输的速度。如果你知道一些更好的处理方法,请告诉我。现在,我打算考虑增加数据特征....中的字节数如果没有什么效果,可能还会增加MTU值。这对我来说是一个新领域,所以我小步走。
我知道了。我以为你是在另一个方向写数据。
如果你只是把数据和通知(送他们一个接一个,等待GATTC_CMP_EVT发送下一个),他们将以最大速度和没有数据包会下降的空气由于链路层等待确认之前的数据包发送之前下一个。
Android也以这样的方式建立,即它永远不会丢弃传入通知,但是以正确的顺序向所有侦听特性的应用程序转发它们。
唯一可能发生的是连接丢失的是,意味着传输中止,但仍然以正确的顺序接收所有接收的通知。这里最简单的方式是重新启动一切。
如果希望外设知道Android设备已收到所有通知,请在任何指示此的特征上写一些值。您不需要确认中间数据包,只是最后一个数据包。
谢谢你!我会试一试。
不幸的是,我不是为了工作。我修改了DA代码以向数据特征添加通知属性,并看到它正在按预期推出数据。然而,Android结束不起作用。我无法启用通知,在此过程中获取写入声明错误。我陷入了困境。
我正在运行三星Galaxy标签,带Android 6.0.1的平板电脑。测试应用程序是由蓝牙开发者工作室生成的,并且很简单。每个自定义特征(仅从BLE_APP_PERITITALLS SDK示例略微修改)有用于写入,读取的按钮,用于为特性定义的内容。所以....我可以扫描,连接和读写其他特征,但是当我单击按钮时,在数据特性上启用通知时,它会导致写入声明错误(通过Android Studio的调试模式)。应用程序中的BLE代码能够启用通知的通知几乎与Android开发人员举例相同.....所以我不明白为什么它不按照广告工作。错误消息不是任何帮助....状态代码129。
如果您知道任何纠正此错误的微妙事情,请告诉我。我认为这里不适合进入详细的android讨论,但如果您希望脱机讨论,我可以发布电子邮件地址。我见过大量关于三星版棉花糖的在线,所以也许我在它中遇到了不起作用的东西。我没有另一个Android设备尝试,但可以考虑在三星平板电脑上备份到Android 5。
您是如何在DA14580方面启用通知的?您都需要设置ATT权限,并在GATT特性声明中设置一点。还必须存在客户端特征配置描述符。
最简单的是遵循具有通知特性的现有示例代码。
在Android方面,你既需要编写描述符,也需要在本地注册通知。
好叫!我返回并发现在我的user_custs_config.h文件中有一些错误。正如您所建议的,我遵循了现有的示例,但它是用于指示属性的。我错过了所有修改通知的地方。
我现在能够在Android侧成功编写描述符,至少启用通知。我有一点工作要做,看看我是否可以在我的测试用例中完成数据转移,但会报告。
谢谢你继续帮助。非常感谢。
马克斯
我发送200字节(10个连续读取20字节)的测试用例在纠正启用通知问题后工作。我在Android平板电脑上测量了30毫秒,从我收到一个写命令的响应开始发送数据到从存储在平板电脑上的阵列中的DA获取所有200字节。
这是一个巨大的改进!再次感谢您的指导。
我将看看是否可以将测试扩展到1KB传输。你知道我以这种方式传输的数据量是否有限制吗?我的EEPROM是2mbit,我也计划使用它作为启动内存。我可能有大约230KB的记录数据要发送。
最佳,最大
我猜BLE的吞吐量小于EEPROM,所以EEPROM不是瓶颈。
提示是降低连接间隔(查找连接参数更新请求)以更快地发送数据。否则没有限制你可以据我所知划分多少。
我的数据速率随着1kb块,820毫秒略有下降。转移时间。我相当确定这不是由于我在运行测试之前将数据读取到一个大型数组时,但我会检查它。我想这可能是由于你提到的连接间隔?在DA侧,我在user_config中看到了有连接间隔值,它看起来为10 msec min和20 msec max。如果它们是默认连接参数,则此显示。我尝试更改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毫秒?
And with the max interval at 20 msec I was getting: onClientConnParamsChanged() - Device=80:EA:CA:00:00:03 interval=15 status=0 15 x 1.25 = 18.75
所以我可以稍微调整一下,但并没有很大的改善。
我意识到我在使用DA上的时间在UART上编写调试消息。我将所有这些都设置为关闭,并关闭了开发调试模式。现在,将连接间隔最大值设置为11.25 msec(如上所述),对于50个包(每个包20字节),我将获得161 msec的传输时间。这是好!
嗨max44,
4.2的新特性将LE的链路层PDU从27字节扩展到251字节的有效载荷,这在580上是不支持的,因为它是4.2的可选特性。当选择更大的MTU时,你不会改变LE的PDU,但在L2CAP之上的上层接受更大的有效载荷的能力,传输数据包的实际有效载荷保持不变。
由于MT_dialog
太,
好的,谢谢。
正如您可能从前面的问题中猜到的那样,我正在试验发送一些记录到EEPROM中的传感器数据。我想发送几页EEPROM数据(256字节)。我尝试使用ble_app_peripheral中设置的20字节数据的自定义特性发送带有多次读取的单个页面,几乎花了1秒的时间。
我不确定是否创建具有较大数量的字节并增加MTU值的特征,将导致更快的数据传输。你认为它会有所帮助吗?
问候,马克斯
您应该在没有响应而不是用响应写入时使用写入,以便能够在一个连接事件中发送多个20个字节数据包。这将为您提供与增加MTU相同的表现。
Joacimwe,
感谢输入,我的数据流是从DA到Android平板电脑/手机,它正在读取存储在连接到DA14580的EEPROM中的数据。我曾考虑过使用notify读取数据,但从最近与MT_Dialog的讨论来看,并没有任何反馈表明平板电脑/手机已经读取并存储了数据。我担心如果我只是将数据推入数据特性中,可能会导致数据丢失,所以我实现了一个流控制特性作为确认。当然,这增加了BLE开销并进一步降低了数据传输的速度。如果你知道一些更好的处理方法,请告诉我。现在,我打算考虑增加数据特征....中的字节数如果没有什么效果,可能还会增加MTU值。这对我来说是一个新领域,所以我小步走。
问候,马克斯
我知道了。我以为你是在另一个方向写数据。
如果你只是把数据和通知(送他们一个接一个,等待GATTC_CMP_EVT发送下一个),他们将以最大速度和没有数据包会下降的空气由于链路层等待确认之前的数据包发送之前下一个。
Android也以这样的方式建立,即它永远不会丢弃传入通知,但是以正确的顺序向所有侦听特性的应用程序转发它们。
唯一可能发生的是连接丢失的是,意味着传输中止,但仍然以正确的顺序接收所有接收的通知。这里最简单的方式是重新启动一切。
如果希望外设知道Android设备已收到所有通知,请在任何指示此的特征上写一些值。您不需要确认中间数据包,只是最后一个数据包。
谢谢你!我会试一试。
不幸的是,我不是为了工作。我修改了DA代码以向数据特征添加通知属性,并看到它正在按预期推出数据。然而,Android结束不起作用。我无法启用通知,在此过程中获取写入声明错误。我陷入了困境。
我正在运行三星Galaxy标签,带Android 6.0.1的平板电脑。测试应用程序是由蓝牙开发者工作室生成的,并且很简单。每个自定义特征(仅从BLE_APP_PERITITALLS SDK示例略微修改)有用于写入,读取的按钮,用于为特性定义的内容。所以....我可以扫描,连接和读写其他特征,但是当我单击按钮时,在数据特性上启用通知时,它会导致写入声明错误(通过Android Studio的调试模式)。应用程序中的BLE代码能够启用通知的通知几乎与Android开发人员举例相同.....所以我不明白为什么它不按照广告工作。错误消息不是任何帮助....状态代码129。
如果您知道任何纠正此错误的微妙事情,请告诉我。我认为这里不适合进入详细的android讨论,但如果您希望脱机讨论,我可以发布电子邮件地址。我见过大量关于三星版棉花糖的在线,所以也许我在它中遇到了不起作用的东西。我没有另一个Android设备尝试,但可以考虑在三星平板电脑上备份到Android 5。
您是如何在DA14580方面启用通知的?您都需要设置ATT权限,并在GATT特性声明中设置一点。还必须存在客户端特征配置描述符。
最简单的是遵循具有通知特性的现有示例代码。
在Android方面,你既需要编写描述符,也需要在本地注册通知。
好叫!我返回并发现在我的user_custs_config.h文件中有一些错误。正如您所建议的,我遵循了现有的示例,但它是用于指示属性的。我错过了所有修改通知的地方。
我现在能够在Android侧成功编写描述符,至少启用通知。我有一点工作要做,看看我是否可以在我的测试用例中完成数据转移,但会报告。
谢谢你继续帮助。非常感谢。
马克斯
Joacimwe,
我发送200字节(10个连续读取20字节)的测试用例在纠正启用通知问题后工作。我在Android平板电脑上测量了30毫秒,从我收到一个写命令的响应开始发送数据到从存储在平板电脑上的阵列中的DA获取所有200字节。
这是一个巨大的改进!再次感谢您的指导。
我将看看是否可以将测试扩展到1KB传输。你知道我以这种方式传输的数据量是否有限制吗?我的EEPROM是2mbit,我也计划使用它作为启动内存。我可能有大约230KB的记录数据要发送。
最佳,最大
我猜BLE的吞吐量小于EEPROM,所以EEPROM不是瓶颈。
提示是降低连接间隔(查找连接参数更新请求)以更快地发送数据。否则没有限制你可以据我所知划分多少。
我的数据速率随着1kb块,820毫秒略有下降。转移时间。我相当确定这不是由于我在运行测试之前将数据读取到一个大型数组时,但我会检查它。我想这可能是由于你提到的连接间隔?在DA侧,我在user_config中看到了有连接间隔值,它看起来为10 msec min和20 msec max。如果它们是默认连接参数,则此显示。我尝试更改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毫秒?
And with the max interval at 20 msec I was getting: onClientConnParamsChanged() - Device=80:EA:CA:00:00:03 interval=15 status=0 15 x 1.25 = 18.75
所以我可以稍微调整一下,但并没有很大的改善。
我意识到我在使用DA上的时间在UART上编写调试消息。我将所有这些都设置为关闭,并关闭了开发调试模式。现在,将连接间隔最大值设置为11.25 msec(如上所述),对于50个包(每个包20字节),我将获得161 msec的传输时间。这是好!