Crea una rete Thread con Texas Instruments SimpleLink F3 e OpenThread

1. Introduzione

Logo OpenThread

OpenThread (OT) di Google è un'implementazione open source di Thread. Google ha rilasciato OpenThread per rendere la tecnologia di rete utilizzata nei prodotti Google Nest ampiamente disponibile agli sviluppatori, accelerando lo sviluppo di prodotti per la casa connessa e applicazioni per edifici commerciali. Grazie a un livello di astrazione della piattaforma ristretto e a un footprint della memoria ridotto, OpenThread è altamente portabile. Supporta sia i progetti system-on-chip (SoC) che quelli di coprocessore di rete (NCP).

La specifica Thread definisce un protocollo di comunicazione wireless affidabile, sicuro e a basso consumo basato su IPv6 per applicazioni domestiche e commerciali.

Texas Instruments ha implementato OpenThread per la famiglia di dispositivi SimpleLink™ CC27xx. Il repository ot-ti su GitHub contiene i driver della piattaforma e le applicazioni di esempio necessari per eseguire OpenThread su MCU connesse SimpleLink di Texas Instruments. CC2745R10-Q1 è una MCU wireless IEEE 802.15.4 con certificazione Thread di livello automobilistico (qualificata AEC-Q100) della famiglia SimpleLink CC27xx di TI.

Questo codelab descrive come iniziare a sviluppare applicazioni OpenThread con la scheda di valutazione LaunchPad LP-EM-CC2745R10-Q1 e il repository ot-ti. L'immagine seguente mostra la configurazione hardware utilizzata in questo codelab, con un router di confine OT (OTBR) e due dispositivi Thread Full Thread (FTD).

Configurazione hardware CC2745R10

Obiettivi didattici

  • Come configurare l'ambiente di build ot-ti di Texas Instruments.
  • Come creare e caricare i binari della CLI OpenThread sulle schede LP-EM-CC2745R10-Q1.
  • Come configurare un Raspberry Pi come OpenThread Border Router (OTBR) utilizzando ot-br-posix.
  • Come creare una rete Thread sull'OTBR.
  • Messa in servizio out-of-band dei dispositivi su una rete Thread.
  • Come verificare la comunicazione Thread tra i nodi utilizzando il comando ping.

2. Prerequisiti

Hardware

  1. 3 schede LaunchPad LP-EM-CC2745R10-Q1: una configurata come RCP connesso al router di confine e due configurate come dispositivi Thread completi (FTD). LP-EM-CC2745R10-Q1 Angled ViewCC2745R10-Q1 è una MCU wireless IEEE 802.15.4 con certificazione Thread di livello automotive (qualificata AEC-Q100) nella famiglia SimpleLink CC27xx di TI. LP-EM-CC2745R10-Q1 è il modulo di valutazione LaunchPad corrispondente e supporta i ruoli RCP, FTD, MTD e NCP Thread. CC2340R5 con LP-EM-CC2340R5 LaunchPad è un'opzione con meno memoria che può fungere solo da RCP. Non supporta i ruoli FTD, MTD o NCP. Se sostituisci una LP-EM-CC2340R5 con la scheda 1 (RCP), le due schede FTD devono comunque essere LP-EM-CC2745R10-Q1.
  2. 3 sonde di debug LP-XDS110ET: una per scheda LaunchPad, utilizzate per la programmazione e il debug tramite USB. LP-XDS110ET vista inclinataLP-XDS110ET è una sonda di debug USB separata necessaria per le LaunchPad nel fattore di forma LP-EM. Include il supporto di EnergyTrace per la profilazione del consumo energetico. LP-XDS110 è un'alternativa a costo inferiore che offre le stesse funzionalità di programmazione e debug, ma non include EnergyTrace. In alternativa, è possibile utilizzare un LaunchPad con una sonda di debug XDS110 integrata (come LAUNCHXL-CC26X2R1) al posto della scheda LP-EM e di una sonda di debug separata. Per informazioni dettagliate, consulta la guida alla connettività di debug di LaunchPad.
  3. 3 cavi micro USB per collegare e alimentare le schede LaunchPad e le sonde di debug.
  4. Raspberry Pi 4B o versioni successive con Raspberry Pi OS connesso a internet tramite Ethernet. Verrà configurato come host del router di confine OT.Raspberry Pi 4
  5. Un sistema host Linux o macOS con almeno 2 porte USB e accesso a internet. L'ambiente di build richiede una shell compatibile con Bash. Gli utenti Windows devono utilizzare WSL2 (Windows Subsystem for Linux 2) con Ubuntu.
  6. Almeno un cavo Ethernet per collegare Raspberry Pi a internet. In alternativa, puoi connettere Raspberry Pi al Wi-Fi e utilizzare wlan0 come interfaccia dell'infrastruttura. Per maggiori dettagli, consulta il passaggio di configurazione di OTBR.

