Créer un réseau Thread avec Texas Instruments SimpleLink F3 et OpenThread

1. Introduction

Logo OpenThread

OpenThread (OT) de Google est une implémentation Open Source de Thread. Google a lancé OpenThread pour mettre la technologie réseau utilisée dans les produits Google Nest à la disposition des développeurs. L'objectif est d'accélérer le développement de produits pour les applications de maison connectée et de bâtiments commerciaux. Grâce à une couche d'abstraction de plate-forme étroite et à un faible espace mémoire utilisé, OpenThread est très portable. Il est compatible avec les conceptions de système sur puce (SoC) et de coprocesseur réseau (NCP).

La spécification Thread définit un protocole de communication sans fil fiable, sécurisé et à faible consommation d'énergie basé sur IPv6 pour les applications domestiques et commerciales.

Texas Instruments a implémenté OpenThread pour la famille d'appareils SimpleLink™ CC27xx. Le dépôt ot-ti sur GitHub contient les pilotes de plate-forme et les exemples d'applications nécessaires à l'exécution d'OpenThread sur les MCU connectés SimpleLink de Texas Instruments. Le CC2745R10-Q1 est un MCU sans fil IEEE 802.15.4 certifié Thread et de qualité automobile (certifié AEC-Q100) de la famille SimpleLink CC27xx de TI.

Cet atelier de programmation explique comment commencer à développer des applications OpenThread avec la carte d'évaluation LP-EM-CC2745R10-Q1 LaunchPad et le dépôt ot-ti. L'image ci-dessous montre la configuration matérielle utilisée dans cet atelier de programmation, avec un routeur de bordure OT (OTBR) et deux appareils Thread complets (FTD).

CC2745R10 Hardware Setup

Points abordés

  • Configurer l'environnement de compilation ot-ti de Texas Instruments
  • Découvrez comment compiler et flasher les binaires de l'interface de ligne de commande OpenThread sur les cartes LP-EM-CC2745R10-Q1.
  • Configurer un Raspberry Pi en tant que routeur de bordure OpenThread (OTBR) à l'aide d'ot-br-posix.
  • Comment créer un réseau Thread sur l'OTBR ?
  • Mise en service hors bande d'appareils sur un réseau Thread.
  • Comment vérifier la communication Thread entre les nœuds à l'aide de la commande ping.

2. Prérequis

Matériel

  1. 3 cartes LaunchPad LP-EM-CC2745R10-Q1 : une configurée en tant que RCP connecté au routeur de bordure et deux configurées en tant que Full Thread Devices (FTD). LP-EM-CC2745R10-Q1 Angled ViewLe CC2745R10-Q1 est un MCU sans fil IEEE 802.15.4 certifié Thread et de qualité automobile (certifié AEC-Q100) de la famille SimpleLink CC27xx de TI. Le LP-EM-CC2745R10-Q1 est le module d'évaluation LaunchPad correspondant et prend en charge les rôles Thread RCP, FTD, MTD et NCP. La carte CC2340R5 avec la carte LP-EM-CC2340R5 LaunchPad est une option à mémoire réduite qui peut servir uniquement de RCP. Il n'est pas compatible avec les rôles FTD, MTD ni NCP. Si vous remplacez une carte LP-EM-CC2340R5 par la carte 1 (RCP), les deux cartes FTD doivent toujours être des LP-EM-CC2745R10-Q1.
  2. 3 sondes de débogage LP-XDS110ET : une par carte LaunchPad, utilisées pour la programmation et le débogage via USB. LP-XDS110ET Angled ViewLe LP-XDS110ET est une sonde de débogage USB distincte requise pour les LaunchPads au format LP-EM. Il inclut la compatibilité avec EnergyTrace pour le profilage de la consommation d'énergie. Le LP-XDS110 est une alternative moins coûteuse qui offre les mêmes capacités de programmation et de débogage, mais n'inclut pas EnergyTrace. Une autre solution consiste à utiliser un LaunchPad avec une sonde de débogage XDS110 intégrée (comme la LAUNCHXL-CC26X2R1) à la place de la carte LP-EM et d'une sonde de débogage distincte. Pour en savoir plus, consultez le guide de connectivité de débogage LaunchPad.
  3. 3 câbles micro-USB pour connecter et alimenter les cartes LaunchPad et les sondes de débogage.
  4. Un Raspberry Pi 4B ou version ultérieure avec Raspberry Pi OS connecté à Internet via Ethernet. Il sera configuré en tant qu'hôte du routeur de bordure OT.Raspberry Pi 4
  5. Un système hôte Linux ou macOS avec au moins deux ports USB et un accès à Internet. L'environnement de compilation nécessite un shell compatible avec Bash. Les utilisateurs Windows doivent utiliser WSL2 (Windows Subsystem for Linux 2) avec Ubuntu.
  6. Au moins un câble Ethernet pour connecter la Raspberry Pi à Internet. Vous pouvez également connecter la Raspberry Pi au Wi-Fi et utiliser wlan0 comme interface d'infrastructure. Pour en savoir plus, consultez l'étape de configuration OTBR.

