你好
我正在尝试使用DA14681作为源,DA14580作为接收器来实现一个流应用程序。DA14681起中心作用,DA14580起外围作用。两端都禁用睡眠。
最终的目标是将数据以大约35kbps的速率传输到两个外设。我们已经成功地将DA14580作为中心角色。由于各种原因,我们希望使用DA14681代替它。
虽然MTU和特征长度已增加至325,且流量控制目前未使用,但结构基本上是串行端口服务的结构。连接间隔为40毫秒,从属延迟设置为0。因此,在每个连接事件中,我们平均需要传输177个字节,其中包括一个2字节的报头。
在DA14681上,我已经通过BLE_event_notif_enable_end_event()为BLE_EVENTEND启用了通知。每次调用时,数据都会被添加到一个环形缓冲区中——前提是它以前是清空的。在任务的“主”循环中,调用传输例程,该例程检查数据和上一次写入的成功完成情况,然后执行ble_gattc_write_no_resp(),并设置tx_busy标志。捕获BLE_EVT_GATTC_WRITE_COMPLETED事件时,tx_busy标志被清除,从而允许进行下一次写入。
我看到的问题是,每个连接间隔传输的数据不超过73字节。在更高的有效负载大小下,在实际传输数据之前需要几个连接事件。在177字节的理想大小下,传输一个数据包需要4个以上的CI。
不清楚我错过了什么。任何帮助都将不胜感激。同样,我们在两端都使用了DA14580,因此外围端似乎没有问题。
第二个问题是,DA14580上是否可能实现L2CAP coc ?如果有,是否有这样的代码?
谢谢,
桑迪普
------------
设备:
嗨Sandeep Sira,
由于580不支持数据包长度扩展或CoCs,我假设您的应用程序仅使用MTU交换方案来交换数据。
设备在连接间隔期间发送的数据量取决于中央允许外设发送的数据包,所以检查有数据交易时交换了多少数据包?(每个连接间隔中73字节的数量发生在两端,我假设由于您在谈论通知,这发生在外围设备发送数据时)。事实上,你在每个连接间隔中只看到73字节似乎有点奇怪,因为使用MTU交换,如果有,假设有3个包,那么应该被传输的字节的数量应该是:每个通知包适合27个字节,第一个数据包将包括ATT头的具体特点和L2CAP头,其余20字节负载在三包清洁有效负载的数量是20 + 27 + 27 = 74字节(其余的数据包有27载荷与MTU自您保存攻击力和L2CAP头信息交换的数据包)。因此,即使堆栈不允许超过3个包的信息量应该大约74字节,而不是73。现在,有多少数据包将被发送,这是中央的问题(这不是由sw控制,但从堆栈)通常情况下,数据包的数量在一个连接间隔是相当多的3个,我认为你有,所以,在中央有一个配置,指示中央将为每个具有ce_min和ce_max的连接保留多长时间的事件,因此这些值可能会迫使中央限制在连接间隔期间它可以接收的包的数量。
由于MT_dialog
MT_对话,
谢谢你详细的回答。在ble_config.h中,ce_min默认设置为0。将其更改为20(12.5毫秒),这是DA14580中的默认值,解决了该问题。
当然,这又引出了另一个问题。为什么ce_min的更改是相关的?看起来ce_max是控制参数。
桑迪普
-------------
嗨Sandeep Sira,
ce_min和ce_max这两个值都是相关的,根据这些值,central将决定central保持连接事件活动的实际时间,尽管这些值具有信息性,但它们提供了连接事件的预期最小和最大长度。因此,我认为这两个值都应该声明,以便中央能够知道如何分配时间来维护多个连接,并节省电源。您已将最小值更改为特定默认值,这一事实迫使中央处理器保持更长时间的清醒状态,以便侦听外围设备以获取更多数据。
由于MT_dialog
你好,对话专家。
我需要知道是否可以使用DA14681作为中央设备并收集广告数据?
一段时间后,发送数据使用usb cdc。Usb cdc我已经检查过了,它正在工作。
收集广告数据怎么样?
嗨,斯巴达,
请澄清您的问题,以便了解您的要求是什么?正如我能够从您提到的内容中正确理解的那样,您希望中央DA14681与DA14681外围设备连接,因此外围设备将向中央发送数据,对吗?这是可能的,我们有一个用于此范围的参考设计,名为DSP。请查看以下链接:
//www.wsdof.com/雷电竞官网登录products/dialog-serial-port-service-dsps
如果你的意思是其他,请澄清你的问题/我建议你为你的问题创建一个新的论坛线程。如果您不知道创建新论坛线程的步骤,请让我知道,我将为您提供适当的指导。
谢谢,PM_Dialog