12个职位/ 0个新职位
最后发表
marcodg
离线
最后看到:3年1个月前
加入:2015-01-14 17:58
串流通知请求

我已经将这些论坛搜索了尽可能多的信息,并且我看过了throughput_evalSPS.源代码,我有点熟悉它们并了解他们的程度。他们确实对我来说仍然有点不透明......也许你们都可以在这里幽默。

我不需要超级高吞吐量...> 3k字节/秒。我有一个发生的中断,它会产生6个字节的每2ms。但是我一直无法使用标准的GATT通知机制实现这一点(如果我每4ms生成中断,则我开始丢失数据)。所以我的第一个问题是,对任何人来说似乎是错误的吗?我保留了20个字节数据包的队列来通过GATT通知发送。我在gattc_cmp_evt消息后检查队列,并将计划发送到发送下一个数据包如果可用。系统无法跟上,并且在大约100个数据包之后失败(如果我使队列更大,则在2ms中断时段时的时钟更少)。

所以,假设上面的不起作用,我看了throughput_eval项目。它看起来它使用多种特征(数据似乎并行地写入所有特征)和L2CAP。我很难看看在这里接收数据在这里在这里做什么,因为没有示例。客户是否必须与L2CAP进行互动?不幸的是,我的Windows PC没有任何东西,但Gatt所以我不确定如何协调它。

SPS做了什么我不认为你能做的事情。特征(SPS_SERVER_TX)的大小为128个字符。我不认为你可以通知一个大的对象(当我尝试时,它不起作用)。也许我在这里缺少一些关键方面,但我也无法讲述这里应该是什么吞吐量。

画廊的任何建议都会很有帮助。
谢谢,
马可

关键词:
设备:
MT_dialog
离线
最后看到:5个月3周前
工作人员
加入:2015-06-08 11:34
嗨marcodg,

嗨marcodg,

首先,系统中是否启用了睡眠?你应该能够以这种速率发送数据,如果睡眠是启用的,你可能会丢失数据时,中断是禁用的,你也处理这些数据?你说系统出现故障,会转到硬件故障处理程序吗?还有,你是如何发送通知的?在中断处理程序中填充队列并更新数据库中的值?

不,客户端不需要与l2cap交互。

DSPS项目发送一个mtu交换命令(这允许主机,如果他接受它,接收更大的mtu),如果你愿意,你可以尝试它,但我认为这是你的问题。

由于MT_dialog

marcodg
离线
最后看到:3年1个月前
加入:2015-01-14 17:58
感谢你的回复。

