Je me demandais quelle était la longueur maximale des paquets dans Bluetooth Low Energy. La limite de 20 octets si souvent dit, pour exemple ici
"BLE vous permet de transférer un maximum de 20 octets."
"Vous avez raison de dire que la spécification BLE ne permet pas aux opérations d'écriture de dépasser 20 octets."
Cependant, en lisant la spécification Bluetooth Core, nous pouvons voir que la valeur ATT_MTU est écrite avec 2 octets, ce qui signifie qu'elle peut aller jusqu'à 65 535 octets.
Quelle est la vérité derrière tout ça?
Les spécifications ont toujours raison!
Dans Bluetooth 4.0, BLE a été introduit avec une charge utile maximale de 33 octets (sans compter les champs Adresse d'accès et CRC). Chaque couche de la pile de protocoles prend sa coupe:
Avec une demande d'écriture ATT (ou notification), 3 octets sont utilisés par type de commande et ID d'attribut, 20 octets sont laissés pour les données d'attribut.
Au niveau ATT, cette limite peut être élargie de deux manières:
Utilisation de la fragmentation au niveau L2CAP:
L2CAP divisera les PDU ATT en fragments de 27 octets (23 pour le premier).
Désavantages:
Utilisation de l'extension de longueur de paquet introduite dans Bluetooth 4.2:
Jusqu'à 251 octets au niveau radio (255 avec MIC), donc 242 octets disponibles pour les données d'attribut.
Désavantages:
Encore nouveau, nécessite un support matériel, donc pas implémenté partout (même si l'annonce du support BLE 4.2),
Les paquets avec un temps d'antenne plus long auront plus de chances de se bloquer, donc des paquets plus longs impliquent plus de retransmissions.
Si les deux méthodes sont utilisées, L2CAP peut utiliser des fragments plus gros.
Quelle que soit la division de bas niveau de l'APT PDU, la longueur de la valeur d'attribut est limitée à 512 par 3.F 3.2.9.