Introduction au concept de maillage Bluetooth Sig - Explication détaillée du format de message de communication maillée


Insérez la description de l'image ici

一 、 Couche d'accès

Il existe trois types de code opération, 1 octet, 2 octets et 3 octets. 1 octet, 2 octets sont des commandes définies par SIG. 3byte
est une commande définie par le fournisseur et 2 octets sont un identifiant de fournisseur (CID). Dans l'ensemble du réseau maillé, un
identifiant de fournisseur peut prendre en charge jusqu'à 64 opcodes de fournisseur.

La couche d'accès contient le code opérationnel et le paramètre, et la prise en charge maximale est de 380 octets.

二 、 Couche de transport

À l'heure actuelle, pour être compatible avec les périphériques qui ne prennent pas en charge les longs paquets de diffusion, tels que
BLE4.2 , la charge utile maximale de adv est uniformément fixée à 31 octets. Supprimez certains paquets de données de protocole qui doivent occuper une partie de la charge utile effective, un seul paquet est de 11 octets, donc lorsque
la couche d'accès sur 11 octets, nécessite une sous-traitance, donc pour le code d'op du fournisseur, lorsque les paramètres sont grands
en huit octets (8 = 11-3 ), la pile de protocoles maillés effectuera automatiquement la transmission de sous-paquets. L'utilisateur n'a pas besoin d'intervenir.

三 、 Couche réseau

3.1 Adresse

Valeurs Type d'adresse La description
0b0000 0000 0000 0000 Adresse non attribuée 0, aucune adresse attribuée
0b0xxx xxxx xxxx xxxx Adresse unicast adresse d'élément
0b11xx xxxx xxxx xxxx Adresse de groupe Adresse de groupe, utilisée pour le contrôle de groupe et la publication / l'abonnement
0b10xx xxxx xxxx xxxx Adresse virtuelle Non utilisé temporairement

3.2 PDU réseau

