SPS数据包大小不一致

10个职位/0个新职位
最后一篇文章
svl0822型
离线
最后一次见到:5年7个月前
已加入:2014-11-17 19:20
SPS数据包大小不一致

你好Dialog,

我在我以前的一个线程中问过这个问题,但它被标记为已解决,可能没有被重新访问-我正在使用带有SPS配置文件的DA14580,并尝试使用它每80ms中继20个字节。DA通过UART从主uC获取数据,并将其发送到显示数据的便携式设备。我遇到的问题是,我的便携设备接收到的数据包大小不一致——有时数据包有20个字节,但有时单个20字节的传输是两个数据包,或者数据是20个字节宽,但有移位。

我通过UART发送20个字节,持续时间约为2ms,因此在下一个数据周期到来之前,DA应该有足够的时间接收数据并将其发送出去。

我需要数据包始终保持相同的大小,因为我的便携应用程序希望它们保持一致。你知道是什么导致了这个问题吗?

谢谢您,
svl0822型

JE\U对话框
离线
最后一次见到:5天14小时前
工作人员
已加入:2013-12-05 14:02
你好,你在用硬件吗

你好,你在用硬件流量控制吗?哪个设备被配置为中央设备(我假设是通过UART从主机MCU获取数据的设备)?

谢谢你的对话

svl0822型
离线
最后一次见到:5年7个月前
已加入:2014-11-17 19:20
你好,我的对话,

你好,我的对话,

我没有使用硬件流量控制。我认为这是没有必要的,因为我得到了我发送的所有字节(通过BLE),但不同的是它们进入的数据包大小。
我正在DA14580上使用“设备”SPS项目。中央是我的主芯片,DA14580只作为蓝牙串行接口。

svl0822型

MHv\U对话框
离线
最后一次见到:6天10小时前
工作人员
已加入:2013-12-06 15:10
你好,svl0822,

你好,svl0822,

您正在观察对话框串行端口服务的预期行为。串行端口链路与UART完全异步,数据包完整性得不到保证,这当然不是有意的。DSPS实现针对流数据进行了优化,并不适合您的应用程序。

根据您的描述,您实际上是在尝试发送离散数据包—这正是BT Smart的初衷。您应该实现一个具有20字节大小特征的定制服务。每次你有20个字节准备好进行BT传输时,你应该继续并将它们加载到characteristic(GATT数据库)中。通过这种方式,smartdevice(平板电脑/智能手机)的实现要简单得多,而且数据包的完整性也得到了保证。您可以使用GATT Notify来确保每次更新数据时都会将20字节的数据块发送到smartdevice。

如果您需要有关实现自定义服务的更多信息,请告诉我。它并不像听起来那么可怕,而且它肯定更适合您所描述的用例。代码占用也会小得多。

svl0822型
离线
最后一次见到:5年7个月前
已加入:2014-11-17 19:20
MHv\U对话框,

MHv\U对话框,

谢谢你的详细解释。你所描述的听起来好像有用。
有关于实现定制服务的文档吗?我看了《软件开发指南》,但没有详细介绍。

我是否可以使用SPS服务并在“SPS\u server\u task.c”文件中添加一个新特性?另外,当你说“20字节宽特征”时,你的意思是有一个名为“size”的属性,它的长度为20?我正在查看TX数据特性的声明,它具有固定长度的属性,因此我看不到可变性来自何处。你能给我解释一下吗?

谢谢你的耐心。我是一个新的BLE编程和不确定的基础知识。

夏季20100514
离线
最后一次见到:4年2个月前
上师
已加入:2014-12-30 05:01
嗨,也许你应该参考一下

嗨,也许你应该参考sample128或spotar服务。

克里姆9531
离线
最后一次见到:4年2个月前
已加入:2015-01-28 23:52
你好,我正面临同样的问题

你好,我也面临同样的情况,与一个发送/接收13字节数据包的micro通信。在两个方向上,对于单个数据包来说,一切都很好,但最终事情会分崩离析,当只有部分数据包被放入UART-to-BLE缓冲区时,我会收到通知。如果有一种简单的方法来暂停notify,直到在UART上接收到完整的13个字节,那么问题就解决了。TX\u WAIT\u LEVEL似乎暗示了这一点,但它被注释为//3个数据包(20+2*27),没有进一步的解释。你知道这是不是正确的方法吗?

JE\U对话框
离线
最后一次见到:5天14小时前
工作人员
已加入:2013-12-05 14:02
嗨,克里姆,我能在一个很高的时候问你吗

嗨,克里姆,我能从高层次上问一下你想做什么吗?DSP是为纯流应用而设计的:没有任何东西可以保护数据包的完整性——它只是填充缓冲区并传输数据。我只是想知道是否有一个更简单的方法,可能会有所帮助,如使用AN-B-029建立一个简单的自定义配置文件,以满足您的需要。如果DSPS是一种方式,我们可以看看您关于添加TX\u WAIT\u级别的问题(这不是我们尝试过的东西)。BR JE\u对话框

克里姆9531
离线
最后一次见到:4年2个月前
已加入:2015-01-28 23:52
嗨,我的对话,

嗨,我的对话,

我的解决方案是继续流式传输数据,但在应用程序中我分解/组装数据包。

我在数据包重组中包含了一个超时处理程序,因此如果给定的数据包花费太长时间来组装,那么我*假设*维护BLE连接时出现了问题。

在这种情况下,我重新尝试发送/接收数据包,最终失败到“通信丢失”异常处理程序。

到目前为止效果不错,如果以后我需要做更多的修改,我会把它们贴在这里。

干杯,--克里姆

JE\U对话框
离线
最后一次见到:5天14小时前
工作人员
已加入:2013-12-05 14:02
嗨,克里姆,谢谢你让我

嗨,克里姆,谢谢你让我们知道这对你很好。。。查看反馈,BR JE\u对话框