Paket: kde se ztratí dvacet bajtů
Každý, kdo poprvé psal aplikaci pro BLE, narazil na tvrdou hranici dvaceti bajtů na zprávu a nechápal, odkud se vzala. Vzala se ze součtu hlaviček, a stojí za to ho vidět.
- 1 + 4 + 2 + 4 + 3 = 14 B
Preambule, přístupová adresa, hlavička, kontrolní součet a šifrovací značka. Deset až čtrnáct bajtů, které jsou tam vždycky.
- + 4 + 3 = 7 B
L2CAP čtyři bajty, ATT tři. Teprve pod nimi začínají data, která zajímají aplikaci.
- 20 B
Výchozí ATT MTU je 23 bajtů. Po odečtení tří na hlavičku zbývá dvacet — a to je ta slavná dvacítka, o kterou se rozbíjí každý první projekt.
- účinnost 49 %, 328 µs
Od Bluetooth 4.2 může paket nést 251 bajtů místo 27. Režie zůstane stejná, takže se účinnost zvedne ze 49 na 91 procent.
| část | bajtů | k čemu |
|---|---|---|
| preambule | 1 (2 na 2M) | srovnání přijímače |
| přístupová adresa | 4 | které spojení to je |
| hlavička LL | 2 | typ a délka |
| L2CAP | 4 | kanál |
| ATT | 3 | operace a handle |
| data | 20 (výchozí) | to jediné, o co jde |
| MIC | 4 | integrita při šifrování |
| CRC | 3 | kontrolní součet |
Jedenadvacet bajtů režie na dvacet bajtů dat. Účinnost 49 %, a to je ještě předtím, než se započítá mezera mezi pakety.
DLE: to jediné, co s tím jde udělat
Bluetooth 4.2 přineslo rozšíření délky dat: paket může nést 251 bajtů místo 27. Režie zůstane přesně stejná, takže:
Je to nejlevnější zlepšení propustnosti v celém BLE a stačí ho zapnout. Většina zásobníků ho nezapíná sama — vyjednává se po navázání spojení a spousta aplikací o to nikdy nepožádá. Pokud vaše BLE přenáší 30 kb/s tam, kde by mělo 300, je to skoro jistě tohle.
Ale pozor na dobu vysílání
Delší paket trvá dýl, a to na pomalém PHY bolí:
| PHY | 27 B | 251 B |
|---|---|---|
| 2M | 168 µs | 1 064 µs |
| 1M | 328 µs | 2 120 µs |
| Coded S=2 | 656 µs | 4 240 µs |
| Coded S=8 | 2 624 µs | 16 960 µs |
Sedmnáct milisekund je víc než dvojnásobek nejkratšího možného intervalu. Plný paket na S=8 se do krátkého spojení prostě nevejde — a tahle labka to hlásí místo aby to potichu ořízla, protože to je konfigurace, kterou lze nastavit a která pak nic nepřenese.
Kontrolní otázka pro každý projekt: je zapnuté DLE a jaké je vyjednané MTU? Odpověď „nevím“ znamená 20 bajtů a poloviční účinnost. Zvýšit MTU na 247 je jeden řádek v inicializaci a nejlepší poměr užitku k práci v celém BLE.