Criar uma rede Thread com o SimpleLink F3 da Texas Instruments e o OpenThread

1. Introdução

Logotipo do OpenThread

O OpenThread (OT) do Google é uma implementação de código aberto do Thread. O Google lançou o OpenThread para disponibilizar amplamente aos desenvolvedores a tecnologia de rede usada nos produtos Google Nest, acelerando o desenvolvimento de produtos para aplicações de casas conectadas e edifícios comerciais. Com uma camada de abstração de plataforma estreita e um pequeno consumo de memória, o OpenThread é altamente portátil. Ele oferece suporte a designs de system-on-chip (SoC) e coprocessador de rede (NCP).

A especificação do Thread define um protocolo de comunicação sem fio confiável, seguro e de baixo consumo de energia entre dispositivos com base em IPv6 para aplicações em casas e edifícios comerciais.

A Texas Instruments implementou o OpenThread para a família de dispositivos SimpleLink™ CC27xx. O repositório ot-ti no GitHub contém os drivers de plataforma e os aplicativos de exemplo necessários para executar o OpenThread em MCUs conectados SimpleLink da Texas Instruments. O CC2745R10-Q1 é um MCU sem fio IEEE 802.15.4 certificado pelo Thread e de nível automotivo (qualificado para AEC-Q100) da família SimpleLink CC27xx da TI.

Este codelab descreve como começar a desenvolver aplicativos OpenThread com a placa de avaliação LP-EM-CC2745R10-Q1 LaunchPad e o repositório ot-ti. A imagem abaixo mostra a configuração de hardware usada neste codelab, com um roteador de borda OT (OTBR) e dois dispositivos Thread Full Thread (FTDs).

Configuração de hardware do CC2745R10

O que você vai aprender

  • Como configurar o ambiente de build ot-ti da Texas Instruments.
  • Como criar e gravar binários da CLI OpenThread em placas LP-EM-CC2745R10-Q1.
  • Como configurar um Raspberry Pi como um roteador de borda OpenThread (OTBR) usando ot-br-posix.
  • Como criar uma rede Thread no OTBR.
  • Provisionamento fora da banda de dispositivos em uma rede Thread.
  • Como verificar a comunicação de linhas de execução entre nós usando o comando ping.

2. Pré-requisitos

Hardware

  1. 3 placas LP-EM-CC2745R10-Q1 LaunchPad: uma configurada como um RCP conectado ao roteador de borda e duas configuradas como dispositivos Thread completos (FTD, na sigla em inglês). LP-EM-CC2745R10-Q1 Angled ViewO CC2745R10-Q1 é um MCU sem fio IEEE 802.15.4 certificado pelo Thread de nível automotivo (qualificado pela AEC-Q100) na família SimpleLink CC27xx da TI. O LP-EM-CC2745R10-Q1 é o módulo de avaliação do LaunchPad correspondente e oferece suporte às funções RCP, FTD, MTD e NCP Thread. O CC2340R5 com o LaunchPad LP-EM-CC2340R5 é uma opção de memória menor que pode servir apenas como RCP. Ele não é compatível com funções de FTD, MTD ou NCP. Se você substituir um LP-EM-CC2340R5 pela placa 1 (RCP), as duas placas FTD ainda precisarão ser LP-EM-CC2745R10-Q1.
  2. 3 sondas de depuração LP-XDS110ET: uma para cada placa LaunchPad, usadas para programação e depuração por USB. LP-XDS110ET Angled ViewO LP-XDS110ET é uma sonda de depuração USB separada necessária para LaunchPads no formato LP-EM. Ele inclui suporte ao EnergyTrace para criação de perfis de energia. O LP-XDS110 é uma alternativa de menor custo que oferece a mesma capacidade de programação e depuração, mas não inclui o EnergyTrace. Como outra alternativa, um LaunchPad com uma sonda de depuração XDS110 integrada (como o LAUNCHXL-CC26X2R1) pode ser usado no lugar da placa LP-EM e de uma sonda de depuração separada. Consulte o guia de conectividade de depuração do LaunchPad para mais detalhes.
  3. 3 cabos micro USB para conectar e alimentar as placas LaunchPad e sondas de depuração.
  4. Um Raspberry Pi 4B ou mais recente com o Raspberry Pi OS conectado à Internet por Ethernet. Ele será configurado como o host do roteador de borda OT.Raspberry Pi 4
  5. Um sistema host Linux ou macOS com pelo menos duas portas USB e acesso à Internet. O ambiente de build exige um shell compatível com Bash. Usuários do Windows precisam usar o WSL2 (Subsistema Windows para Linux 2) com o Ubuntu.
  6. Pelo menos um cabo Ethernet para conectar o Raspberry Pi à Internet. Como alternativa, conecte o Raspberry Pi ao Wi-Fi e use wlan0 como a interface de infraestrutura. Consulte a etapa de configuração do OTBR para mais detalhes.

