同时连接两个外设

16个职位/ 0个新职位
最后发表
匿名(未验证)
同时连接两个外设

亲爱的所有,
你好,
我想从一个中心同时连接两个外设。我可以连接到一个外设,同时扫描其他模块。然而,在检测到另一个后,我不能连接到那个。任何建议都很感谢。
谢谢你

设备:
雷扎。yazdani67(未验证)
没人知道!?

没人知道!?

lyncxy119
离线
最后看到:2年1个月前
加入:2015-05-14 03:23
嗨,也许是BD地址

你好,也许BD地址不应该都一样。

雷扎。yazdani67(未验证)
谢谢,我用的是不同的BD

谢谢,我用的是不同的BD地址,但是我还是不能同时连接两个外设。我必须断开其中一个连接到另一个。
正如Dialog所说,我可以同时连接6个外设。然而,我连其中的两个都连接不上。
有人能帮忙吗?当我想发送start_connection命令时,我应该改变任何参数吗?

雷扎。yazdani67(未验证)
我设置的参数

我为开始连接命令设置的参数如下:
味精- > nb_peers = 5;
memcpy(味精- >[0]。addr, &connect_bdaddr device_num, BD_ADDR_LEN);
味精- > con_intv_min = 10;
味精- > con_intv_max = 10;
味精- > ce_len_min = 32;
味精- > ce_len_max = 32;
味精- > con_latency = 0;
味精- > op。addr_src = GAPM_PUBLIC_ADDR;
味精- >[0]。addr_type = GAPM_PUBLIC_ADDR;
味精- > superv_to = 100;
味精- > scan_interval = 384;
味精- > scan_window = 352;
味精- > op。代码= GAPM_CONNECTION_DIRECT;

雷扎。yazdani67(未验证)
对话框中,

对话框中,
你好,
你能给我一些建议吗?
是否有样例代码可以麻烦你转发给我?
我的电子邮件是reza.yazdani1367@gmail.com
谢谢你!

Joacimwe
离线
最后看到:1年7个月前
大师
加入:2014-01-14 06:45
Nb_peers应设置为1

对于直接连接,Nb_peers应设置为1(而不是5)。您确定正确地分配了大小正确的消息对象吗?

您还必须更改da14580_config.h中的#定义,以指定您希望同时支持的最大外围设备数量。

雷扎。yazdani67(未验证)
谢谢Joacimwe。

谢谢Joacimwe。
我改变了同伴的数量(nb_peers),基于一些来自对话人员(名为RvA)的建议,我在以下链接中看到:
http://support.dialog-semiconductor.com/connection-multiple-peripherals
我使用的消息分配就像在dsps应用程序中使用的一样:
KE_MSG_ALLOC(gapm_start_connection_cmd, TASK_GAPM, TASK_APP, gapm_start_connection_cmd);
我增加da14580_config.h中同时存在的外围设备(BLE_CONNECTION_MAX_USER)的数量是否足够?或者我应该改变其他参数!?
我会按照你说的做改动,并尽快让你知道结果。我真的很感谢你的帮助,谢谢。

雷扎。yazdani67(未验证)
我觉得我做了所有的改变

我做了所有我认为需要的改变让两个外设同时连接到一个中央。我还使用UM-B-011 DA14580 MemoryMapTool来纠正da14580_config.h中的内存映射。但是没有任何结果!我不知道我还能做什么。
我应该一个接一个地连接所有的外围设备,这是正确的吗?
有人可以帮忙吗?
对话,你能给我一些建议吗?

Joacimwe
离线
最后看到:1年7个月前
大师
加入:2014-01-14 06:45
可变长度的消息

可变长度的消息(在本例中是对等体的数量)必须像这样用KE_MSG_ALLOC_DYN分配:
KE_MSG_ALLOC_DYN(GAPM_START_CONNECTION_CMD, TASK_GAPM, TASK_APP, GAPM_START_CONNECTION_CMD, nb_peers)

如上所述的http://support.dialog-semiconductor.com/resource/gap-interface-specifica..。,对于GAPM_CONNECTION_DIRECT, nb_peers应该是1。

