Pular para o conteúdo principal

Uso do nRFConnect SDK com Seeed Studio XIAO nRF54LM20A Sense

nRF Connect SDK (NCS) é o kit de desenvolvimento de software oficial da Nordic Semiconductor, construído sobre o sistema operacional de tempo real Zephyr RTOS. Ele fornece um framework de desenvolvimento completo, nativo e altamente otimizado para os chips da série nRF. Em comparação com o PlatformIO, o NCS oferece aos desenvolvedores acesso mais completo a todas as capacidades de hardware da série nRF54, incluindo suporte nativo para Bluetooth Low Energy (BLE), Thread, Matter e outras pilhas de protocolos sem fio, bem como gerenciamento de energia e controle de periféricos em nível mais detalhado. A Nordic mantém e atualiza oficialmente este SDK de forma contínua, garantindo compatibilidade ideal com o firmware dos chips e acesso antecipado aos recursos mais recentes.

Este tutorial irá guiá-lo passo a passo por todo o processo — desde a configuração do ambiente de desenvolvimento do nRF Connect SDK e instalação da toolchain, até a criação e configuração do seu primeiro projeto e, por fim, a gravação do seu primeiro programa de exemplo no XIAO nRF54LM20A Sense para vê-lo em funcionamento.

Preparação de hardware

Seeed Studio XIAO nRF54LM20A Sense

Usando o nRF Connect SDK no VSCode

Instalar previamente o conhecimento sobre o nRF Connect SDK

Este documento detalha como instalar o ambiente de desenvolvimento do nRF Connect SDK em um computador com Windows 11. A seguir está uma visão geral das ferramentas que precisam ser instaladas

ninja --version
  • CMake
cmake --version
  • Zephyr SDK
west --version
  • nRF Connect SDK
  • Plugin nRF Connect para VSCode

Se você já o tiver pré-instalado em seu computador, pode verificar o número da versão da sua ferramenta usando o comando abaixo

1
Instalar a extensão

Abra o VS Code e pesquise por nRF Connect for VS Code Extension Pack no Centro de Plugins. Este pacote de plugins instalará automaticamente outros plugins do VS Code necessários para o nRF Connect.


A extensão nRF Connect para VS Code permite que os desenvolvedores utilizem o popular Ambiente de Desenvolvimento Integrado Visual Studio Code (VS Code IDE) para desenvolver, compilar, depurar e implantar aplicações embarcadas baseadas no nRF Connect SDK (Software Development Kit) da Nordic. A extensão inclui ferramentas de desenvolvimento úteis, como interface para compilador, linker, sistema de build completo, depurador com suporte a RTOS, integração perfeita com o nRF Connect SDK, editor de visualização de device tree e um terminal serial integrado.

O pacote de extensão nRF Connect para VS Code inclui os seguintes componentes:

  • nRF Connect for VS Code: A extensão principal contém a interface entre o sistema de build e o nRF Connect SDK, bem como uma interface para gerenciar a versão do nRF Connect SDK e da toolchain.
  • nRF DeviceTree: Fornece suporte à linguagem de device tree e um editor de visualização de device tree.
  • nRF Kconfig: Fornece suporte à linguagem Kconfig.
  • nRF Terminal: Terminais seriais e RTT.
  • Microsoft C/C++: Adiciona suporte de linguagem para C/C++, incluindo recursos do IntelliSense.
  • CMake: Suporte à linguagem CMake.
  • GNU Linker Mapping Files: Suporte para arquivos de mapeamento do linker. Podemos baixar qualquer versão preferida do nRF Connect SDK e sua toolchain por meio da extensão. A documentação completa do nRF Connect para VS Code está disponível em https://docs.nordicsemi.com/bundle/nrf-connect-vscode/page/index.html.
2
Instalando a toolchain

