2

如果有人能解释我遇到的一个问题,我将不胜感激,因为 Raspberry Pi 3 型号 B 在与外围设备的 BLE 连接上充当中央设备。

首先,我使用以下 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, 5毫秒)。但是,一旦两个设备都连接好,我会更新连接参数,以便使用以下 hcitool 命令将连接间隔修改为 24 (30ms):

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

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

谁能给我一个关于这个问题的解释?此外,任何人都可以尝试重现此过程并检查是否观察到相同的问题?

谢谢

4

1 回答 1

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 延迟=0,timeout=960ms,CE 间隔 min/max=48*0.625 ms。

于 2017-10-23T16:15:18.537 回答