你好,
我正在尝试使用DA14681作为源和DA14580作为接收器实现流频率。DA14681处于中心作用,DA14580处于外围作用。两端禁用睡眠。
最终目标是将数据以约35kbps的数据速率传输到两个外围设备。我们已经在核心角色中成功完成了DA14580。由于各种原因,我们想在其位置使用DA14681。
该结构本质上是串行端口服务的,尽管MTU和特征长度已被增加到325并且流量控制当前未使用。连接间隔是40ms,并且从等待时间设置为0.因此,在每个连接事件中,我们需要平均传输177个字节,其包括2字节标题。
在DA14681上,我已经启用了通过BLE_EVENT_NOTIF_ENABLE_END_NOTIF_ENABLE_END_NOTED()的通知。在每个呼叫中,数据被添加到环形缓冲区 - 提供它以前被清空。在“主要”循环中,任务的发送例程称为数据检查数据并成功完成上一个写入,然后执行BLE_GATTC_WRITE_NO_RESP()并设置TX_BUSY标志。当BLE_EVT_GATTC_WRITE_CHOMPLETED事件被捕获时,将清除TX_BUSY标志,从而允许下一步写入。
我看到的问题是,每个连接间隔不超过大约73个字节的数据。在较高的有效载荷大小处,在实际传输数据之前需要多个连接事件。在177字节的所需大小,传输一个数据包需要4个以上。
我错过了什么。任何帮助,将不胜感激。同样,我们将此与两端的DA14580一起使用,因此在外围端似乎不是问题。
作为次要问题,是否可以在DA14580上实现L2CAP COC?如果是这样,是否有任何代码?
谢谢,
sand
-------------
设备:
嗨Sandeep Sira,
由于580不支持数据包长度扩展或COC,我假设应用程序仅使用MTU Exchange方案来交换数据。
设备在连接间隔期间发送的数据量取决于中央允许外围设备发送的数据包,因此检查数据事务时是否交换了多少个数据包?(两端都发生在每个连接间隔中的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,
谢谢你的详细答案。ce_min默认设置为ble_config.h中的0。将其更改为20(12.5毫秒),这是DA14580中的默认值,解决了问题。
当然,提出了另一个问题。为什么CE_MIN的改变相关?似乎CE_MAX是控制参数。
sand
-------------
嗨Sandeep Sira,
这两个值CE_min和CE_MAX都是相关的,基于中央的值决定中央将保持连接事件的实际时间,尽管值是信息,但它们提供了连接事件的预期最小和最大长度。所以我想应该声明这两个值,以便核心要注意应如何在应维持多个连接的时间并才能节省电量时分配时间。事实上,您已将最小值更改为特定默认的默认值,从而延长了中央保持清醒,以便收听外围设备以获取其他数据。
谢谢mt_dialog.
您好,对话专家。
我需要知道是否有可能使用DA14681作为中央设备并收集广告数据?
一段时间后,使用USB CDC发送该数据。USB CDC我已经检查过,它正在工作。
如何收集广告数据?
嗨斯巴达,
您可以澄清您的问题,以了解您的要求是吗?正如我所提到的那样正确理解的那样,您希望拥有一个与DA14681外设连接的中央DA14681,因此外设将向中央发送数据,这是正确的吗?这是可能的,并且我们有一个参考设计,用于这个范围,名为DSP。请检查以下链接:
https://www.dialog-seminile.com/produ雷电竞官网登录cts/dialog-serial-port-service-dsps.
如果你的意思是别的东西,请澄清你的问题/我会恳求你为你的问题创建一个新的论坛主题。如果您不知道创建新论坛线程的过程,请告诉我,我将为您提供适当的指导方针。
谢谢,PM_DIALOG.