Logiciel

  • Dépôt TI ot-ti : https://github.com/TexasInstruments/ot-ti
  • GNU ARM Embedded Toolchain 12.2 (installé automatiquement par le script bootstrap)
  • SysConfig 1.27.0 (installé automatiquement par le script d'amorçage)
  • TI UniFlash : pour flasher le micrologiciel sur les cartes LaunchPad

3. Configuration du matériel

Cet atelier de programmation utilise trois cartes LP-EM-CC2745R10-Q1 :

  • Carte 1 (RCP) : exécute le micrologiciel ot-rcp. Connecté au Raspberry Pi via USB en tant que coprocesseur radio pour le routeur de bordure.
  • Carte 2 (FTD 1) : exécute le micrologiciel ot-cli-ftd en tant que Full Thread Device.
  • Carte 3 (FTD 2) : exécute le micrologiciel ot-cli-ftd en tant que Full Thread Device.

LP-EM-CC2745R10-Q1 Vue de dessus

Connectez chaque LaunchPad à votre ordinateur hôte via un câble micro-USB. La connexion USB fournit à la fois une alimentation et une capacité de débogage/programmation via la sonde de débogage XDS110 intégrée.

Chaque LP-EM-CC2745R10-Q1 apparaît sous la forme de deux ports série virtuels lorsqu'il est connecté via USB : un pour l'interface de débogage XDS110 et un pour l'UART de l'application. Lorsque vous ouvrez une console série, connectez-vous au port Application/User UART, et non au port de données auxiliaires.

Schéma de connexion du matériel

4. Configuration et compilation du dépôt

Le système de compilation ot-ti utilise CMake et nécessite un shell Bash. Toutes les commandes de cette section sont exécutées sur l'hôte Linux ou macOS (ou WSL2 sur Windows).

1. Cloner le dépôt

$ git clone https://github.com/TexasInstruments/ot-ti.git
$ cd ot-ti
$ git submodule update --init

2. Exécuter le script d'amorçage

Le script d'amorçage installe les dépendances requises, y compris la chaîne d'outils GNU ARM et SysConfig :

$ ./script/bootstrap

Le script d'amorçage nécessite cmake, git, wget et des outils de compilation standards. Sur Ubuntu/Debian, installez les prérequis avec la commande suivante : sudo apt-get install -y cmake git make wget tar ninja-build

3. Compiler le micrologiciel pour LP_EM_CC2745R10_Q1

Créez toutes les images de micrologiciel pour la carte LP-EM-CC2745R10-Q1 :

$ ./script/build LP_EM_CC2745R10_Q1

La cible de compilation LP_EM_CC2745R10_Q1 correspond à l'appareil CC2745R10-Q1 de la famille CC27xx SimpleLink (cœur Arm Cortex-M33F). Pour afficher toutes les cartes compatibles, exécutez ./script/build sans arguments.

Une fois la compilation réussie, les binaires ELF se trouvent dans build/bin/ :

$ ls build/bin/
ot-cli-ftd.out  ot-cli-mtd.out  ot-ncp-ftd.out  ot-rcp.out

Les deux images utilisées dans cet atelier de programmation sont les suivantes :

  • ot-rcp.out : micrologiciel du coprocesseur radio pour la carte du routeur de bordure.
  • ot-cli-ftd.out : micrologiciel FTD (Full Thread Device) CLI pour les deux cartes FTD.

Appareil Thread minimal (facultatif) : si vous souhaitez explorer un appareil final en veille au lieu d'un appareil Thread complet, vous pouvez flasher ot-cli-mtd.out à la place de ot-cli-ftd.out sur les cartes 2 et 3. Un MTD ne route pas le trafic Thread et peut passer en mode veille basse consommation, ce qui le rend bien adapté aux applications fonctionnant sur batterie. Les étapes de formation du réseau Thread dans cet atelier de programmation sont les mêmes pour les deux types d'appareils.

Coprocesseur réseau (NCP) facultatif : le binaire ot-ncp-ftd.out implémente l'architecture NCP, où la pile OpenThread s'exécute sur l'appareil et un processeur hôte la pilote via le protocole Spinel. L'utilisation de NCP ne fait pas partie de cet atelier de programmation. Pour en savoir plus, consultez le fichier README de NCP.

5. Flasher le micrologiciel

Utilisez TI UniFlash pour flasher les images ELF sur les cartes LaunchPad.

Flasher à l'aide d'UniFlash

  1. Ouvrez UniFlash. Les cartes LaunchPad connectées s'affichent sous Detected Devices (Appareils détectés) grâce à la fonctionnalité de détection automatique des appareils.Si votre carte n'est pas détectée automatiquement, cliquez sur New Configuration (Nouvelle configuration), sélectionnez la cible LP-EM-CC2745R10-Q1, puis choisissez la sonde de débogage USB XDS110.Appareils détectés par UniFlash
  2. Sélectionnez Board 1 (carte à flasher avec ot-rcp.out), puis cliquez sur Start (Démarrer).
  3. Cliquez sur le bouton Parcourir et accédez à ot-ti/build/bin/ot-rcp.out.Page Flash UniFlash
  4. Cliquez sur Load Image (Charger l'image) pour flasher le micrologiciel. La zone de journalisation affiche la progression et confirme la fin de l'opération.
  5. Répétez les étapes 2 à 4 pour les cartes 2 et 3, en sélectionnant ot-ti/build/bin/ot-cli-ftd.out pour chacune d'elles.

Autre possibilité : Flasher à l'aide de Code Composer Studio (CCS)

Code Composer Studio peut être utilisé comme alternative à UniFlash. Il fournit également un environnement de débogage complet :

  1. Téléchargez et installez Code Composer Studio.
  2. Créez une connexion cible (CCXML) pour le LP-EM-CC2745R10-Q1 avec le débogueur XDS110. Consultez le Guide de l'utilisateur de CCS : méthode manuelle.
  3. Démarrez une session de débogage sans projet, comme décrit dans le Guide de l'utilisateur CCS : lancement manuel.
  4. Connectez-vous au cœur Arm Cortex-M33 et cliquez sur Load (Charger) pour charger l'image ELF.

La configuration CCXML par défaut utilise cJTAG à deux fils pour correspondre à la configuration de cavalier LP-EM-CC2745R10-Q1 par défaut. Après la programmation via JTAG, redémarrez la carte pour effacer l'indicateur d'arrêt au démarrage.

6. Programmer le HSM

Le CC2745R10-Q1 contient un module de sécurité matériel (HSM) qui doit être provisionné avant d'exécuter Thread ou tout autre micrologiciel d'application sécurisé. Si le HSM de votre carte LP-EM-CC2745R10-Q1 n'a pas encore été programmé, effectuez cette étape maintenant.

Pour programmer le HSM à l'aide d'UniFlash :

  1. Ouvrez UniFlash et sélectionnez votre carte LP-EM-CC2745R10-Q1 dans Detected Devices (Appareils détectés).
  2. Accédez au panneau de programmation du HSM et chargez l'image du micrologiciel du HSM comme indiqué ci-dessous.

Programmation UniFlash HSM

  1. Suivez les instructions à l'écran pour terminer le provisionnement du HSM. L'opération est consignée dans la console de sortie UniFlash.

Consultez le Guide de démarrage rapide CC2745R10-Q1 dans TI Resource Explorer pour connaître la procédure complète de programmation du HSM, y compris le chemin d'accès à l'image du micrologiciel requise dans le SDK SimpleLink Low Power F3.

7. Récapitulatif du micrologiciel

À ce stade, les trois cartes devraient être flashées :

  • Carte 1  : ot-rcp.out : déconnectez-vous de l'ordinateur hôte et connectez-vous au Raspberry Pi via USB.
  • Tableau 2  : ot-cli-ftd.out Restez connecté à l'ordinateur hôte.
  • Carte 3  : ot-cli-ftd.out : restez connecté à l'ordinateur hôte.

Votre configuration matérielle doit ressembler au schéma ci-dessous. La carte 1 se connecte au Raspberry Pi en tant que coprocesseur radio pour OTBR, tandis que les cartes 2 et 3 restent connectées à l'ordinateur hôte pour l'accès à la console série.

Configuration matérielle CC2745R10 avec les FTD

8. Configurer la console série pour les appareils ot-cli-ftd

La carte LP-EM-CC2745R10-Q1 expose l'UART de l'application via USB à 921 600 bauds.

Ouvrez un terminal série sur le port COM UART de l'application (Windows) ou sur l'appareil /dev/ttyACM* (Linux/macOS) pour chaque carte FTD en utilisant les paramètres suivants :

Paramètre

Valeur

Vitesse (baud)

921600

Bits de données

8

Bits d'arrêt

1

Parité

None

Contrôle de flux

None

Conseil (Linux/macOS) : Identifiez le nœud de périphérique correct en exécutant ls /dev/ttyACM* avant et après avoir branché une carte, puis notez l'entrée qui s'affiche. Chaque LP-EM-CC2745R10-Q1 crée deux entrées : le port au numéro le plus bas est le port UART de débogage XDS110, et le port au numéro le plus haut est le port UART de l'application. Par exemple, si le tableau crée /dev/ttyACM0 et /dev/ttyACM1, utilisez /dev/ttyACM1.

Conseil (Windows) : Ouvrez le Gestionnaire de périphériques et recherchez deux nouveaux ports COM sous Ports (COM et LPT) lorsqu'une carte est branchée. Le port de données de débogage XDS110 apparaît généralement en premier. Utilisez le deuxième port COM (numéro plus élevé) pour la console d'application.

Appuyez sur Entrée dans le terminal pour obtenir une invite OpenThread CLI (>). Pour obtenir la liste complète des commandes disponibles, consultez la documentation de référence OpenThread CLI. Vérifiez que le FTD est opérationnel :

> state
disabled
Done

FTD de terminal série

Vous ne configurerez pas encore de console série pour la carte RCP. L'OTBR sur le Raspberry Pi communique directement avec le RCP. À l'étape suivante, vous allez configurer le Raspberry Pi en tant que routeur de bordure OpenThread.

9. Configurer le Raspberry Pi en tant que routeur de bordure

OTBR est basé sur ot-br-posix, le projet OpenThread Border Router Open Source. Le routeur de bordure s'exécute sur le Raspberry Pi et utilise la carte 1 (RCP) comme radio 802.15.4 via USB.

Configuration de Raspberry Pi

  1. Flashez Raspberry Pi OS (Lite ou Desktop 64 bits) sur votre carte SD à l'aide de Raspberry Pi Imager.
  2. Démarrez le Raspberry Pi et ouvrez un terminal (via SSH ou directement).
  3. Mettez à jour le gestionnaire de paquets et les paquets installés :
    $ sudo apt-get update
    $ sudo apt-get upgrade -y
    

Redémarrez le Raspberry Pi après les mises à jour avant de continuer : sudo reboot

Brancher la carte 1 (RCP) au Raspberry Pi

Connectez la carte 1 (flashée avec ot-rcp) au Raspberry Pi via un câble micro-USB. Une fois la connexion établie, vérifiez que le nœud de l'appareil s'affiche :

$ ls /dev/ttyACM*
/dev/ttyACM0
/dev/ttyACM1

L'UART de l'application de la carte RCP est généralement /dev/ttyACM1 (l'UART de débogage XDS110 est /dev/ttyACM0). Vérifiez quel port est l'UART de l'application en vous assurant qu'il répond lorsque l'agent OTBR est démarré lors d'une étape ultérieure. Si d'autres périphériques série USB sont connectés, le numéro du nœud de périphérique peut être différent. Ajustez le chemin d'accès dans la configuration OTBR en conséquence.

Compiler et installer ot-br-posix

Sur le Raspberry Pi, clonez et compilez ot-br-posix :

$ git clone https://github.com/openthread/ot-br-posix.git
$ cd ot-br-posix
$ ./script/bootstrap

Exécutez le script de configuration en spécifiant votre interface Ethernet comme interface dorsale (infrastructure) :

$ INFRA_IF_NAME=eth0 ./script/setup

eth0 est le nom habituel de l'interface Ethernet filaire. Si vous connectez la Raspberry Pi via le Wi-Fi au lieu d'Ethernet, remplacez eth0 par wlan0 (et assurez-vous que la Raspberry Pi est déjà connectée à votre réseau Wi-Fi). Vérifiez le nom de l'interface active avec ip link show.

Le script de configuration crée ot-br-posix à partir de la source, installe les services système otbr-agent et otbr-web, et configure la pile réseau. Ce processus prend généralement entre 10 et 20 minutes sur un Raspberry Pi 4B.

Configurer l'agent OTBR

Modifiez le fichier de configuration de l'agent OTBR pour spécifier le chemin d'accès et le débit en bauds de l'appareil RCP :

$ sudo nano /etc/default/otbr-agent

Localisez la ligne OTBR_AGENT_OPTS et mettez-la à jour pour qu'elle fasse référence à l'UART de l'application RCP :

OTBR_AGENT_OPTS="-I wpan0 -B eth0 spinel+hdlc+uart:///dev/ttyACM1?uart-baudrate=921600"

Remplacez eth0 par wlan0 si votre Raspberry Pi est connecté via le Wi-Fi.

OTBR_AGENT_OPTS="-I wpan0 -B wlan0 spinel+hdlc+uart:///dev/ttyACM1?uart-baudrate=921600"

L'UART de l'application RCP LP-EM-CC2745R10-Q1 fonctionne à 921 600 bauds. Vérifiez que le chemin d'accès à l'appareil (/dev/ttyACM1 dans cet exemple) correspond à l'UART de l'application de votre carte RCP.

Redémarrez l'agent OTBR pour appliquer la configuration :

$ sudo systemctl restart otbr-agent
$ sudo systemctl enable otbr-agent

Vérifiez que l'agent est en cours d'exécution :

$ sudo systemctl status otbr-agent

Interagir avec le nœud RCP

Communiquez avec le nœud RCP à l'aide de l'outil ot-ctl :

$ sudo ot-ctl state
disabled
Done

Vous pouvez surveiller le journal de l'agent OTBR pour les messages de connexion et d'état :

$ sudo journalctl -u otbr-agent -f

L'interface Web OTBR est disponible à l'adresse http://:80 et fournit une vue graphique du réseau Thread.

Pour arrêter ou redémarrer l'agent OTBR :

$ sudo systemctl stop otbr-agent
$ sudo systemctl start otbr-agent

À ce stade, vous devriez avoir trois consoles actives :

  1. Terminal série pour la carte 2 (ot-cli-ftd 1) sur l'ordinateur hôte.
  2. Terminal série pour la carte 3 (ot-cli-ftd 2) sur l'ordinateur hôte.
  3. Session SSH ou de terminal sur le Raspberry Pi pour ot-ctl (OTBR/RCP).

Vous êtes maintenant prêt à former un réseau Thread.

10. Créer un réseau Thread

Configurer RCP (OTBR)

Créez un réseau Thread à partir du shell ot-ctl sur le Raspberry Pi. Saisissez les commandes suivantes dans l'ordre :

Index

Commande

Description

Réponse attendue

1

dataset init new

Créez une configuration réseau.

OK

2

dataset commit active

Validez le nouvel ensemble de données dans l'ensemble de données opérationnelles actives.

OK

3

ifconfig up

Activez l'interface Thread.

OK

4

thread start

Activez et associez l'opération du protocole Thread.

OK

Patientez 10 secondes pour que l'interface Thread s'affiche.

5

state

Vérifiez l'état de l'appareil. Il doit être défini sur leader. Les autres états possibles sont : hors connexion, désactivé, détaché, enfant, routeur ou leader.

leader
OK

6

dataset

Affichez la configuration réseau. Vos valeurs seront différentes. Notez le canal, la clé réseau, le nom du réseau et l'ID PAN. Vous en aurez besoin pour ajouter des FTD au réseau.

Active Timestamp: 1
Channel: 20
Channel Mask: 0x07fff800
Ext PAN ID: 39ba71f7fc367160
Mesh Local Prefix: fd5c:c6b:3a17:40b9::/64
Network Key: 81ae2c2c17368d585dee71eaa8cf1e90
Network Name: OpenThread-008c
PAN ID: 0x008c
PSKc: c98f0193d4236025d22dd0ee614e641f
Security Policy: 0, onrcb
Done

Ajouter des FTD au réseau Thread (méthode hors bande)

Avec la méthode de configuration hors bande, vous fournissez directement les identifiants réseau. Dans le terminal série de chaque carte FTD, saisissez les commandes suivantes en utilisant le canal et la clé réseau de la sortie de l'ensemble de données OTBR ci-dessus :

Index

Commande

Description

Réponse attendue

1

dataset channel 20

Définissez le canal pour qu'il corresponde à l'OTBR. Remplacez 20 par la valeur du canal de votre OTBR.

OK

2

dataset networkkey 81ae2c2c17368d585dee71eaa8cf1e90

Définissez la clé réseau. Remplacez par la clé réseau de votre OTBR. Seule cette clé est requise pour la pièce jointe.

OK

3

dataset commit active

Validez le nouvel ensemble de données dans l'ensemble de données opérationnelles actives.

OK

4

ifconfig up

Activez l'interface Thread.

OK

5

thread start

Activez et associez l'opération du protocole Thread.

OK

Patientez 20 secondes pendant que l'appareil rejoint le réseau et se configure.

6

state

Vérifiez l'état de l'appareil.

enfant
OK

En raison de la nature auto-configurable des réseaux Thread et du fait qu'il s'agit d'appareils Thread complets, l'un ou les deux FTD peuvent éventuellement devenir des routeurs. Vous pouvez vérifier le rôle actuel à tout moment à l'aide de la commande state.

Communication entre les appareils Thread

Utilisez la commande ping pour vérifier que les appareils peuvent communiquer. Obtenez les adresses IPv6 de chaque appareil avec ipaddr :

> ipaddr
fd5c:c6b:3a17:40b9:0:ff:fe00:fc00		# Leader Anycast Locator (ALOC)
fd5c:c6b:3a17:40b9:0:ff:fe00:1800		# Routing Locator (RLOC)
fd5c:c6b:3a17:40b9:84e2:bae8:bd5b:fa03		# Mesh-Local EID (ML-EID)
fe80:0:0:0:c449:ca4a:101f:5d16			# Link-Local Address (LLA)
Done

À partir des deux FTD, envoyez un ping à l'OTBR à l'aide de son adresse RLOC :

> ping fd5c:c6b:3a17:40b9:0:ff:fe00:1800
Done
>
> 16 bytes from fd5c:c6b:3a17:40b9:0:ff:fe00:1800: icmp_seq=3 hlim=64 time=30ms
16 bytes from fd5c:c6b:3a17:40b9:0:ff:fe00:1800: icmp_seq=3 hlim=64 time=52ms

Une réponse réussie confirme que le réseau Thread fonctionne et que les appareils peuvent communiquer. Répétez la procédure pour envoyer un ping à chaque FTD depuis l'OTBR (sudo ot-ctl ping ).

11. Félicitations

Vous avez créé un réseau Thread avec des cartes TI CC2745R10-Q1.

Vous savez maintenant :

  • Configurer l'environnement de compilation ot-ti de Texas Instruments
  • Découvrez comment compiler et flasher les binaires de l'interface de ligne de commande OpenThread sur la carte de développement LP-EM-CC2745R10-Q1.
  • Configurer un Raspberry Pi en tant que routeur de bordure OpenThread (OTBR) à l'aide d'ot-br-posix.
  • Comment créer un réseau Thread sur l'OTBR ?
  • Mise en service hors bande d'appareils sur un réseau Thread.
  • Comment vérifier la communication Thread entre les nœuds à l'aide de la commande ping.

Documentation complémentaire

Consultez openthread.io et GitHub pour accéder à diverses ressources OpenThread, y compris :