Insérez la description de l'image ici

  • IVI: index iv (c'est-à-dire le bit le plus bas de l'octet de iv_idx_st.tx [3] du SDK, actuellement l'index iv du SDK est stocké comme big endian).
  • NID: lié à la clé réseau
  • CTL: si la marque est un message de contrôle

3.3 Compte / / intervalle de transmission du réseau ((définition du nombre de retransmissions et intervalle de retransmission))

Le nombre de transmissions réseau fait référence au nombre de fois qu'une commande doit être retransmise. Ces paquets RF retransmis sont exactement les mêmes, y compris sno. Le but de la retransmission est d'améliorer le taux de réussite de la réception. S'il n'y a que deux nœuds maillés dans le réseau, le taux de réussite de l'envoi d'une seule fois est de 80%, c'est-à-dire que le taux de perte de paquets est de 20%. Ensuite, théoriquement, le taux de perte de paquets d'envoi 6 fois est de 20% au 6ème puissance, qui est de 0,0064%, c'est-à-dire que le taux de réussite de la réception du colis est de 99,993% Bien sûr, il s'agit d'une analyse théorique. Il existe une certaine relation avec l'environnement RF.
Notre pile de protocoles SDK retransmet 5 fois par défaut, à savoir TRANSMIT_CNT_DEF (5), et le nombre total de transmissions est n + 1 = 6.

L'intervalle de transmission du réseau fait référence à l'intervalle de transmission entre deux paquets retransmis. Notre SDK est par défaut de 30 à 40 ms, ce qui est déterminé par TRANSMIT_INVL_STEPS_DEF (2). La méthode de calcul est ((TRANSMIT_INVL_STEPS_DEF +1) * 10 + (0-- - 10)) ms. Le
compte de transmission du réseau et l'intervalle de transmission peuvent également être configurés via la commande de configuration standard CFG_NW_TRANSMIT_SET définie par SIG.

En résumé, notre SDK envoie un paquet réseau par défaut, comme la commande générique ONOFF no ack (cette commande ne nécessite pas de sous-emballage), et le temps requis est d'environ 40 * 6 = 240ms.

3.4 Reliable retry (nombre de tentatives d'envoi de paquets)

Reliable retry fait référence à la nouvelle tentative de la couche application, utilisée pour les commandes avec réponse d'état, telles que ONOFF générique. Après l'envoi d'un paquet réseau (y compris la transmission réseau), il jugera si l'état est reçu. Sinon, nous réessayerons. Lors d'une nouvelle tentative, le numéro de séquence du paquet réseau changera. Par défaut, nous réessayons au maximum deux fois.

Quatre, balise en maille

La figure ci-dessous est la PDU de la balise de périphérique non provisionnée.
Insérez la description de l'image ici

L'UUID de l'appareil peut identifier de manière unique le nœud. Étant donné que certains téléphones mobiles, tels que IOS, ne peuvent pas obtenir mac et ne peuvent pas obtenir mac dans la future fourniture à distance, donc dans le maillage SIG, l'UUID du périphérique est utilisé pour identifier de manière unique le nœud au lieu de mac. La balise non provisionnée est envoyée via un paquet ADV non connectable et est utilisée en
mode de fourniture PB-ADV .

Pour les informations Oob et le hachage d'URI, veuillez vous référer à la spécification "3.9.2 Balise de périphérique non provisionnée". Lorsque le réseau n'est pas connecté, la balise non provisionnée sera envoyée et envoyée via unov_beacon_send (). La période d'envoi est définie par "beacon_send.inter = MAX_BEACON_SEND_INTERVAL", et la valeur par défaut est de 2 secondes. Après la mise en réseau, une balise de sécurité sera envoyée via mesh_tx_sec_nw_beacon (). De plus, le commutateur d'activation d'envoi peut être activé ou désactivé via la commande CFG_BEACON_SET. Reportez-vous au fonctionnement du bouton "SecNwBc" "dans le chapitre" 4.4 Contrôle du nœud correspondant "de cet article. Le cycle d'envoi est défini par SEC_NW_BC_INV_DEF_100MS, et la valeur par défaut est de 10 secondes.

五 、 Procédure de mise à jour IV

Autrement dit, le flux de mise à jour de l'index iv. Les processus de chiffrement et de déchiffrement de la couche réseau et de la couche d'accès doivent utiliser l'index iv.

Comme mentionné précédemment, le réseau maillé nécessite que le numéro de séquence de la PDU réseau soit accumulé en permanence, et le numéro de séquence
est représenté par 3 octets. Lorsque le numéro de séquence est proche de la valeur maximale après une longue période d'utilisation, vous devez envisager de mettre à jour l'
index iv, sinon le numéro de séquence reviendra à 0, ce qui amènera la fin de réception à considérer un message invalide. Dans une certaine
mesure, on peut comprendre que l'indice iv est le bit étendu du numéro de séquence.

Le flux de mise à jour de l'index iv est un processus que le nœud initie et se met à jour lui-même. Dans le SDK actuel, lorsqu'un nœud détecte que son
numéro de séquence dépasse IV_UPDATE_START_SNO (0xC00000), il lancera une mise à jour iv
suivant. Après chaque mise à jour Iv, l'index iv ajoutera 1. Pour le
déroulement détaillé de la mise à jour iv, veuillez vous référer aux chapitres appropriés de spe: SPEC V1.0 "3.10.5 IV Update procedure".

六 、 battement de cœur

Le cycle de transmission de paquets de battements de cœur de maillage peut être configuré, il peut être utilisé pour créer un détecteur hors ligne (le cycle peut publier un mécanisme
pour effectuer une détection hors ligne), des sauts et un calcul, c'est-à-dire, calcule le message de battement de cœur après combien de sauts, a ensuite été
reçu.
Après avoir compté le nombre de battements de cœur reçus dans une certaine période de temps (count), et calculé
la valeur des sauts de chaque battement de cœur , les sauts min et les sauts max sont obtenus, puis la disposition de l'ensemble du réseau et
la fiabilité de la transmission du message de chaque nœud sont compris . Cependant, chaque configuration d'abonnement Heartbeat ne peut surveiller et compter l'état que d'un nœud.
La méthode de calcul des sauts est la suivante: hops = InitTTL-RxTTL +1.

  • InitTTL: est le paramètre TTL dans l'ensemble de publication Heartbeat.
  • RxTTL: est le TTL dans la PDU réseau du message reçu.

Le nœud n'envoie pas de pulsation par défaut. Pour la méthode de configuration spécifique, reportez-vous au chapitre "5.6 Démonstration de pulsations"

Sept, santé

Le message lié au modèle d'intégrité est utilisé pour refléter l'état d'avertissement ou d'erreur du nœud.

Valeur La description
0x00 Sans faute
0x01 Avertissement de batterie faible
0x02 Bettery Low Error
0x03 Avertissement de tension d'alimentation trop basse
0x04 Erreur de tension d'alimentation trop faible
0x05 Avertissement de tension d'alimentation trop élevée
0x06 Erreur de tension d'alimentation trop élevée
0x07 Avertissement d'interruption de l'alimentation électrique
0x08 Erreur d'alimentation interrompue
0x09 Aucun avertissement de charge
0x0A Aucune erreur de chargement
0x0B Avertissement de surcharge
0x0C Erreur de surcharge
0x0D Avertissement de surchauffe
0x0E Erreur de surchauffe
0x0F Avertissement de condensation
0x10 Erreur de condensation
0x11 Avertissement de vibration
0x12 Erreur de vibration
0x13 Avertissement de configuration
0x14 Erreur de configuration
0x15 Avertissement d'élément non calibré
0x16 Erreur d'élément non calibré
0x17 Avertissement de mémoire
0x18 Erreur de mémoire
0x19 Avertissement d'autotest
0x1A Erreur d'auto-test
0x1B Avertissement d'entrée trop bas
0x1C Erreur d'entrée trop faible
0x1D Avertissement d'entrée trop élevé
0x1E Erreur d'entrée trop élevée
0x1F Avertissement d'entrée sans changement
0x20 Erreur d'entrée sans changement
0x21 Avertissement d'actionneur bloqué
0x22 Erreur d'actionneur bloqué
0x23 Avertissement de logement ouvert
0x24 Erreur de logement ouvert
0x25 Avertissement de sabotage
0x26 Erreur de sabotage
0x27 Avertissement de déplacement de périphérique
0x28 Erreur de déplacement du périphérique
0x29 Avertissement de chute de périphérique
0x2A Erreur de l'appareil abandonné
0x2B Avertissement de débordement
0x2C Erreur de débordement
0x2D Avertissement vide
0x2E Erreur vide
0x2F Avertissement de bus interne
0x30 Erreur de bus interne
0x31 Avertissement de blocage du mécanisme
0x32 Erreur de blocage du mécanisme
0x33-0X7F Réservé pour une utilisation future
0x80-0XFF Avertissement / erreur spécifique au fournisseur

Si vous pensez que c'est bien, un seul clic pour trois chants consécutifs (J'aime + Favoris + Suivre)

Je suppose que tu aimes

Origine blog.csdn.net/kangweijian/article/details/115278864
conseillé
Classement