如果有人能解释我在与外围设备的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 model 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)。
有人能给我解释一下这个问题吗?此外,是否有人可以尝试复制此程序,并检查是否观察到相同的问题?
感谢
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毫秒。您不希望这样。如果您希望在整个连接间隔期间继续发送数据包,则希望它与您的连接间隔一样长。
要测试设置CE长度,请使用原始命令:
sudo hcitool cmd 0x08 0x13 0x40 0x00 0x18 0 0x18 0 0 0 0x60 0 0x30 0 0x30 0
这为句柄0x0040发出连接参数更新请求,连接间隔最小值/最大值=24*1.25毫秒,从机延迟=0,超时=960毫秒,CE间隔最小值=最大值=48*0.625毫秒。