Software

  • Repositório TI ot-ti: https://github.com/TexasInstruments/ot-ti
  • GNU ARM Embedded Toolchain 12.2 (instalado automaticamente pelo script de bootstrap)
  • SysConfig 1.27.0 (instalado automaticamente pelo script de bootstrap)
  • TI UniFlash: para gravar firmware nas placas LaunchPad.

3. Configuração de hardware

Este codelab usa três placas LP-EM-CC2745R10-Q1:

  • Placa 1 (RCP): executa o firmware ot-rcp. Conectado ao Raspberry Pi via USB como o coprocessador de rádio do roteador de borda.
  • Placa 2 (FTD 1): executa o firmware ot-cli-ftd como um dispositivo Thread completo.
  • Placa 3 (FTD 2): executa o firmware ot-cli-ftd como um dispositivo Thread completo.

LP-EM-CC2745R10-Q1 Top View

Conecte cada LaunchPad ao computador host via microUSB. A conexão USB fornece energia e capacidade de depuração/programação pela sonda de depuração XDS110 integrada.

Cada LP-EM-CC2745R10-Q1 aparece como duas portas seriais virtuais quando conectado por USB: uma para a interface de depuração XDS110 e outra para o UART do aplicativo. Ao abrir um console serial, conecte-se à porta UART do aplicativo/usuário, não à porta de dados auxiliar.

Diagrama de conexão de hardware

4. Configuração e build do repositório

O sistema de build ot-ti usa o CMake e exige um shell Bash. Todos os comandos desta seção são executados no host Linux ou macOS (ou WSL2 no Windows).

1. Clonar o repositório

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

2. Executar o script de bootstrap

O script de bootstrap instala as dependências necessárias, incluindo a cadeia de ferramentas GNU ARM e o SysConfig:

$ ./script/bootstrap

O script de inicialização exige cmake, git, wget e ferramentas de build padrão. No Ubuntu/Debian, instale os pré-requisitos com: sudo apt-get install -y cmake git make wget tar ninja-build

3. Criar firmware para LP_EM_CC2745R10_Q1

Crie todas as imagens de firmware para a placa LP-EM-CC2745R10-Q1:

$ ./script/build LP_EM_CC2745R10_Q1

O destino de build LP_EM_CC2745R10_Q1 corresponde ao dispositivo CC2745R10-Q1 na família CC27xx SimpleLink (núcleo Arm Cortex-M33F). Para conferir todas as placas compatíveis, execute ./script/build sem argumentos.

Após uma build bem-sucedida, os binários ELF estão em build/bin/:

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

As duas imagens usadas neste codelab são:

  • ot-rcp.out: firmware do coprocessador de rádio para a placa do roteador de borda.
  • ot-cli-ftd.out: firmware completo da CLI do dispositivo Thread para as duas placas FTD.

Dispositivo Thread mínimo opcional:se você quiser usar um dispositivo final em modo de espera em vez de um dispositivo Thread completo, faça o flash de ot-cli-mtd.out em vez de ot-cli-ftd.out nas placas 2 e 3. Um MTD não roteia o tráfego do Thread e pode entrar em estados de suspensão de baixo consumo de energia, o que o torna adequado para aplicativos alimentados por bateria. As etapas de formação da rede Thread neste codelab são as mesmas para os dois tipos de dispositivos.

Coprocessador de rede (NCP) opcional: o binário ot-ncp-ftd.out implementa a arquitetura NCP, em que a pilha OpenThread é executada no dispositivo e um processador host a aciona pelo protocolo Spinel. O uso do NCP está fora do escopo deste codelab. Consulte o README do NCP para mais detalhes.

