Pular para o conteúdo principal

NRF Connect SDK com XIAO nRF54LM20A Sense

Introdução

nRF Connect SDK (NCS) é o kit de desenvolvimento de software oficial da Nordic Semiconductor, construído sobre o sistema operacional em 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 um acesso mais amplo a todas as capacidades de hardware da série nRF54, incluindo suporte nativo para Bluetooth Low Energy (BLE), Thread, Matter e outros stacks 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.

Primeiros passos com o NCS

Preparação de hardware

Seeed Studio XIAO nRF54LM20A Sense

Baixar o VS Code

Baixe de acordo com o sistema que você está usando o VS Code

Instalar a extensão nRF Connect for VS Code Extension Pack

  1. Abra o VS Code, pesquise e instale o nRF Connect for VS Code Extension Pack. Esta extensão irá instalar automaticamente todas as subextensões necessárias para a toolchain completa, incluindo nRF Connect, Kconfig, DeviceTree e mais.

  1. O nRF Connect for VS Code Extension Pack irá instalar automaticamente as seguintes extensões para você.

Instalar o nRF Connect SDK e a Toolchain

  1. Abra a extensão nRF Connect, selecione Install SDK e depois escolha nRF Connect SDK.

  1. Selecione v3.3.0 na lista Pre-packaged SDKs & Toolchains.

dica

Para o nRF Connect SDK v3.3.0, a instalação pré-empacotada inclui tanto o código do SDK quanto a toolchain correspondente. Você não precisa instalar a toolchain separadamente.

O nRF Connect SDK é bastante grande, e a instalação inicial levará algum tempo. Certifique-se de ter uma conexão de rede estável durante a instalação para evitar falhas.

Verificação do ambiente

Após a conclusão da instalação, o ambiente integrado para o nRF Connect SDK será configurado automaticamente. Para garantir um desenvolvimento contínuo sem problemas, recomendamos verificar o ambiente nesta etapa.

  1. Inicie o nRF Terminal, um terminal integrado do nRF Connect SDK.

dica

Certifique-se de que tanto a versão do nRF Connect SDK (NCS) quanto a versão da Toolchain sejam 3.3.0. Misturar versões diferentes pode causar problemas de compilação ou compatibilidade.

  1. Insira comandos para verificar as informações de versão das ferramentas necessárias. Você pode copiar e executar os comandos um por um para verificação.
# Check west (project manager & build entry) version
west --version
#West version: v1.5.0

# Check CMake (build system generator) version
cmake --version
#cmake version 4.2.1

# Check Ninja (build executor) version
ninja --version
#1.13.2

# Check Python (scripting runtime for west & Zephyr tools) version
python --version
#Python 3.11.7

# Check ARM cross-compiler (Zephyr toolchain for Cortex-M) version
arm-zephyr-eabi-gcc --version
#arm-zephyr-eabi-gcc (Zephyr SDK 0.17.0) 12.2.0
#Copyright (C) 2022 Free Software Foundation, Inc.
#This is free software; see the source for copying conditions. There is NO
#warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

# Check OpenOCD (on-chip debugger & flasher via CMSIS-DAP) version
openocd --version
#Open On-Chip Debugger 0.12.0+dev-01514-g21fa2de70 (2024-02-07-19:03)
#Licensed under GNU GPL v2
#For bug reports, read
# http://openocd.org/doc/doxygen/bugs.html
  • A saída é mostrada abaixo. Se algum componente estiver faltando, reinstale a toolchain e garanta uma rede estável durante a instalação.

Adicionar caminho de placa personalizada

As definições de placa para a série XIAO nRF54LM20A ainda não foram mescladas no repositório oficial do NCS, portanto você precisa adicionar o caminho da placa manualmente.

  1. Clone o repositório platform-seeedboards para o diretório de sua preferência.
git clone https://github.com/Seeed-Studio/platform-seeedboards.git

  1. Abra Settings no canto inferior esquerdo do VS Code.

  1. Pesquise por nRF Connect, modifique Board Roots e adicione o caminho ~\your_path\platform-seeedboards\zephyr. As definições de placa para a série XIAO nRF54LM20A são armazenadas aqui.

Criar um novo aplicativo

