Hello,
I am developing an application that sends data from an Arduino Nano 33 BLE Sense to a custom Android app (Motorola Edge running Android 10). The Arduino board is based on the nRF52840 SoC as I have understood it. I have noticed that the data length extension is enabled when using 1M PHY. However, when using Coded PHY the link layer PDU size is always selected as 27.
Is this normal behavior? Would it be possible to enable DLE with a PDU size up to 251 bytes when using Coded PHY?
I have examined the on-air traffic using the Sniffle tool (https://github.com/nccgroup/Sniffle). The nRF Sniffer does currently not work in Coded PHY mode.
By first considering the 1M PHY case I get the following (I have stripped all messages not related to PDU negotiation):
Timestamp: 4.019493 Length: 11 RSSI: -40 Channel: 28 PHY: Coded
LLID: LL CONTROL
Dir: S->M NESN: 1 SN: 0 MD: 1 Data Length: 9
Opcode: LL_LENGTH_REQ
17 09 14 FB 00 50 08 FB 00 48 08
Timestamp: 4.023704 Length: 11 RSSI: -52 Channel: 28 PHY: Coded
LLID: LL CONTROL
Dir: M->S NESN: 0 SN: 0 MD: 0 Data Length: 9
Opcode: LL_LENGTH_RSP
03 09 15 FB 00 90 42 1B 00 90 0A
Timestamp: 4.580553 Length: 11 RSSI: -52 Channel: 24 PHY: Coded
LLID: LL CONTROL
Dir: M->S NESN: 0 SN: 0 MD: 1 Data Length: 9
Opcode: LL_LENGTH_REQ
13 09 14 FB 00 7A 37 1B 00 90 0A
Timestamp: 4.584315 Length: 11 RSSI: -40 Channel: 24 PHY: Coded
LLID: LL CONTROL
Dir: S->M NESN: 0 SN: 1 MD: 0 Data Length: 9
Opcode: LL_LENGTH_RSP
0B 09 15 FB 00 90 42 FB 00 90 0A
Timestamp: 4.888056 Length: 11 RSSI: -53 Channel: 3 PHY: 1M
LLID: LL CONTROL
Dir: M->S NESN: 0 SN: 0 MD: 0 Data Length: 9
Opcode: LL_LENGTH_REQ
03 09 14 FB 00 48 08 1B 00 48 01
Timestamp: 4.895850 Length: 11 RSSI: -41 Channel: 26 PHY: 1M
LLID: LL CONTROL
Dir: S->M NESN: 0 SN: 1 MD: 0 Data Length: 9
Opcode: LL_LENGTH_RSP
0B 09 15 FB 00 90 42 FB 00 48 08
.
.
.
Timestamp: 4.963287 Length: 214 RSSI: -42 Channel: 4 PHY: 1M
LLID: LL DATA
Dir: S->M NESN: 0 SN: 1 MD: 0 Data Length: 212
0A D4 D0 00 04 00 1B 03 00 CC 0A 31 08 BC C4 15 15 00 00 0A 3D 1D 00 00 42 BC 25 00 B8 7B 3F 2D 00 00 7A 3E 35 00 00 7A 3F 3D 00 40 1C BF 45 00 00 00 00 4D 00 00 00 00 55 00 00 00 00 0A 31 08 CD C4 15 15 00 00 0A 3D 1D 00 00 5A BC 25 00 60 7B 3F 2D 00 40 9C 3E 35 00 00 7A 3F 3D 00 40 1C BF 45 00 00 00 00 4D 00 00 00 00 55 00 00 00 00 0A 31 08 DE C4 15 15 00 80 0C 3D 1D 00 00 5A BC 25 00 30 7B 3F 2D 00 C0 DA 3E 35 00 D0 84 3F 3D 00 40 1C BF 45 00 00 00 00 4D 00 00 00 00 55 00 00 00 00 0A 31 08 EF C4 15 15 00 00 0C 3D 1D 00 00 50 BC 25 00 40 7B 3F 2D 00 80 BB 3E 35 00 00 7A 3F 3D 00 80 3B BF 45 00 00 00 00 4D 00 00 00 00 55 00 00 00 00
Here we see that the master (the Android phone) and the slave (the Arduino application) negotiates the PDU length using LL_LENGTH_REQ and LL_LENGTH_RSP, and agree on 0xFB = 251 bytes as max PDU size. The slave then sends data to the master in chunks of 212 bytes which is normal.
When using Coded PHY I get the following behavior:
Timestamp: 4.810122 Length: 11 RSSI: -44 Channel: 24 PHY: Coded
LLID: LL CONTROL
Dir: S->M NESN: 1 SN: 0 MD: 0 Data Length: 9
Opcode: LL_LENGTH_REQ
07 09 14 FB 00 50 08 FB 00 48 08
Timestamp: 4.853677 Length: 11 RSSI: -35 Channel: 20 PHY: Coded
LLID: LL CONTROL
Dir: M->S NESN: 1 SN: 1 MD: 0 Data Length: 9
Opcode: LL_LENGTH_RSP
0F 09 15 FB 00 90 42 1B 00 90 0A
Timestamp: 5.446184 Length: 11 RSSI: -35 Channel: 24 PHY: Coded
LLID: LL CONTROL
Dir: M->S NESN: 0 SN: 0 MD: 0 Data Length: 9
Opcode: LL_LENGTH_REQ
03 09 14 FB 00 6A 10 1B 00 90 0A
Timestamp: 5.454554 Length: 11 RSSI: -46 Channel: 2 PHY: Coded
LLID: LL CONTROL
Dir: S->M NESN: 0 SN: 1 MD: 0 Data Length: 9
Opcode: LL_LENGTH_RSP
0B 09 15 FB 00 90 42 FB 00 90 0A
Timestamp: 5.618686 Length: 11 RSSI: -36 Channel: 16 PHY: Coded
LLID: LL CONTROL
Dir: M->S NESN: 0 SN: 0 MD: 0 Data Length: 9
Opcode: LL_LENGTH_REQ
03 09 14 FB 00 90 42 FB 00 90 42
Timestamp: 5.664557 Length: 11 RSSI: -46 Channel: 4 PHY: Coded
LLID: LL CONTROL
Dir: S->M NESN: 0 SN: 1 MD: 0 Data Length: 9
Opcode: LL_LENGTH_RSP
0B 09 15 FB 00 90 42 FB 00 90 0A
.
.
.
Timestamp: 5.889559 Length: 29 RSSI: -44 Channel: 30 PHY: Coded
LLID: LL DATA
Dir: S->M NESN: 1 SN: 0 MD: 1 Data Length: 27
16 1B D4 00 04 00 1B 03 00 D0 0A 32 08 8D D7 F3 02 15 00 00 88 3C 1D 00 00 40 3B 25 00
Timestamp: 5.893027 Length: 29 RSSI: -44 Channel: 30 PHY: Coded
LLID: LL DATA CONT
Dir: S->M NESN: 0 SN: 1 MD: 1 Data Length: 27
19 1B 90 7B 3F 2D 00 C0 DA 3E 35 00 A0 8C 3F 3D 00 80 3B BF 45 00 00 00 00 4D 00 00 00
Here the PDU size is always selected as 27 bytes. I would be very grateful for any help.