5. Atualizar o firmware

Use o TI UniFlash (link em inglês) para atualizar as imagens ELF nas placas LaunchPad.

Atualizar usando o UniFlash

  1. Abra o UniFlash. As placas LaunchPad conectadas são mostradas em Dispositivos detectados devido ao recurso de detecção automática de dispositivos.Se a placa não for detectada automaticamente, clique em Nova configuração, selecione o destino LP-EM-CC2745R10-Q1 e escolha a sonda de depuração USB XDS110.Dispositivos detectados pelo UniFlash
  2. Selecione Placa 1 (para ser atualizada com ot-rcp.out) e clique em Iniciar.
  3. Clique no botão Procurar e navegue até ot-ti/build/bin/ot-rcp.out.Página do UniFlash Flash
  4. Clique em Carregar imagem para atualizar o firmware. A área de registros mostra o progresso e confirma a conclusão.
  5. Repita as etapas de 2 a 4 para Quadro 2 e Quadro 3, selecionando ot-ti/build/bin/ot-cli-ftd.out para cada um.

Alternativa: fazer o flash usando o Code Composer Studio (CCS)

O Code Composer Studio pode ser usado como alternativa ao UniFlash e também oferece um ambiente de depuração completo:

  1. Faça o download e instale o Code Composer Studio.
  2. Crie uma conexão de destino (CCXML) para o LP-EM-CC2745R10-Q1 com o depurador XDS110. Consulte o Guia do usuário do CCS: método manual.
  3. Inicie uma sessão de depuração sem projeto, conforme descrito em Guia do usuário do CCS: inicialização manual.
  4. Conecte-se ao núcleo Arm Cortex-M33 e clique em Load para carregar a imagem ELF.

A configuração padrão do CCXML usa cJTAG de dois fios para corresponder à configuração padrão do jumper LP-EM-CC2745R10-Q1. Depois de programar via JTAG, reinicie a placa para limpar a flag de interrupção na inicialização.

6. Programar o HSM

O CC2745R10-Q1 contém um módulo de segurança de hardware (HSM) que precisa ser provisionado antes de executar o Thread ou outro firmware de aplicativo seguro. Se a placa LP-EM-CC2745R10-Q1 ainda não tiver o HSM programado, conclua esta etapa agora.

Para programar o HSM usando o UniFlash:

  1. Abra o UniFlash e selecione a placa LP-EM-CC2745R10-Q1 em Dispositivos detectados.
  2. Navegue até o painel de programação do HSM e carregue a imagem do firmware do HSM, como mostrado abaixo.

Programação de HSM UniFlash

  1. Siga as instruções na tela para concluir o provisionamento do HSM. A operação é registrada no console de saída do UniFlash.

Consulte o Guia de início rápido do CC2745R10-Q1 no TI Resource Explorer para conferir o procedimento completo de programação do HSM, incluindo o caminho da imagem de firmware necessário no SDK SimpleLink Low Power F3.

7. Resumo do firmware

Neste ponto, todas as três placas precisam ser atualizadas:

  • Placa 1 : ot-rcp.out: desconecte do computador host e conecte ao Raspberry Pi por USB.
  • Quadro 2 : ot-cli-ftd.out: mantenha a conexão com o computador host.
  • Placa 3 : ot-cli-ftd.out: mantenha a conexão com o computador host.

Sua configuração de hardware será semelhante ao diagrama abaixo. A placa 1 se conecta ao Raspberry Pi como o coprocessador de rádio para o OTBR, enquanto as placas 2 e 3 permanecem conectadas ao computador host para acesso ao console serial.

Configuração de hardware CC2745R10 com FTDs

8. Configurar o console serial para dispositivos ot-cli-ftd

O LP-EM-CC2745R10-Q1 expõe o UART do aplicativo via USB a 921600 baud.

Abra um terminal serial para a porta COM UART do aplicativo (Windows) ou o dispositivo /dev/ttyACM* (Linux/macOS) para cada placa FTD usando estas configurações:

Parâmetro

Valor

Velocidade (baud)

921600

Bits de dados

8

Bits de parada

1

Paridade

None

Controle de fluxo

None

