如果有人能够解释我在使用外围设备进行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)。
有人能解释一下这个问题吗?此外,是否有人可以尝试重现此过程并检查是否观察到相同的问题?
由于
答案 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。