你好对话框,
我在我的早期线程中问了这一点,但它被标记为解决,可能没有被重新预订 - 我正在使用DA14580使用SPS配置文件,并尝试每80毫秒使用它来接收20个字节。DA从主UC获取UART上的数据,并将其发送到显示数据的便携式设备。我所拥有的问题是我的便携式接收到大小不一致的数据分组 - 有时数据包根据需要具有20个字节,但其他时间单个20字节传输为两个数据包或数据是20字节宽,但是移位。
我在持续时间〜2 ms的持续时间内发送20个字节,因此在下一个数据周期出现之前应该有足够的时间来接收数据并将其发送。
我需要数据包是相同的大小,因为我的便携式的应用程序希望它们保持一致。你知道什么可能导致这个问题吗?
谢谢,
svl0822

你好,你在使用HW流量控制吗?哪个设备被配置为中心(我假设是通过UART从主机MCU获取日期的设备)?
谢谢Je_Dialog.
你好JE_Dialog,
我不使用HW流量控制。我假设这不是必要的,因为我得到了我发送的所有字节(通过ble),但是有什么不同它们进入的数据包大小。
我正在使用DA14580上的“设备”SPS项目。Central是我的主芯片,DA14580只是充当蓝牙串行接口。
svl0822
嗨svl0822,
您正在观察对话串行端口服务的预期行为。串行端口链接与UART是完全异步的,包的完整性没有得到保证,这肯定不是有意的。DSPS实现是针对流数据进行优化的,并不适合您的应用程序。
从您的描述中,您实际上尝试发送离散数据包 - 这正是如何智能智能。您应该使用20byte大小的特征实现自定义服务。每次您有20个字节准备好BT传输,您都应该继续并将其加载到特征(在GATT数据库中)。SmartDevice(平板电脑/智能手机)实现如此简单,并确保了数据包完整性。您将使用GATT通知,以确保每次更新数据时都会向SmartDevice发送到SmartDevice。
如果您需要实现自定义服务的更多信息,请告诉我。它并不像听起来那么可怕,而且就您所描述的用例而言,它肯定更适合您。代码占用也会小很多。
mhv_dialog,
谢谢你的详细说明。你描述的声音就像它一样。
是否有任何关于实施自定义服务的文档?我看了软件开发指南,但它没有详细说明这一点。
我是否可以使用SPS服务并只需在“SPS_SERVER_TASK.C”文件中添加新特征?此外,当你说“20字节宽特征”时,你的意思是拥有称为“大小”的属性,这将具有长度20?我正在查看TX数据特征的声明,它有固定长度的属性,因此我没有看到可变性来自的地方。你能为我解释这个吗?
谢谢您的耐心等待。我是BLE编程的新手,对基本知识没有把握。
嗨,也许您应该参考Sample128或Spotar服务。
你好,我正面临着同样的情况,与一个发送/接收13字节数据包的微通信。在两个方向上,对于单个包的情况下,一切都工作得很好,但最终事情会崩溃,当只有一部分包被放入UART到BLE缓冲区时,我正在接收通知。如果有一种简单的方法可以挂起通知,直到UART接收到完整的13个字节,那么就可以解决这个问题。TX_WAIT_LEVEL似乎建议这样做,但它被注释为//3包(20 + 2*27),没有进一步解释。你知道这是正确的方法吗?
嗨Klim,我可以在高层问你试图如何实现什么?DSP专为纯流应用而设计:保留数据包完整性的方式没有任何东西 - 它只是填充缓冲区并传输。我只是想知道是否有一种更简单的方法,可以帮助,就像使用AN-B-029建立简单的自定义配置文件以满足您的需求。如果DSP是去的方式,我们可以看看你关于添加TX_WAIT_LEVEL的问题(它不是我们尚未尝试过的SOMING)。BR JE_DIALOG.
嗨je_dialog,
我的解决方案是继续流流数据,而是在应用程序中拆卸/组装数据包。
我在数据包中包含一个超时处理程序,使得如果给定的数据包花费太长以组装,则我*假设*存在维护BLE连接的问题。
在这种情况下,我重新尝试发送/接收数据包,最终将失败到“通信丢失”异常处理程序。
到目前为止,如果稍后,我需要做出更多更改,那么我会在这里发布。
干杯,klim
嗨Klim,谢谢你让我们知道它适合你...赞扬的反馈,Br Je_Dialog