A toolchain é um conjunto de ferramentas que trabalham juntas para compilar aplicações do nRF Connect SDK, incluindo montador, compilador, linker e componentes do CMake. Na primeira vez que você abrir o nRF Connect para VS Code, será solicitado que instale a toolchain. Isso geralmente acontece se a extensão não detectar nenhuma toolchain instalada em seu computador. Clique em Install Toolchain e será exibida uma lista de versões de toolchain que podem ser baixadas e instaladas em seu computador. Selecione a versão da toolchain que corresponde à versão do nRF Connect SDK que você planeja usar. Recomendamos sempre usar a versão marcada mais recente do nRF Connect SDK.

Por padrão, o nRF Connect para VS Code exibe apenas a aba Released (ou seja, a versão estável) da toolchain. Se você estiver avaliando um novo recurso e quiser usar a aba Preview ou outro tipo de aba (por exemplo, Customer Sampling -cs), clique em "Show all toolchain versions" como mostrado abaixo:

nota

A ToolChain aqui é 3.3.0 ou superior

3
Instalando o nRF Connect SDK

Na extensão nRF Connect para VS Code, clique em Manage SDK. No menu Manage SDK, podemos instalar ou desinstalar a versão do nRF Connect SDK. Como esta é a primeira vez que usamos a extensão, a interface mostrará apenas duas opções.

Ao clicar em Install SDK, serão listadas todas as versões disponíveis do nRF Connect SDK que podem ser baixadas e instaladas localmente. Selecione a versão do nRF Connect SDK necessária para o desenvolvimento do seu projeto.

nota

O nRF Connect SDK aqui é 3.2.4 ou superior

dica

Se você não vir nenhuma dessas opções, certifique-se de ter instalada a versão mais recente do pacote de extensão nRF Connect para VS Code. É importante notar que o nRF Connect SDK é independente de IDE, o que significa que você pode optar por usar qualquer IDE ou nenhum. O nRF Connect SDK está disponível por meio da interface de linha de comando https://www.nordicsemi.com/Products/Development-tools/nRF-Util (nrfutil). A interface de linha de comando (CLI) (nrfutil) fará o download e instalará o nRF Connect. No entanto, recomendamos fortemente o uso da nossa extensão nRF Connect para VS Code com o VS Code, pois ela integra não apenas uma interface gráfica de usuário (GUI) conveniente e uma interface de linha de comando (CLI) eficiente, mas também inclui vários recursos que irão simplificar bastante o desenvolvimento de firmware. Configurar outras IDEs para funcionar com o nRF Connect SDK requer etapas manuais adicionais que estão além do escopo deste curso.

4
Criando programas de usuário

Neste exercício, escreveremos uma aplicação simples baseada no exemplo blinky para controlar o piscar de LEDs em uma placa de desenvolvimento. O mesmo se aplica a todas as placas de desenvolvimento da Nordic Semiconductor suportadas (séries nRF54, nRF53, nRF52, nRF70 ou nRF91). O objetivo é garantir que todas as ferramentas necessárias para compilar e gravar o exemplo estejam configuradas corretamente. O foco é aprender como criar uma aplicação, compilá-la e gravá-la em uma placa de desenvolvimento com chip Nordic usando o modelo “Copy Example”!

  • No VS Code, clique no ícone da extensão nRF Connect. Na visualização Welcome, clique em Create New Application.
  • Digite blinky na barra de pesquisa e selecione o segundo exemplo Blinky (caminho zephyr/samples/basic/blinky), como mostrado abaixo.

O exemplo Blinky fará com que o LED1 na placa de desenvolvimento pisque continuamente. No entanto, como o nosso nRF54LM20A está equipado com uma luz RGB, você pode modificar alguns arquivos seguindo as etapas abaixo para fazer a luz RGB brilhar com vários efeitos de iluminação.

Nossa primeira aplicação será baseada no exemplo Blinky. O exemplo Blinky é derivado do bloco de modelo Zephyr no nRF Connect SDK, portanto você verá o nome zephyr no caminho do exemplo: zephyr\samples\basic\blinky.

5
Adicionar a placa XIAO nRF54LM20A

Para começar, clone o repositório a partir do link do GitHub na sua pasta local preferida. Depois de clonar, navegue até o diretório platform-seeedboards/zephyr/. Lembre-se deste caminho da pasta zephyr;

