你好,对话框,
我在我的一个早期线程中问过这个问题,但它被标记为已解决,可能没有被重新访问-我正在使用DA14580与SPS配置文件,并试图使用to每80ms中继20字节。DA通过UART从主uC获取数据,并将其发送到显示数据的便携式设备。我的问题是,我的便携式接收的数据包大小不一致-有时数据包有20个字节,但其他时间单20字节传输来作为两个数据包或数据是20字节宽,但移位。
我在大约2毫秒的时间内通过UART发送20个字节,因此DA应该有足够的时间接收数据并在下一个数据周期到来之前将其发送出去。
我需要数据包总是相同的大小,因为我的便携式应用程序期望它们是一致的。你知道是什么导致了这个问题吗?
谢谢你!
svl0822
你好,你在使用HW流量控制吗?哪个设备被配置为中心(我假设是通过UART从主机MCU获取日期的设备)?
由于JE_Dialog
你好JE_Dialog,
我没有使用HW流量控制。我假设这是没有必要的,因为我得到了我发送的所有字节(通过BLE),但变化的是它们进入的数据包大小。
我正在DA14580上使用“device”SPS项目。中央是我的主芯片,DA14580只是作为蓝牙串行接口。
svl0822
嗨svl0822,
您正在观察对话串行端口服务的预期行为。串行端口链接与UART是完全异步的,包的完整性没有得到保证,这肯定不是有意的。DSPS实现是针对流数据进行优化的,并不适合您的应用程序。
从你的描述来看,你实际上是在试图发送离散的数据包——这正是BT Smart的初衷。您应该实现一个具有20字节大小特征的自定义服务。每次您有20个字节准备好进行BT传输时,您应该继续并将它们装入特征(在GATT数据库中)。通过这种方式,智能设备(平板电脑/智能手机)的实现要简单得多,而且包的完整性得到了保证。您可以使用GATT Notify来确保在每次更新数据时将20字节的数据块发送到智能设备。
如果您需要实现自定义服务的更多信息,请告诉我。它并不像听起来那么可怕,而且就您所描述的用例而言,它肯定更适合您。代码占用也会小很多。
MHv_Dialog,
谢谢你的详细解释。你描述的听起来是可行的。
是否有关于实现自定义服务的文档?我查看了软件开发指南,但它没有详细说明这一点。
我是否可以使用SPS服务,在“sps_server_task.c”文件中添加一个新特性?另外,当您说“20字节宽特性”时,您的意思是拥有一个长度为20的名为“size”的属性吗?我正在查看TX数据特性的声明,它具有固定长度的属性,所以我不知道可变性来自哪里。你能给我解释一下吗?
谢谢您的耐心等待。我是BLE编程的新手,对基本知识没有把握。
嗨,也许你应该参考一下sample128或spotar服务。
你好,我正面临着同样的情况,与一个发送/接收13字节数据包的微通信。在两个方向上,对于单个包的情况下,一切都工作得很好,但最终事情会崩溃,当只有一部分包被放入UART到BLE缓冲区时,我正在接收通知。如果有一种简单的方法可以挂起通知,直到UART接收到完整的13个字节,那么就可以解决这个问题。TX_WAIT_LEVEL似乎建议这样做,但它被注释为//3包(20 + 2*27),没有进一步解释。你知道这是正确的方法吗?
你好klim,我能问你一个高层次的问题吗?DSPS是为一个纯粹的流应用而设计的:没有任何东西以保持包的完整性-它只是填充缓冲区和传输。我想知道是否有一种更简单的方法可能会有帮助,比如使用AN-B-029构建一个简单的自定义配置文件来满足您的需求。如果DSPS是可行的,我们可以看看您关于添加TX_WAIT_LEVEL的问题(我们还没有尝试过这个方法)。BR JE_Dialog
嗨JE_Dialog,
我的解决方案是继续流数据,但在应用程序中我分解/组装数据包。
我在包重新组装时包含了一个超时处理程序,因此如果给定的包花费了太长的时间来组装,那么我*假设*在维护BLE连接时存在问题。
在这种情况下,我重新尝试发送/接收数据包,最终失败到“通信丢失”异常处理程序。
到目前为止工作得很好,如果以后我需要做更多的改变,我会在这里发布。
干杯,klim
Klim你好,谢谢你告诉我们你做得很好…感谢你的反馈,BR JE_DIalog