Nesta seção, vamos modificar um projeto de exemplo em branco.

  1. Na extensão, selecione Create a blank application para duplicar o template.

  1. Nomeie o projeto como blinky e escolha um caminho de armazenamento.

  1. Depois de criado, abra o projeto copiado.

  1. Remova as configurações originais. Esta etapa elimina interferências para configurar as configurações relacionadas ao XIAO nRF54LM20A na próxima fase. (Se o seu projeto não tiver um build, você pode pular diretamente esta etapa)

Escrever o programa Blinky

Como a série XIAO nRF54LM20A possui devicetree personalizada e mapeamentos de pinos de hardware personalizados, vários arquivos precisam ser modificados. Os arquivos a serem editados estão listados abaixo.

  • main.c: Programa principal que contém a lógica da aplicação.
  • app.overlay: Arquivo de overlay do devicetree para configuração de periféricos de hardware.
  • prj.conf: Arquivo de configuração do projeto para habilitar os módulos necessários do Zephyr.

  1. Modifique o código em main.c
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;
}
  1. Adicione xiao_nrf54lm20a_nrf54lm20a_cpuapp.overlay
  • Crie uma pasta board no diretório raiz do projeto blinky, no mesmo nível que pastas como src.

  • Crie o arquivo devicetree xiao_nrf54lm20a_nrf54lm20a_cpuapp.overlay dentro da pasta board.
xiao_nrf54lm20a_nrf54lm20a_cpuapp.overlay
/*
* 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;
};
};
  1. Modifique o arquivo prj.conf para habilitar as configurações correspondentes.
CONFIG_GPIO=y
CONFIG_PWM=y
CONFIG_SERIAL=n
  1. Navegue até a seção APPLICATIONS da extensão e selecione Add build configuration. Verifique as versões do SDK e da toolchain. Defina o Board Target como xiao_nrf54lm20a/nrf54lm20a/cpuapp e os arquivos de configuração base como prj.conf. Role a página para baixo e clique em Generate and Build para gerar os arquivos de configuração correspondentes.

dica

Se xiao_nrf54lm20a/nrf54lm20a/cpuapp não puder ser encontrado aqui, verifique se o caminho foi adicionado corretamente na seção Add Custom Board Path.

  1. Se a compilação for bem-sucedida, as seguintes informações serão exibidas no terminal.

Gravação do Programa

Nesta seção, usamos a ferramenta west do nRF Connect SDK para gravar o programa.

  1. Conecte o XIAO nRF54LM20A Sense com um cabo USB-C. Abra o nRF Terminal e insira o comando west para gravar o programa.
west flash

dica

Se o firmware a ser gravado for gerado a partir do primeiro arquivo de configuração criado em Add build configuration, você precisa especificar o caminho da configuração quando existirem várias pastas de configuração, como build e build_1.

# examples: west flash configgration build_1
west flash --build-dir build_1

Observe o Resultado

FAQ

P1: O download do nRF Connect SDK está muito lento ou trava

Se o download do SDK estiver muito lento ou travar, você pode usar o aria2 para baixar os pacotes necessários com múltiplas conexões e, em seguida, instalar o SDK usando o nrfutil.

Passo 1. Instale o aria2

brew install aria2

Passo 2. Crie o diretório de download

mkdir -p /opt/nordic/ncs/downloads

Passo 3. Baixe o Toolchain Bundle

aria2c -c -x 16 -s 16 -k 1M --file-allocation=none \
-d /opt/nordic/ncs/downloads \
-o ncs-toolchain-aarch64-macos-0c0f19d91c.tar.gz \
"https://files.nordicsemi.cn/artifactory/NCS/external/bundles/v3/ncs-toolchain-aarch64-macos-0c0f19d91c.tar.gz"

Passo 4. Baixe o nRF Connect SDK Bundle

aria2c -c -x 16 -s 16 -k 1M --file-allocation=none \
-d /opt/nordic/ncs/downloads \
-o sdk-nrf-bundle-v3.3.0.tar.gz \
"https://files.nordicsemi.cn/artifactory/ncs-src-mirror/external/sdk-nrf/v3.3.0/src.tar.gz"

Passo 5. Instale o nRF Connect SDK v3.3.0

nrfutil sdk-manager install v3.3.0 \
--sdk-path /opt/nordic/ncs/v3.3.0 \
--type nrf

Suporte Técnico & Discussão de Produto

Obrigado por escolher nossos produtos! Estamos aqui para fornecer 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...