嗨,对话,
我知道你说过“简言之,DA1458x现在正式被认定为bt4.2设备,不支持可选功能。”但我不清楚的是,BLE PDU扩展到251字节是否被视为可选功能。如果在sdk5.0.3中支持,是否需要一些配置?
我确实读过关于使用GATT\u EXC\u MTU\CMD来定义一个更大的MTU的帖子,我正在研究这个问题。
谢谢,麦克斯
嗨max44,
4.2的新特性将LE的链路层PDU有效负载从27字节扩展到251字节,这在580上不受支持,因为它是4.2可选特性。当选择一个更大的MTU时,你不会改变LE的PDU,而是改变上层的缩写,在L2CAP之上接受更大的有效载荷,传输包的实际有效载荷保持不变。
谢谢你的对话
MT公司,
好的,谢谢。
正如你可能从前面的问题猜到的,我正在尝试发回一些记录在EEPROM中的传感器数据。我想发送EEPROM数据页(256字节)。我试着用ble\u app\u peripheral中设置的20字节数据的自定义特性发送一个包含多个读取的页面,几乎花了1秒。
我不确定是否创建具有较大数量的字节并增加MTU值的特征,将导致更快的数据传输。你认为它会有所帮助吗?
你好,麦克斯
您应该在没有响应而不是用响应写入时使用写入,以便能够在一个连接事件中发送多个20个字节数据包。这将为您提供与增加MTU相同的表现。
乔奇姆,
感谢您的输入,我的数据流是从DA到Android平板电脑/手机,该平板电脑/手机正在读取连接到DA14580的EEPROM中存储的数据。我曾研究过使用notify读取数据,但从最近与MTèu Dialog的讨论来看,没有任何反馈表明平板电脑/手机读取并存储了数据。我担心如果我只是将数据推入数据特性中,可能会导致数据丢失,所以我实现了一个流控制特性作为确认。当然,这会增加不可伸缩的开销,并进一步降低数据传输速度。如果你知道一些更好的技术来处理这个,请让我知道。现在,我计划增加数据特征中的字节数。。。。如果这看起来没什么用的话,也许可以增加MTU值。这对我来说是一个新的领域,所以我正在迈出一小步。
我懂了。我以为你是在另一个方向写数据。
如果您只是推送带有通知的数据(逐个发送并等待GATTC\u CMP\u EVT发送下一个),它们将以最大速度按顺序发送,并且由于链路层在发送下一个数据包之前等待上一个数据包的确认,因此不会在空中丢弃任何数据包。
Android也以这样的方式建立,即它永远不会丢弃传入通知,但是以正确的顺序向所有侦听特性的应用程序转发它们。
唯一可能发生的是连接丢失的是,意味着传输中止,但仍然以正确的顺序接收所有接收的通知。这里最简单的方式是重新启动一切。
如果你想知道Androi的外围d device has received all notifications, just write some value over any characteristic indicating this. You don't need to acknowledge intermediate packets, just the last one.
谢谢您!我试试看。
不幸的是,我不是为了工作。我修改了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\u custs\u config.h文件中发现了一些错误。正如你所建议的,我遵循了一个现有的示例,但它是针对indicate属性的。我错过了编辑所有的地方,以改变它通知。
我现在能够在Android侧成功编写描述符,至少启用通知。我有一点工作要做,看看我是否可以在我的测试用例中完成数据转移,但会报告。
谢谢你继续帮助。非常感谢。
马克斯
我发送200字节(连续10次读取20个字节)的测试用例在纠正了启用notify问题后工作正常。我在Android平板电脑上测量了30毫秒,从我收到一个write命令的响应开始发送数据到从存储在平板电脑阵列中的DA获取所有200个字节。
这是一个巨大的改进!再次感谢您的指导。
我要看看能不能把测试扩展到1KB传输。你知道我用这种方式传输的数据量有没有限制吗?我的EEPROM是一个2兆比特,我也打算用它作为启动内存。我可能有大约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毫秒?
最大间隔为20毫秒时,我得到:onClientConnParamsChanged()-Device=80:EA:CA:00:00:03 interval=15 status=0 15 x 1.25=18.75
所以看起来我可以稍微调整一下,但没有太大的改善。
我意识到我是在用DA上的时间在UART上写调试消息。我配置了所有这些,并关闭了开发调试模式。现在,将连接间隔max设置为11.25毫秒(如上所述),对于每个20字节的50个数据包,我得到了161毫秒的传输时间。这太好了!
嗨max44,
4.2的新特性将LE的链路层PDU有效负载从27字节扩展到251字节,这在580上不受支持,因为它是4.2可选特性。当选择一个更大的MTU时,你不会改变LE的PDU,而是改变上层的缩写,在L2CAP之上接受更大的有效载荷,传输包的实际有效载荷保持不变。
谢谢你的对话
MT公司,
好的,谢谢。
正如你可能从前面的问题猜到的,我正在尝试发回一些记录在EEPROM中的传感器数据。我想发送EEPROM数据页(256字节)。我试着用ble\u app\u peripheral中设置的20字节数据的自定义特性发送一个包含多个读取的页面,几乎花了1秒。
我不确定是否创建具有较大数量的字节并增加MTU值的特征,将导致更快的数据传输。你认为它会有所帮助吗?
你好,麦克斯
您应该在没有响应而不是用响应写入时使用写入,以便能够在一个连接事件中发送多个20个字节数据包。这将为您提供与增加MTU相同的表现。
乔奇姆,
感谢您的输入,我的数据流是从DA到Android平板电脑/手机,该平板电脑/手机正在读取连接到DA14580的EEPROM中存储的数据。我曾研究过使用notify读取数据,但从最近与MTèu Dialog的讨论来看,没有任何反馈表明平板电脑/手机读取并存储了数据。我担心如果我只是将数据推入数据特性中,可能会导致数据丢失,所以我实现了一个流控制特性作为确认。当然,这会增加不可伸缩的开销,并进一步降低数据传输速度。如果你知道一些更好的技术来处理这个,请让我知道。现在,我计划增加数据特征中的字节数。。。。如果这看起来没什么用的话,也许可以增加MTU值。这对我来说是一个新的领域,所以我正在迈出一小步。
你好,麦克斯
我懂了。我以为你是在另一个方向写数据。
如果您只是推送带有通知的数据(逐个发送并等待GATTC\u CMP\u EVT发送下一个),它们将以最大速度按顺序发送,并且由于链路层在发送下一个数据包之前等待上一个数据包的确认,因此不会在空中丢弃任何数据包。
Android也以这样的方式建立,即它永远不会丢弃传入通知,但是以正确的顺序向所有侦听特性的应用程序转发它们。
唯一可能发生的是连接丢失的是,意味着传输中止,但仍然以正确的顺序接收所有接收的通知。这里最简单的方式是重新启动一切。
如果你想知道Androi的外围d device has received all notifications, just write some value over any characteristic indicating this. You don't need to acknowledge intermediate packets, just the last one.
谢谢您!我试试看。
不幸的是,我不是为了工作。我修改了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\u custs\u config.h文件中发现了一些错误。正如你所建议的,我遵循了一个现有的示例,但它是针对indicate属性的。我错过了编辑所有的地方,以改变它通知。
我现在能够在Android侧成功编写描述符,至少启用通知。我有一点工作要做,看看我是否可以在我的测试用例中完成数据转移,但会报告。
谢谢你继续帮助。非常感谢。
马克斯
乔奇姆,
我发送200字节(连续10次读取20个字节)的测试用例在纠正了启用notify问题后工作正常。我在Android平板电脑上测量了30毫秒,从我收到一个write命令的响应开始发送数据到从存储在平板电脑阵列中的DA获取所有200个字节。
这是一个巨大的改进!再次感谢您的指导。
我要看看能不能把测试扩展到1KB传输。你知道我用这种方式传输的数据量有没有限制吗?我的EEPROM是一个2兆比特,我也打算用它作为启动内存。我可能有大约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毫秒?
最大间隔为20毫秒时,我得到:onClientConnParamsChanged()-Device=80:EA:CA:00:00:03 interval=15 status=0 15 x 1.25=18.75
所以看起来我可以稍微调整一下,但没有太大的改善。
我意识到我是在用DA上的时间在UART上写调试消息。我配置了所有这些,并关闭了开发调试模式。现在,将连接间隔max设置为11.25毫秒(如上所述),对于每个20字节的50个数据包,我得到了161毫秒的传输时间。这太好了!