Software

  • Repository TI ot-ti: https://github.com/TexasInstruments/ot-ti
  • GNU ARM Embedded Toolchain 12.2 (installato automaticamente dallo script di bootstrap)
  • SysConfig 1.27.0 (installato automaticamente dallo script di bootstrap)
  • TI UniFlash: per il flashing del firmware sulle schede LaunchPad

3. Configurazione hardware

Questo codelab utilizza tre schede LP-EM-CC2745R10-Q1:

  • Scheda 1 (RCP): esegue il firmware ot-rcp. Collegato a Raspberry Pi tramite USB come coprocessore radio per il router di confine.
  • Scheda 2 (FTD 1): esegue il firmware ot-cli-ftd come dispositivo Full Thread.
  • Scheda 3 (FTD 2): esegue il firmware ot-cli-ftd come dispositivo Full Thread.

LP-EM-CC2745R10-Q1 Vista dall'alto

Collega ogni Launchpad al computer host tramite micro USB. La connessione USB fornisce sia l'alimentazione che la funzionalità di debug/programmazione tramite la sonda di debug XDS110 integrata.

Ogni LP-EM-CC2745R10-Q1 viene visualizzato come due porte seriali virtuali quando è collegato tramite USB: una per l'interfaccia di debug XDS110 e una per la UART dell'applicazione. Quando apri una console seriale, connettiti alla porta UART applicazione/utente, non alla porta dati ausiliari.

Diagramma di collegamento hardware

4. Configurazione e build del repository

Il sistema di compilazione ot-ti utilizza CMake e richiede una shell Bash. Tutti i comandi in questa sezione vengono eseguiti sull'host Linux o macOS (o WSL2 su Windows).

1. Clona il repository

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

2. Esegui lo script di bootstrap

Lo script di bootstrap installa le dipendenze richieste, tra cui la toolchain GNU ARM e SysConfig:

$ ./script/bootstrap

Lo script di bootstrap richiede cmake, git, wget e strumenti di compilazione standard. Su Ubuntu/Debian, installa i prerequisiti con: sudo apt-get install -y cmake git make wget tar ninja-build

3. Crea firmware per LP_EM_CC2745R10_Q1

Crea tutte le immagini firmware per la scheda LP-EM-CC2745R10-Q1:

$ ./script/build LP_EM_CC2745R10_Q1

La destinazione di build LP_EM_CC2745R10_Q1 corrisponde al dispositivo CC2745R10-Q1 della famiglia CC27xx SimpleLink (core Arm Cortex-M33F). Per visualizzare tutte le schede supportate, esegui ./script/build senza argomenti.

Dopo una build riuscita, i binari ELF si trovano in build/bin/:

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

Le due immagini utilizzate in questo codelab sono:

  • ot-rcp.out: firmware del coprocessore radio per la scheda del router di confine.
  • ot-cli-ftd.out: firmware della CLI Full Thread Device per le due schede FTD.

Dispositivo Thread minimo opzionale:se vuoi esplorare un dispositivo di destinazione inattivo anziché un dispositivo Thread completo, puoi eseguire il flashing di ot-cli-mtd.out al posto di ot-cli-ftd.out sulle schede 2 e 3. Un MTD non instrada il traffico Thread e può entrare in stati di sospensione a basso consumo energetico, il che lo rende adatto ad applicazioni alimentate a batteria. I passaggi di formazione della rete Thread in questo codelab sono gli stessi per entrambi i tipi di dispositivi.

Coprocessore di rete (NCP) opzionale: il binario ot-ncp-ftd.out implementa l'architettura NCP, in cui lo stack OpenThread viene eseguito sul dispositivo e un processore host lo gestisce tramite il protocollo Spinel. L'utilizzo di NCP non rientra nell'ambito di questo codelab. Per maggiori dettagli, consulta il file README di NCP.

5. Flash Firmware

Utilizza TI UniFlash per copiare le immagini ELF sulle schede LaunchPad.