git clone https://github.com/Seeed-Studio/platform-seeedboards.git

Para configurar sua placa para o nRF Connect no VS Code, você pode seguir estes passos:

  • Abra o VS Code e vá para Settings.

  • Digite nRF Connect na caixa de pesquisa.

  • Encontre o item de configuração Board Roots e clique em Edit in settings.json.

  • Adicione o caminho zephyr do arquivo de placa XIAO nRF54LM20A baixado ao array boardRoots.


dica

Observe que o ponto final do caminho adicionado é o caminho da pasta boards, não o caminho da pasta platform-seeedboards.

  • Na visualização da aplicação, clique em Add Build Configuration abaixo do nome da aplicação.

  • Podemos selecionar o modelo do XIAO nRF54LM20A em Board target e selecionar o arquivo prj.config padrão em Base configuration files e, por fim, clicar em Generate and Build para compilar o arquivo.

6
Baixar plug-in de gravação

Plugins adicionais:

No Windows, usaremos o gerenciador de pacotes Chocolatey para instalar o OpenOCD.

1. Abra o PowerShell (Executar como administrador):

  • Na barra de pesquisa do Windows, digite PowerShell.
  • Clique com o botão direito em Windows PowerShell e selecione Run as administrator.

2. Verifique a Execution Policy do PowerShell:

  • Digite Get-ExecutionPolicy e pressione Enter.
  • Digite Get-ExecutionPolicy -List e pressione Enter.

3. Instale o Chocolatey:

  • Cole e execute o seguinte comando:
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))

Este comando ignora a execution policy para a sessão atual do PowerShell e instala o Chocolatey. Após a instalação, feche e reabra a janela do PowerShell (ainda executando como administrador).

4. Instale o OpenOCD:

  • Na nova janela do PowerShell (como administrador), digite:
choco install openocd

5. Verifique a instalação do OpenOCD:

  • Digite Get-Command openocd e pressione Enter.

  • Se a instalação for bem-sucedida, este comando exibirá o caminho para o openocd.exe.

7
Programa de gravação
  • Abra os arquivos src/main.c e prj.conf e substitua o código original pelo código a seguir.
src/main.c

/*
* Copyright (c) 2016 Intel Corporation
*
* SPDX-License-Identifier: Apache-2.0
*/

#include <zephyr/kernel.h>
#include <zephyr/device.h>
#include <zephyr/drivers/pwm.h>
#include <nrfx_power.h>

#define PWM_PERIOD_NS 1000000U
#define STEP_TIME_MS 500

#define LED_R_NODE DT_ALIAS(pwm_led1)
#define LED_G_NODE DT_ALIAS(pwm_led2)
#define LED_B_NODE DT_ALIAS(pwm_led0)

#if !DT_NODE_EXISTS(LED_R_NODE) || !DT_NODE_EXISTS(LED_G_NODE) || !DT_NODE_EXISTS(LED_B_NODE)
#error "This RGB blink demo expects pwm-led0/pwm-led1/pwm-led2 devicetree aliases"
#endif

static const struct pwm_dt_spec led_r = PWM_DT_SPEC_GET(LED_R_NODE);
static const struct pwm_dt_spec led_g = PWM_DT_SPEC_GET(LED_G_NODE);
static const struct pwm_dt_spec led_b = PWM_DT_SPEC_GET(LED_B_NODE);

struct rgb_step {
uint8_t r;
uint8_t g;
uint8_t b;
uint32_t delay_ms;
};

static int pwm_set_u8(const struct pwm_dt_spec *led, uint8_t level)
{
uint32_t duty_ns = (PWM_PERIOD_NS * (uint32_t)level) / 255U;

return pwm_set_dt(led, PWM_PERIOD_NS, duty_ns);
}

static int rgb_set(uint8_t r, uint8_t g, uint8_t b)
{
int ret;

ret = pwm_set_u8(&led_r, r);
if (ret < 0) {
return ret;
}

ret = pwm_set_u8(&led_g, g);
if (ret < 0) {
return ret;
}

ret = pwm_set_u8(&led_b, b);
if (ret < 0) {
return ret;
}

return 0;
}