Dica (Linux/macOS): identifique o nó de dispositivo correto executando ls /dev/ttyACM* antes e depois de conectar uma placa e observando qual entrada aparece. Cada LP-EM-CC2745R10-Q1 cria duas entradas: a porta com número menor é a UART de depuração XDS110, e a porta com número maior é a UART de aplicativo. Por exemplo, se o quadro criar /dev/ttyACM0 e /dev/ttyACM1, use /dev/ttyACM1.

Dica (Windows): abra o Gerenciador de dispositivos e procure em Portas (COM e LPT) duas novas portas COM quando uma placa estiver conectada. A porta de dados de depuração XDS110 geralmente aparece primeiro. Use a segunda porta COM (de número mais alto) para o console do aplicativo.

Pressione Enter no terminal para receber um prompt da CLI do OpenThread (>). Para conferir uma lista completa de comandos disponíveis, consulte a referência da CLI do OpenThread. Verifique se o FTD está operacional:

> state
disabled
Done

FTDs de terminal serial

Você ainda não vai configurar um console serial para a placa RCP. O OTBR no Raspberry Pi se comunica diretamente com o RCP. Na próxima etapa, você vai configurar o Raspberry Pi como o roteador de borda OpenThread.

9. Configurar o Raspberry Pi como um roteador de borda

O OTBR foi desenvolvido com base no ot-br-posix, o projeto de roteador de borda OpenThread de código aberto. O roteador de borda é executado no Raspberry Pi e usa a placa 1 (RCP) como rádio 802.15.4 via USB.

Configuração do Raspberry Pi

  1. Grave o Raspberry Pi OS (64 bits Lite ou Desktop) no cartão SD usando o Raspberry Pi Imager.
  2. Inicialize o Raspberry Pi e abra um terminal (via SSH ou diretamente).
  3. Atualize o gerenciador de pacotes e faça upgrade dos pacotes instalados:
    $ sudo apt-get update
    $ sudo apt-get upgrade -y
    

Reinicie o Raspberry Pi após as atualizações antes de continuar: sudo reboot

Conecte a placa 1 (RCP) ao Raspberry Pi

Conecte a placa 1 (com o ot-rcp gravado) ao Raspberry Pi por micro USB. Depois da conexão, verifique se o nó do dispositivo aparece:

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

A UART do aplicativo da placa RCP normalmente é /dev/ttyACM1 (a UART de depuração XDS110 é /dev/ttyACM0). Verifique qual porta é a UART do aplicativo conferindo se ela responde quando o agente OTBR é iniciado em uma etapa posterior. Se outros dispositivos seriais USB estiverem conectados, o número do nó do dispositivo poderá ser diferente. Ajuste o caminho na configuração do OTBR de acordo.

Criar e instalar o ot-br-posix

No Raspberry Pi, clone e crie o ot-br-posix:

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

Execute o script de configuração, especificando sua interface Ethernet como a interface de backbone (infraestrutura):

$ INFRA_IF_NAME=eth0 ./script/setup

eth0 é o nome típico da interface Ethernet com fio. Se você estiver conectando o Raspberry Pi por Wi-Fi em vez de Ethernet, substitua eth0 por wlan0 e verifique se o Pi já está conectado à sua rede Wi-Fi. Verifique o nome da interface ativa com ip link show.

O script de configuração cria o ot-br-posix da origem, instala os serviços de sistema otbr-agent e otbr-web e configura a pilha de rede. Esse processo geralmente leva de 10 a 20 minutos em um Raspberry Pi 4B.

Configurar o agente OTBR

Edite o arquivo de configuração do agente OTBR para especificar o caminho do dispositivo RCP e a taxa de transmissão:

$ sudo nano /etc/default/otbr-agent

Localize a linha OTBR_AGENT_OPTS e atualize-a para fazer referência ao UART do aplicativo RCP:

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

Substitua eth0 por wlan0 se o Raspberry Pi estiver conectado por Wi-Fi.

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

A UART do aplicativo RCP LP-EM-CC2745R10-Q1 opera a 921600 bauds. Verifique se o caminho do dispositivo (/dev/ttyACM1 neste exemplo) corresponde ao UART do aplicativo da placa RCP.

Reinicie o agente OTBR para aplicar a configuração:

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

Verifique se o agente está em execução:

$ sudo systemctl status otbr-agent

Interagir com o nó RCP