Flash con UniFlash

  1. Apri UniFlash. Le schede LaunchPad connesse vengono visualizzate in Dispositivi rilevati grazie alla funzionalità di rilevamento automatico dei dispositivi.Se la scheda non viene rilevata automaticamente, fai clic su Nuova configurazione, seleziona la destinazione LP-EM-CC2745R10-Q1 e scegli la sonda di debug USB XDS110.Dispositivi rilevati da UniFlash
  2. Seleziona Scheda 1 (da flashare con ot-rcp.out) e fai clic su Avvia.
  3. Fai clic sul pulsante Sfoglia e vai a ot-ti/build/bin/ot-rcp.out.Pagina Flash UniFlash
  4. Fai clic su Carica immagine per installare il firmware. L'area dei log mostra l'avanzamento e conferma il completamento.
  5. Ripeti i passaggi 2-4 per Board 2 e Board 3, selezionando ot-ti/build/bin/ot-cli-ftd.out per ciascuna.

Alternativa: flash con Code Composer Studio (CCS)

Code Composer Studio può essere utilizzato in alternativa a UniFlash e fornisce inoltre un ambiente di debug completo:

  1. Scarica e installa Code Composer Studio.
  2. Crea una connessione di destinazione (CCXML) per LP-EM-CC2745R10-Q1 con il debugger XDS110. Consulta la Guida dell'utente di CCS: metodo manuale.
  3. Avvia una sessione di debug senza progetto come descritto nella Guida dell'utente di CCS: avvio manuale.
  4. Connettiti al core Arm Cortex-M33 e fai clic su Carica per caricare l'immagine ELF.

La configurazione CCXML predefinita utilizza cJTAG a 2 fili per corrispondere alla configurazione del ponticello LP-EM-CC2745R10-Q1 predefinita. Dopo la programmazione tramite JTAG, riavvia la scheda per cancellare il flag di arresto all'avvio.

6. Programmare l'HSM

CC2745R10-Q1 contiene un modulo di sicurezza hardware (HSM) che deve essere sottoposto al provisioning prima di eseguire Thread o altro firmware di applicazioni sicure. Se la scheda LP-EM-CC2745R10-Q1 non è ancora stata programmata con l'HSM, completa questo passaggio ora.

Per programmare l'HSM utilizzando UniFlash:

  1. Apri UniFlash e seleziona la scheda LP-EM-CC2745R10-Q1 da Detected Devices (Dispositivi rilevati).
  2. Vai al pannello di programmazione HSM e carica l'immagine del firmware HSM come mostrato di seguito.

Programmazione HSM UniFlash

  1. Segui le istruzioni sullo schermo per completare il provisioning dell'HSM. L'operazione viene registrata nella console di output di UniFlash.

Consulta la guida di avvio rapido CC2745R10-Q1 in TI Resource Explorer per la procedura completa di programmazione HSM, incluso il percorso dell'immagine firmware richiesta all'interno dell'SDK SimpleLink Low Power F3.

7. Riepilogo firmware

A questo punto, tutte e tre le schede dovrebbero essere flashate:

  • Scheda 1: ot-rcp.out: disconnettiti dal computer host e connettiti a Raspberry Pi tramite USB.
  • Scheda 2: ot-cli-ftd.out: mantieni la connessione al computer host.
  • Scheda 3: ot-cli-ftd.out: mantieni la connessione al computer host.

La configurazione dell'hardware sarà simile al diagramma riportato di seguito. La scheda 1 si connette a Raspberry Pi come coprocessore radio per OTBR, mentre le schede 2 e 3 rimangono connesse al computer host per l'accesso alla console seriale.

Configurazione hardware CC2745R10 con FTD

8. Configurare la console seriale per i dispositivi ot-cli-ftd

LP-EM-CC2745R10-Q1 espone la UART dell'applicazione tramite USB a 921600 baud.

Apri un terminale seriale sulla porta COM UART dell'applicazione (Windows) o sul dispositivo /dev/ttyACM* (Linux/macOS) per ogni scheda FTD utilizzando queste impostazioni:

Parametro

Valore

Velocità (baud)

921600

Bit di dati

8

Bit di stop

1

Parità

None

Controllo del flusso

None

Suggerimento (Linux/macOS): identifica il nodo del dispositivo corretto eseguendo ls /dev/ttyACM* prima e dopo aver collegato una scheda e annotando quale voce viene visualizzata. Ogni LP-EM-CC2745R10-Q1 crea due voci: la porta con numero inferiore è la UART di debug XDS110 e la porta con numero superiore è la UART dell'applicazione. Ad esempio, se il tabellone crea /dev/ttyACM0 e /dev/ttyACM1, utilizza /dev/ttyACM1.

