为Android 10中的蓝牙LE启用251大小的链路层PDU
我在Arduino Nano上有一个BLE应用程序,它不断地将IMU数据发送到我为Android手机开发的定制应用程序。当我嗅探空中交通时,手机似乎要求链路层PDU大小为27。如果我能够将其增加到251,则需要更少的链路层数据包(从而降低开销)。这款手机是摩托罗拉Edge,它实现了蓝牙5.1。Android版本是10 我在Bluetooth API中未找到任何控制此设置的设置。甚至有可能做到这一点吗 连接后,Arduino(从机)向主机(电话)发送一个包含251个RX/TX八位字节的LL_长度_请求。手机发出的LL_LENGTH_RSP信息在Wireshark中如下图所示,这可能解释了为什么选择PDU大小为27的原因为Android 10中的蓝牙LE启用251大小的链路层PDU,android,bluetooth-lowenergy,Android,Bluetooth Lowenergy,我在Arduino Nano上有一个BLE应用程序,它不断地将IMU数据发送到我为Android手机开发的定制应用程序。当我嗅探空中交通时,手机似乎要求链路层PDU大小为27。如果我能够将其增加到251,则需要更少的链路层数据包(从而降低开销)。这款手机是摩托罗拉Edge,它实现了蓝牙5.1。Android版本是10 我在Bluetooth API中未找到任何控制此设置的设置。甚至有可能做到这一点吗 连接后,Arduino(从机)向主机(电话)发送一个包含251个RX/TX八位字节的LL_长度_
Frame 294: 29 bytes on wire (232 bits), 29 bytes captured (232 bits)
Bluetooth
Bluetooth Low Energy RF Info
Bluetooth Low Energy Link Layer
Access Address: 0x88c78ca1
.... ..00 = Coding Indicator: FEC Block 2 coded using S=8 (0)
[Master Address: 51:7a:c0:c9:6e:81 (51:7a:c0:c9:6e:81)]
[Slave Address: ca:8b:68:49:aa:7a (ca:8b:68:49:aa:7a)]
Data Header: 0x090f
.... ..11 = LLID: Control PDU (0x3)
.... .1.. = Next Expected Sequence Number: 1
.... 1... = Sequence Number: 1 [OK]
...0 .... = More Data: False
000. .... = RFU: 0
Length: 9
Control Opcode: LL_LENGTH_RSP (0x15)
Max RX octets: 251
Max RX time: 17040 microseconds
Max TX octets: 27
Max TX time: 2704 microseconds
CRC: 0x000000
建立连接后,尝试通过调用来设置MTU。之后您将收到回拨。在MTU请求成功后启动服务发现。感谢您的回答。我以为我在这么做。在
onServicesDiscovered
回调中,我正在调用requestMtu(设备,512)
我只是试图更改调用顺序,以便requestMtu
位于discoverServices
之前。但我得到了相同的结果,即链路层PDU大小仍然是27字节。D/BluetoothGatt:onConnectionUpdated()-Device=CA:8B:68:49:AA:7A interval=6latency=0 timeout=500 status=0 D/BluetoothGatt:onConfigureMTU()-Device=CA:8B:68:49:AA:7A mtu=512 status=0 W/BleService$gatcallback:ATT mtu更改为512,成功:true D/BluetoothGatt:discoverServices()-设备:CA:8B:68:49:AA:7A D/BluetoothGatt:onSearchComplete()=设备=CA:8B:68:49:AA:7A状态=0