如果您同时设置BLE_CONNECTION_MAX_USER,这就足够了。只要确保您发起两次直接连接,第一次是为第一个外设(其mac地址放入msg->gap_bdaddr[0]),然后是到第二个外设(其mac地址放入msg->gap_bdaddr[0])。请注意,您必须等到第一个连接完成后才能开始第二个连接。(等到GAPM_CMP_EVT)。其他BLE芯片支持多个同时挂起的连接,但DA14580似乎不这样做。相反,您可以扫描多个外设,并在感兴趣的外设出现时立即启动一个直接连接(但如果您不能在30秒内连接,则可能需要为这个直接连接设置一个超时,然后返回扫描)。

雷扎。yazdani67(未验证)
谢谢你的帮助。

谢谢你的帮助。
最后,我将两个模块连接到一个中央。
我认为问题在于我没有等到连接完成,而是在接收到GAPC_CONNECTION_REQ_IN后启动了下一个连接。但是,正如您所说的,我应该在接收到GAPM_CMP_EVT之后启动下一个连接。我非常感谢你的建议。
我还有另一个问题,我必须等待BLE中心可以连接到第二个外围模块的时间。因为我已经测试过几次了,我无法测量一个可预测的时间。所以,我很担心如何设置这个时间。如果我从一个中心连接到两个模块,我应该定义两个单独的配置文件来处理它们中的每个!
感谢您的体谅。

Joacimwe
离线
最后看到:1年7个月前
大师
加入:2014-01-14 06:45
你应该可以

一旦您接收到GAPM_CMP_EVT(将操作参数设置为GAPM_CONNECTION_DIRECT),您应该能够立即连接到第二个外设,因此在连接到下一个外设之前不需要增加一些延迟。GAPM_CMP_EVT消息通常在GAPC_CONNECTION_REQ_IND之后立即发送。
请注意,在模板项目中TASK_APP的“状态”(idle, advertising, connected,…),当你有多个外围设备处于中央模式时,它是没有意义的。相反,您应该以某种方式跟踪以其他方式连接的每个外围设备。

雷扎。yazdani67(未验证)
谢谢你的建议。

谢谢你的建议。
我正在按你说的做,但是我在连接到第一个设备后不能立即连接到第二个设备。
我认为这可能是因为启用了sps配置文件和从第一个连接的设备接收通知事件,我不能立即有第二个连接。所以,我改变了程序,以一种方式,档案启用后,第二次连接。然而,我无法连接到第二个设备没有不可预知的延迟!!
你知道我怎样才能减少延迟或至少有一个可预测的延迟吗?

Joacimwe
离线
最后看到:1年7个月前
大师
加入:2014-01-14 06:45
我以前没见过这个。我

我以前没见过这个。我可以直接连接到第二个GAPM_CMP_EVT之后…
会发生什么呢?您得到的是带有非零状态码的GAPM_CMP_EVT还是什么都没有发生?
你能看到使用智能片段电流测量看到发生了什么吗?

尝试增加连接间隔,减少扫描窗口/间隔,这样da14580在扫描第二个外设时不会忙于处理第一个外设的连接事件。

雷扎。yazdani67(未验证)
谢谢,我会检查的

谢谢,我也会检查这个解决方案。
我认为什么也不会发生,因为我使用了一个串行监控程序来查看应用程序何时以及为什么要转到GAPM_CMP_EVT的处理程序。不过,我会再检查一遍,看看我是否遗漏了什么!
非常感谢你的帮助。

雷扎。yazdani67(未验证)
终于,我找到了

最后,我发现什么问题,我不能连接到第二个设备后,就连接到第一个。
它只是关于在app_connect函数中设置的一些参数!如果我改变参数设置如下,并将其他参数设置为默认值,所有事情都能正常工作,没有不可预知的延迟发生!

KE_MSG_ALLOC_DYN(gapm_start_connection_cmd, TASK_GAPM, TASK_APP,
gapm_start_connection_cmd, sizeof (struct gap_bdaddr));
味精- > nb_peers = 1;
memcpy(味精- >[0]。addr, connect_bdaddr(指数)。addr, BD_ADDR_LEN);
味精- > con_intv_min = APP_CON_INTV_MIN;
味精- > con_intv_max = APP_CON_INTV_MAX;
味精- > op。addr_src = GAPM_PUBLIC_ADDR;
味精- >[0]。addr_type = GAPM_PUBLIC_ADDR;
味精- > superv_to = APP_CON_SUPERV_TO;
味精- > scan_interval = APP_CON_SCAN_INTERVAL;
味精- > scan_window = APP_CON_SCAN_WINDOW;
味精- > op。代码= GAPM_CONNECTION_DIRECT;

主题锁定