Suggerimento (Windows): apri Gestione dispositivi e cerca due nuove porte COM in Porte (COM e LPT) quando una scheda è collegata. La porta dati di debug XDS110 in genere viene visualizzata per prima. Utilizza la seconda porta COM (con numero più alto) per la console dell'applicazione.

Premi Invio nel terminale per visualizzare il prompt della CLI OpenThread (>). Per un elenco completo dei comandi disponibili, consulta la documentazione di riferimento della CLI OpenThread. Verifica che FTD sia operativo:

> state
disabled
Done

FTD del terminale seriale

Non configurerai ancora una console seriale per la scheda RCP. OTBR su Raspberry Pi comunica direttamente con RCP. Nel passaggio successivo, configurerai Raspberry Pi come router di confine OpenThread.

9. Configurare Raspberry Pi come router di confine

OTBR è basato su ot-br-posix, il progetto open source OpenThread Border Router. Il router di confine viene eseguito su Raspberry Pi e utilizza la scheda 1 (RCP) come radio 802.15.4 tramite USB.

Configurazione di Raspberry Pi

  1. Installa Raspberry Pi OS (64 bit Lite o Desktop) sulla scheda SD utilizzando Raspberry Pi Imager.
  2. Avvia Raspberry Pi e apri un terminale (tramite SSH o direttamente).
  3. Aggiorna il gestore di pacchetti ed esegui l'upgrade dei pacchetti installati:
    $ sudo apt-get update
    $ sudo apt-get upgrade -y
    

Riavvia Raspberry Pi dopo gli aggiornamenti prima di procedere: sudo reboot

Collega la scheda 1 (RCP) a Raspberry Pi

Collega Board 1 (con flash ot-rcp) a Raspberry Pi tramite micro USB. Dopo la connessione, verifica che venga visualizzato il nodo del dispositivo:

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

La UART dell'applicazione della scheda RCP è in genere /dev/ttyACM1 (la UART di debug XDS110 è /dev/ttyACM0). Verifica quale porta è la UART dell'applicazione controllando che risponda quando l'agente OTBR viene avviato in un passaggio successivo. Se sono collegati altri dispositivi seriali USB, il numero del nodo del dispositivo potrebbe essere diverso. Modifica il percorso nella configurazione OTBR di conseguenza.

Crea e installa ot-br-posix

Su Raspberry Pi, clona e compila ot-br-posix:

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

Esegui lo script di configurazione, specificando l'interfaccia Ethernet come interfaccia backbone (infrastruttura):

$ INFRA_IF_NAME=eth0 ./script/setup

eth0 è il nome tipico dell'interfaccia Ethernet cablata. Se colleghi Raspberry Pi tramite Wi-Fi anziché Ethernet, sostituisci eth0 con wlan0 (e assicurati che Raspberry Pi sia già connesso alla tua rete Wi-Fi). Verifica il nome dell'interfaccia attiva con ip link show.

Lo script di configurazione compila ot-br-posix dall'origine, installa i servizi di sistema otbr-agent e otbr-web e configura lo stack di rete. In genere, questa procedura richiede 10-20 minuti su Raspberry Pi 4B.

Configura l'agente OTBR

Modifica il file di configurazione dell'agente OTBR per specificare il percorso del dispositivo RCP e la velocità di trasmissione:

$ sudo nano /etc/default/otbr-agent

Individua la riga OTBR_AGENT_OPTS e aggiornala in modo che faccia riferimento alla UART dell'applicazione RCP:

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

Sostituisci eth0 con wlan0 se Raspberry Pi è connesso tramite Wi-Fi.

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

La UART dell'applicazione RCP LP-EM-CC2745R10-Q1 funziona a 921600 baud. Verifica che il percorso del dispositivo (/dev/ttyACM1 in questo esempio) corrisponda alla UART dell'applicazione della scheda RCP.

Riavvia l'agente OTBR per applicare la configurazione:

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

Verifica che l'agente sia in esecuzione:

$ sudo systemctl status otbr-agent

Interagire con il nodo RCP

Comunica con il nodo RCP utilizzando lo strumento ot-ctl:

$ sudo ot-ctl state
disabled
Done

Puoi monitorare il log dell'agente OTBR per i messaggi di connessione e di stato:

$ sudo journalctl -u otbr-agent -f

(Facoltativo) L'interfaccia web OTBR è disponibile all'indirizzo http://:80 e fornisce una visualizzazione grafica della rete Thread.

Per arrestare o riavviare l'agente OTBR:

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