感谢你的回复。未启用睡眠模式。没有处理数据。中断填充队列,如果队列填充一个队列,则它将初始消息发送到流任务,以将队列中的下一个项目发送到队列中的下一个项目。流程任务处理此消息(通过将数据放在数据库中并在正常的事情过程中发送通知。当GATTC_NOTIFY消息来临时,它会检查是否有更多的数据包才能发送,如果是,请发送一条消息以在队列中发送下一个项目。所以它是无限的。填充数据包需要3个中断(18个字节+ 2个字节的状态)。在8ms的中断时期(125Hz,24ms /包)一切都很棒。实际上,队列从未获得超过1个项目。 With an interrupt period of 4ms (12ms/packet) the queue fills up. I get about 100 valid packets received at the client. I fully acknowledge that I may have screwed this machinery up somehow but if I did I don't know where... it's not that complicated.

(注意:从GattC_Notify上删除数据包,以防止传送多个消息/数据包。我有这个问题首先导致队列低于空的......庆幸没有人类或宠物在随后的灾难中受到伤害。)

连接间隔是默认值(我认为7.5或8ms IIRC)。

谢谢,
马可

MT_dialog
离线
最后看到:5个月3周前
工作人员
加入:2015-06-08 11:34
嗨marcodg,

嗨marcodg,

您可以尝试使用ISR的标志....然后在App_Asynch_trm中检查标志,如果设置标志,则将消息发送到流键任务。也许从ISR发送到Streaming任务的消息会导致您面临的概要。您是否可以在连接和发送数据时上传智能播播器图像(当它失败时以及没有)?

由于MT_dialog

marcodg
离线
最后看到:3年1个月前
加入:2015-01-14 17:58
从ISR设置标志

从ISR设置标志并将消息作为主循环的一部分发送似乎没有帮助。我装上了一个显示器,切换了GPIO位。当我把中断速率设置得足够低(< 180hz,每16.7毫秒包)时,从包发送到我收到GATTC_NOTIFY(如果有的话,我可以发送下一个消息)之间的时间大约是800us,偶尔闪光达1.2毫秒。它很稳定。当速率超过195Hz时,范围上就会出现混乱,但我能够测量到,在许多情况下,包发送到GATTC_NOTIFY之间的时间是>55ms。当这些长间隔时间足够长时,队列就会被填满。我将致力于获取Smart Snippets映像(我还没有使用过那个软件)。

(编辑:某些东西似乎是SmartSnippets,因为它找不到ftd2xx.dll。我有Windows 10 ......)

MT_dialog
离线
最后看到:5个月3周前
工作人员
加入:2015-06-08 11:34
嗨Marcodg.

嗨Marcodg.

来自Smart Scippets的图像将有助于,您是否通过等待以前的GattC_Notify CompleteTion事件来触发下一个数据包的发送?
你能尝试在没有等待的情况下发送消息吗?

由于MT_dialog

marcodg
离线
最后看到:3年1个月前
加入:2015-01-14 17:58
谢谢您的回复。我

谢谢您的回复。我将需要一些关于“智能片段”的教练。我有smartsnippets启动(下载驱动程序),并可以下载代码并将其运行。但之后,我并不肯定该怎么办。我在右下方看到“数据速率监视器”,但按下按钮似乎没有效果。我应该注意到我正在使用Pan1740模块。

在其他新闻中,我尝试将MTU大小从23增加到87,认为如果我可以发送更少的包,它就可以工作。虽然它允许我增加频率(高达240Hz),但仍然以同样的方式失败。发送数据包到GATTC_NOTIFY之间的时间非常长,在本例中约为60ms,这比所需的数据包频率更长。

如果我不等待GattC_Notify并在准备就绪时发送数据包,例如,每隔52.8ms对应于87字节MTU(我需要每32ms的数据包),则数据包在源上删除。我在发送的数据包中有一个序列号。值是非连续的。通常只删除一个数据包,但我已经看到了多达两个。

我继续检查代码,以确保我不搞砸。

marcodg
离线
最后看到:3年1个月前
加入:2015-01-14 17:58
还是没找到。我试过了

还是没找到。我尝试使用l2cc(像throughput_eval项目),但在更高的吞吐量率下,在GATT失败的地方附近,设备将进入重置。在较高的中断速率下,GATTC_NOTIFY消息发送时间过长,填充了队列。如果我不等待消息包被丢弃,即使它们仅以每50ms 1个包(87字节MTU)的速度传入。我尝试过改变MTU的大小,但似乎没有任何帮助,除非较大的数据包表现稍微好一些。

我修改了代码,这样ISR本身就不会发生实际的处理。kermel消息作为app_asynch_trm()函数的一部分发送。

gattc_notify需要很长时间的事实是一个谜,因为在较低的中断速率下,发送/等待过程只是几个ms。

MT_dialog
离线
最后看到:5个月3周前
工作人员
加入:2015-06-08 11:34
嗨marcdg,

嗨marcdg,

你能发给我们一些智能片段活动,也许我们可以看看并找到一些东西。

由于MT_dialog

marcodg
离线
最后看到:3年1个月前
加入:2015-01-14 17:58
我无法聪明

我无法让智能片段工作。这个设备是松下1740。我定义了CFG_STREAMDATA和METRICS。我可以下载代码到设备(jlink),但数据采集器只支持com端口。通常“启动外围设备”按钮没有效果,其余时间它会显示一个错误。

marcodg
离线
最后看到:3年1个月前
加入:2015-01-14 17:58
我想我找到问题了。

我想我找到问题了。使用wireshark,我可以从客户端(一台运行Windows 10的PC机)追踪对话。我可以看到PC在每个L2CAP片段后用空PMU包做出响应。有时响应时间太长,迫使数据备份到我的设备上。我不是BLE专家,你能确认下一个传输包之前需要客户端的响应(以空PMU的形式)吗?

谢谢
马可

MT_dialog
离线
最后看到:5个月3周前
工作人员
加入:2015-06-08 11:34
嗨marcodg,

嗨marcodg,

我们无法从您上传的日志中讲述(在您的其他帖子中,我假设您正在检查相同的情况),因为某些数据包似乎丢失。通常,主机在每个连接间隔中调用设备,其中包含空的PMU或数据包(如果需要发送某些东西)。通过这些数据包,主机能够确认已接收到设备发送的先前数据包,并执行某种流量控制。如果数据包未确认,则它必须衷心。换句话说,如果主机明确地没有确认数据包,则设备无法发送另一个,直到最终从主机确认该数据包。这样,主机可以阻止设备发送更多数据包。但是,无论如何,主机始终轮询设备!因此,您报告的是,主机摊位在发送空的民意调查包中是一个问题,如果它确实发生并且不是由嗅探器产生的,那似乎不是非常可靠的。

由于MT_dialog