int main(void)
{
int ret;

#if defined(CONFIG_NRFX_POWER)
nrfx_power_constlat_mode_request();
#endif

if (!device_is_ready(led_r.dev) || !device_is_ready(led_g.dev) || !device_is_ready(led_b.dev)) {
return -1;
}

static const struct rgb_step demo[] = {
{ 255, 0, 0, STEP_TIME_MS },
{ 0, 255, 0, STEP_TIME_MS },
{ 0, 0, 255, STEP_TIME_MS },
{ 255, 255, 0, STEP_TIME_MS },
{ 0, 255, 255, STEP_TIME_MS },
{ 255, 0, 255, STEP_TIME_MS },
{ 255, 255, 255, STEP_TIME_MS },
{ 0, 0, 0, STEP_TIME_MS },
};

while (1) {
for (size_t i = 0; i < ARRAY_SIZE(demo); i++) {
ret = rgb_set(demo[i].r, demo[i].g, demo[i].b);
if (ret < 0) {
return ret;
}
k_msleep(demo[i].delay_ms);
}
}

return 0;
}

prj.conf
CONFIG_GPIO=y
CONFIG_PWM=y
CONFIG_SERIAL=n

board/xiao_nrf54lm20a_nrf54lm20a_cpuapp.overlay
  1. Se você precisar modificar ou redefinir o conteúdo de nós da device tree, crie um novo arquivo xiao_nrf54lm20a_nrf54lm20a_cpuapp.overlay no diretório do Zephyr para vincular explicitamente os nós de dispositivo.
  2. Se você tiver modificado os arquivos da device tree, limpe os arquivos originais antes de recompilar para evitar que o CMake deixe de reconhecer suas alterações.
/*
* Device tree overlay for XIAO nRF54LM20A RGB LED PWM demo.
*
* PWM20 peripheral is used for RGB LED control:
* - Channel 0: P1.22 (Blue LED) -> pwm_led0
* - Channel 1: P1.23 (Red LED) -> pwm_led1
* - Channel 2: P1.24 (Green LED) -> pwm_led2
*/

&pwm20 {
status = "okay";
};

/ {
pwmleds {
compatible = "pwm-leds";

pwm_led0: pwm_led_0 {
pwms = <&pwm20 0 PWM_MSEC(20) PWM_POLARITY_NORMAL>;
label = "Blue LED";
};

pwm_led1: pwm_led_1 {
pwms = <&pwm20 1 PWM_MSEC(20) PWM_POLARITY_NORMAL>;
label = "Red LED";
};

pwm_led2: pwm_led_2 {
pwms = <&pwm20 2 PWM_MSEC(20) PWM_POLARITY_NORMAL>;
label = "Green LED";
};
};
};

/ {
aliases {
pwm-led0 = &pwm_led0;
pwm-led1 = &pwm_led1;
pwm-led2 = &pwm_led2;
};
};
  • Em seguida, abra o Open terminal e digite o comando west flash.

dica

Se ocorrer o erro do west flash, isso significa que você precisa adicionar a configuração de compilação novamente, mas antes é necessário remover a compilação incorreta.


Explicação do código

  • src/main.c Ponto de entrada principal da aplicação que implementa a lógica de demonstração, incluindo configuração de cor do LED, efeitos de respiração, controle de ritmo de piscar, troca de modo baseada em botão e outros comportamentos de interação com o hardware.

  • zephyr/prj.conf Arquivo de configuração do Zephyr RTOS para habilitar/desabilitar componentes do sistema e drivers de periféricos, incluindo registro de logs, UART, PWM, I2C, SPI, gerenciamento de baixo consumo de energia e outras funcionalidades.

Observe o resultado

Suporte técnico e discussão sobre o produto

Obrigado por escolher nossos produtos! Estamos aqui para oferecer diferentes tipos de suporte para garantir que sua experiência com nossos produtos seja a mais tranquila possível. Oferecemos vários canais de comunicação para atender a diferentes preferências e necessidades.

Loading Comments...