A questo punto dovresti avere tre console attive:

  1. Terminale seriale per Board 2 (ot-cli-ftd 1) sul computer host.
  2. Terminale seriale per Board 3 (ot-cli-ftd 2) sul computer host.
  3. Sessione SSH o terminale su Raspberry Pi per ot-ctl (OTBR/RCP).

Ora puoi formare una rete Thread.

10. Creare una rete Thread

Configurare RCP (OTBR)

Crea una nuova rete Thread dalla shell ot-ctl su Raspberry Pi. Inserisci i seguenti comandi in ordine:

Indice

Comando

Descrizione

Risposta prevista

1

dataset init new

Crea una nuova configurazione di rete.

Fine

2

dataset commit active

Esegui il commit del nuovo set di dati nel set di dati operativo attivo.

Fine

3

ifconfig up

Attiva l'interfaccia Thread.

Fine

4

thread start

Abilita e collega l'operazione del protocollo Thread.

Fine

Attendi 10 secondi per visualizzare l'interfaccia di Thread.

5

state

Controlla lo stato del dispositivo. Deve essere leader. Altri stati possibili: offline, disattivato, scollegato, secondario, router o leader.

leader
Fine

6

dataset

Visualizza la configurazione di rete. I tuoi valori saranno diversi. Prendi nota del canale, della chiave di rete, del nome della rete e del PAN ID. Questi dati sono necessari per unire gli FTD alla rete.

Timestamp attivo: 1
Canale: 20
Maschera canale: 0x07fff800
ID PAN esteso: 39ba71f7fc367160
Prefisso locale mesh: fd5c:c6b:3a17:40b9::/64
Chiave di rete: 81ae2c2c17368d585dee71eaa8cf1e90
Nome rete: OpenThread-008c
ID PAN: 0x008c
PSKc: c98f0193d4236025d22dd0ee614e641f
Norme di sicurezza: 0, onrcb
Fine

Aggiungere FTD alla rete Thread (metodo out-of-band)

Utilizzando il metodo di provisioning out-of-band, fornisci direttamente le credenziali di rete. Nel terminale seriale per ogni scheda FTD, inserisci i seguenti comandi utilizzando la chiave di canale e di rete dall'output del set di dati OTBR riportato sopra:

Indice

Comando

Descrizione

Risposta prevista

1

dataset channel 20

Imposta il canale in modo che corrisponda all'OTBR. Sostituisci 20 con il valore del canale dell'OTBR.

Fine

2

dataset networkkey 81ae2c2c17368d585dee71eaa8cf1e90

Imposta la chiave di rete. Sostituisci con la chiave di rete dell'OTBR. Per il collegamento è necessaria solo questa chiave.

Fine

3

dataset commit active

Esegui il commit del nuovo set di dati nel set di dati operativo attivo.

Fine

4

ifconfig up

Attiva l'interfaccia Thread.

Fine

5

thread start

Abilita e collega l'operazione del protocollo Thread.

Fine

Attendi 20 secondi mentre il dispositivo si connette e si configura.

6

state

Controlla lo stato del dispositivo.

bambino
Fine

A causa della natura autoconfigurante delle reti Thread e del fatto che si tratta di Full Thread Device, uno o entrambi gli FTD potrebbero diventare router. Puoi verificare il ruolo attuale in qualsiasi momento con il comando state.

Comunicazione tra i dispositivi Thread

Utilizza il comando ping per verificare che i dispositivi possano comunicare. Recupera gli indirizzi IPv6 di ogni dispositivo con 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

Da entrambi i FTD, esegui il ping dell'OTBR utilizzando il relativo indirizzo 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

Una risposta positiva conferma che la rete Thread è operativa e che i dispositivi possono comunicare. Ripeti la procedura per eseguire il ping di ogni FTD dall'OTBR (sudo ot-ctl ping ).

11. Complimenti

Hai creato una rete Thread con schede TI CC2745R10-Q1.

Ora sai che:

  • Come configurare l'ambiente di build ot-ti di Texas Instruments.
  • Come creare e caricare i file binari della CLI OpenThread sul LaunchPad LP-EM-CC2745R10-Q1.
  • Come configurare un Raspberry Pi come OpenThread Border Router (OTBR) utilizzando ot-br-posix.
  • Come creare una rete Thread sull'OTBR.
  • Messa in servizio out-of-band dei dispositivi su una rete Thread.
  • Come verificare la comunicazione Thread tra i nodi utilizzando il comando ping.

Per approfondire

Visita openthread.io e GitHub per una serie di risorse OpenThread, tra cui: