Raspberry Pi3 BLE作为中央设备,每个连接间隔只接收一个数据包 - gatttool / hcitool

时间:2017-10-20 11:00:50

标签: bluetooth-lowenergy raspberry-pi3 bluez gatttool

如果有人能够解释我在使用外围设备进行BLE连接时充当中央设备的Raspberry Pi 3型号B的问题,我将不胜感激。

首先,我成功连接两台设备,并使用以下hcitool / gatttool命令在中央设备上启用通知:

sudo hciconfig hci0 up
sudo gatttool --adapter=hci0 --device=XX:XX:XX:XX:XX:XX --adr_type=random --mtu=23 -I
[][LE]> connect
[][LE]> char-write-req 0x000c 0100

之后,我开始在Raspberry Pi3模型B上接收通知,并使用BLE嗅探器,我检查它是否接收到5个BLE数据包,每个连接间隔有通知值(可以),默认情况下建立为54 (67,5ms)。但是,一旦连接了两个设备,我就更新连接参数,以便使用以下hcitool命令将连接间隔修改为24(30ms):

sudo hcitool lecup --handle=XX --min=24 --max=24

我发现的问题是,一旦连接参数更新,我检查Raspberry Pi3模型B每个连接间隔开始只接收1个BLE数据包(这不行)。观察到相同的行为将连接参数更新为更高的连接间隔值,即800(1s)。

有人能解释一下这个问题吗?此外,是否有人可以尝试重现此过程并检查是否观察到相同的问题?

由于

1 个答案:

答案 0 :(得分:1)

hcitool lecup使用hci_le_conn_update(http://elixir.free-electrons.com/linux/latest/source/net/bluetooth/hci_conn.c#L321)将min_ce_len和max_ce_len设置为0,这意味着它向控制器提示连接事件长度应为0 * 0.625 ms。你不想要那个。如果您希望在整个时间间隔内继续发送数据包,则希望它与您的连接间隔一样长。

要测试设置CE长度,请改用原始命令:

sudo hcitool cmd 0x08 0x13   0x40 0x00   0x18 0  0x18 0   0 0   0x60 0   0x30 0  0x30 0

这会发出句柄0x0040的连接参数更新请求,连接间隔min / max = 24 * 1.25 ms,slave latency = 0,timeout = 960ms,CE interval min / max = 48 * 0.625 ms。