你好,
我尝试使用DA14681作为源,DA14580作为接收器来实现一个流应用程序。DA14681为中心角色,DA14580为外围角色。两端都不能睡觉。
最终目标是将数据以约35kbps的数据速率传输到两个外围设备。我们已经在核心角色中成功完成了DA14580。由于各种原因,我们想在其位置使用DA14681。
虽然MTU和特性长度已经增加到325,而且流量控制目前还未使用,但该结构本质上是串行端口服务的结构。连接间隔为40ms,从时延设置为0。因此,在每个连接事件中,我们平均需要传输177个字节,其中包括一个2字节的头。
在DA14681上,我已经通过ble_event_notif_enable_end_event()为BLE_EVENTEND启用了通知。在每次调用时,数据被添加到一个环形缓冲区中——前提是它之前已经清空。在任务的'main'循环中调用一个传输例程,它检查数据和前一次写的成功完成,然后执行ble_gattc_write_no_resp()并设置tx_busy标志。当捕获到BLE_EVT_GATTC_WRITE_COMPLETED事件时,tx_busy标志被清除,从而允许进行下一次写操作。
我看到的问题是,每个连接间隔传输的数据不超过73字节。在较高的有效负载大小下,在实际传输数据之前需要几个Connection Events。在177字节的预期大小下,传输一个包需要超过4个CIs。
不清楚我错过了什么。任何帮助都将不胜感激。同样,我们在两端都使用DA14580,因此它在外围端似乎不是问题。
作为次要问题,是否可以在DA14580上实现L2CAP COC?如果是这样,是否有任何代码?
谢谢,
Sandeep
------------
设备:
嗨Sandeep Sira,
由于580不支持包长度扩展或coc,我假设您的应用程序只使用MTU交换方案来交换数据。
设备在连接间隔期间发送的数据量取决于中央允许外围设备发送的数据包,因此检查数据事务时是否交换了多少个数据包?(两端都发生在每个连接间隔中的73个字节的量,我假设由于您正在谈论通知,因此在外围设备发送数据时发生这种情况。事实上,在每个连接间隔中只看到73个字节的事实似乎有点奇怪,因为如果有MTU Exchange,则允许说3包然后应该转移的字节量应该是:每个通知包都适合27字节,第一个数据包将包括特定特性的ATT标题,并且L2CAP头和其余20个字节是有效载荷所以在3个数据包中,清洁有效载荷的量为20 + 27 + 27 = 74字节(其余分组具有27个有效载荷由于使用MTU Exchange,您可以保存数据包中的ATT和L2CAP头信息)。因此,即使堆栈不允许超过3个数据包信息的数量也应该是大约74个字节而不是73.现在,将发送多少个数据包,其一个中央的问题(这不是由SW控制的但是从堆栈)通常,连接间隔期间的数据包数量超过3,我认为在中央有一个配置指示中央的配置将保持每个事件连接它具有CE_MIN和CE_MAX,因此可能使用这些值强制您的中心限制在连接间隔期间可以接收的数据包量。
谢谢mt_dialog.
MT_Dialog,
谢谢你的详细回答。在ble_config.h中ce_min默认设置为0。将其更改为20(12.5毫秒),这是DA14580的默认值,解决了这个问题。
当然,提出了另一个问题。为什么CE_MIN的改变相关?似乎CE_MAX是控制参数。
Sandeep
-------------
嗨Sandeep Sira,
ce_min和ce_max这两个值都是相关的,尽管这些值提供了预期的连接事件的最小和最大长度,但中央基于这些值决定了中央将保持连接事件活动的实际时间。所以我认为两个值都应该声明,以使中央意识到如何分配时间时,应该维护多个连接,并以节省电力。将最小值更改为特定默认值的事实迫使中央服务器保持清醒更长的时间,以便侦听外围服务器的额外数据。
谢谢mt_dialog.
你好,对话框专家。
我想知道是否可以使用DA14681作为中心设备来收集广告数据?
一段时间后,使用USB CDC发送该数据。USB CDC我已经检查过,它正在工作。
收集广告数据怎么样?
嗨,斯巴达,
您能否澄清您的问题,以便了解您的要求是什么?从你提到的我可以正确理解,你想要一个中央DA14681与一个DA14681外设相连,这样外设就可以向中央发送数据,对吗?这是可能的,我们对此范围有一个参考设计,命名为DSPS。请查看下面的链接:
//www.wsdof.com/雷电竞官网登录products/dialog-serial-port-service-dsps
如果你的意思是其他的,请澄清你的问题/我建议你为你的问题创建一个新的论坛线程。如果你不知道创建一个新的论坛线程的程序,请让我知道,我会给你提供适当的指导方针。
谢谢,PM_DIALOG.