Comunique-se com o nó RCP usando a ferramenta ot-ctl:

$ sudo ot-ctl state
disabled
Done

Monitore o registro do agente OTBR para mensagens de conexão e status:

$ sudo journalctl -u otbr-agent -f

A interface da Web do OTBR está disponível em http://:80 e oferece uma visualização gráfica da rede Thread.

Para interromper ou reiniciar o agente OTBR:

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

Neste ponto, você terá três consoles ativos:

  1. Terminal serial para Board 2 (ot-cli-ftd 1) no computador host.
  2. Terminal serial para Board 3 (ot-cli-ftd 2) no computador host.
  3. Sessão de SSH ou terminal no Raspberry Pi para ot-ctl (OTBR/RCP).

Agora você já pode formar uma rede Thread.

10. Criar uma rede Thread

Configurar o RCP (OTBR)

Crie uma rede Thread no shell ot-ctl do Raspberry Pi. Insira os seguintes comandos em ordem:

Índice

Comando

Descrição

Resposta esperada

1

dataset init new

Crie uma nova configuração de rede.

Concluído

2

dataset commit active

Confirme o novo conjunto de dados no conjunto de dados operacional ativo.

Concluído

3

ifconfig up

Ative a interface Thread.

Concluído

4

thread start

Ative e anexe a operação do protocolo Thread.

Concluído

Aguarde 10 segundos para que a interface do Thread apareça.

5

state

Verifique o estado do dispositivo. Ele precisa ser leader. Outros estados possíveis: offline, desativado, desconectado, filho, roteador ou líder.

líder
Concluído

6

dataset

Confira a configuração de rede. Seus valores serão diferentes. Anote o canal, a chave de rede, o nome da rede e o ID do PAN. Eles são necessários para conectar FTDs à rede.

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

Adicionar FTDs à rede Thread (método fora da banda)

Usando o método de provisionamento fora da banda, você fornece as credenciais de rede diretamente. No terminal serial de cada placa FTD, insira os comandos a seguir usando a chave de canal e de rede da saída do conjunto de dados OTBR acima:

Índice

Comando

Descrição

Resposta esperada

1

dataset channel 20

Defina o canal para corresponder ao OTBR. Substitua 20 pelo valor do canal do OTBR.

Concluído

2

dataset networkkey 81ae2c2c17368d585dee71eaa8cf1e90

Defina a chave de rede. Substitua pela chave de rede do OTBR. Apenas essa chave é necessária para anexar.

Concluído

3

dataset commit active

Confirme o novo conjunto de dados no conjunto de dados operacional ativo.

Concluído

4

ifconfig up

Ative a interface Thread.

Concluído

5

thread start

Ative e anexe a operação do protocolo Thread.

Concluído

Aguarde 20 segundos enquanto o dispositivo entra e se configura.

6

state

Verifique o estado do dispositivo.

criança
Concluído

Devido à natureza de autoconfiguração das redes Thread e ao fato de serem dispositivos Thread completos, um ou os dois FTDs podem se tornar roteadores. É possível verificar a função atual a qualquer momento com o comando state.

Comunicação entre dispositivos Thread

Use o comando ping para verificar se os dispositivos podem se comunicar. Consiga os endereços IPv6 de cada dispositivo com 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

Em ambos os FTDs, faça ping no OTBR usando o endereço 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

Uma resposta bem-sucedida confirma que a rede Thread está funcionando e que os dispositivos podem se comunicar. Repita o processo para fazer ping em cada FTD do OTBR (sudo ot-ctl ping ).

11. Parabéns

Você criou uma rede Thread com placas TI CC2745R10-Q1.

Agora você sabe:

  • Como configurar o ambiente de build ot-ti da Texas Instruments.
  • Como criar e gravar binários da CLI do OpenThread no LaunchPad LP-EM-CC2745R10-Q1.
  • Como configurar um Raspberry Pi como um roteador de borda OpenThread (OTBR) usando ot-br-posix.
  • Como criar uma rede Thread no OTBR.
  • Provisionamento fora da banda de dispositivos em uma rede Thread.
  • Como verificar a comunicação de linhas de execução entre nós usando o comando ping.

Leitura adicional

Confira openthread.io e GitHub para acessar vários recursos do OpenThread, incluindo: