TI中文支持网
TI专业的中文技术问题搜集分享网站

如何实现2540的一对多连接(5至8个从机发数据、1个主机接受数据)

TI的技术大牛们,

我最近在研究BLE协议栈1.3.2的一对多连接应用:5至8个从机将自己的sensor的状态发出来,1个主机接受数据汇总。

1.CC2540可以建立一对多连接吗?

2.如果采用每次1对1连接,是不是需要让主机接受到一个从机的数据后,主机和从机都主动断开此次1对1连接,以便主机再次scan其他从机?那么stack中在哪里能够控制主机、从机在connected状态下,主动断开连接?

谢谢!

HG:

CC2540可以一对多,但是5-8个么就很困难了。看看CC2640怎么样,BLE4.1协议栈,支持multi role,有demo

http://processors.wiki.ti.com/index.php/Cc2640_MultiRole_Demo

Longyu Chen:

回复 HG:

Hi Holly,

谢谢你的回复,那么我想试试在2540上实现connected状态下,从机和主机主动断开连接的功能。

请问有语句能实现吗?

比如如下语句可以控制从机是否广播(未connected),那有没有语句可以在connected的状态下断开连接?谢谢!

new_adv_enabled_status = FALSE;

GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof( uint8 ), &new_adv_enabled_status );

HG:

回复 Longyu Chen:

试试GAPRole_TerminateConnection() or HCI_EXT_DisconnectImmedCmd

Longyu Chen:

回复 HG:

Hi Holly,

谢谢!

目前我们想用从机一直广播,主机连一个、读数据、断开、再连接下一个的方法。

具体步骤如下:

主机上电自动scan=>发现device=>主机连接一个从机=>主机收到从机数据=>主机主动断开连接 gStatus = GAPCentralRole_TerminateLink( simpleBLEConnHandle );

=>主机再重新启动:

simpleBLEScanning = FALSE;  simpleBLEScanRes=0;

osal_set_event( simpleBLETaskId, START_DEVICE_EVT ); 

我们用一个主机、5个从机,发现主机上电的第一次扫描能够找到5个device,但是后面的每次主动断开再启动后只能扫到4个或3个device。

请问是这样操作主机有问题?还是2540一对多连接能力问题?

有什么更好的方法实现  5个从机广播,1个主机轮流连接读数据?

非常感谢!

Longyu Chen:

回复 HG:

Hi Holly,

之前device小于5个的问题解决了,是因为我在device info更新event中做的修改不当。

另外想请教一下,有没有主机与一个从机连接超过一定时间,主机能够自动断开,重新启动并扫描的设置?

目前我们的设计是主机接收到从机的数据后,会自动断开,再启动、扫描。但是如果从机数据没有过来,主机就不会和他断开了,就不会再去重启连接其他从机了。

Longyu Chen:

回复 Longyu Chen:

在主机和从机代码特定地方加入串口打印语句,便于我观察主机和从机的状态。

我发现,有时主机会被触发GAP_LINK_ESTABLISHED_EVENT事件,但是它所连地址对应的从机并没有被触发case GAPROLE_CONNECTED。

这样从机不会发数据,主机也不会接收数据后按照我的代码主动断开,这个连接就会一直保持下去。

请问什么情况下会出现主机检测到GAP_LINK_ESTABLISHED_EVENT,而对应从机却没有触发case GAPROLE_CONNECTED?

或者有主机连接超时自动断开的功能?

谢谢!

赞(0)
未经允许不得转载:TI中文支持网 » 如何实现2540的一对多连接(5至8个从机发数据、1个主机接受数据)
分享到: 更多 (0)