Programando u-blox NINA-B302 com NuttX - Hello World
O
objetivo deste BLOG é demonstrar como é possível utilizar o NuttX para
programação do NINA B302. Foi utilizado o BREAKOUT para o teste. O exemplo abrirá um terminal para interagir com o NuttX e então permitir que você execute um App Hello.
Testado no Ubuntu 20
NuttX: O sistema operacional para a Internet das Coisas.
NuttX
é um sistema operacional em tempo real (RTOS) com ênfase na
conformidade de padrões e pequeno footprint. Escaláveis de ambientes
microcontroladores de 8 bits a 32 bits, os principais padrões de governo
em NuttX são os padrões Posix e ANSI. ApIs padrão adicionais do Unix e
de outros RTOS comuns (como o VxWorks) são adotadas para funcionalidades
não disponíveis sob esses padrões, ou para funcionalidades que não são
apropriadas para ambientes profundamente incorporados (como fork()).
Apache
NuttX é um esforço em incubação na Apache Software Foundation (ASF),
patrocinada pela Incubadora. A incubação é necessária de todos os
projetos recém-aceitos até que uma nova revisão indique que o processo
de infraestrutura, comunicação e tomada de decisão se estabilizou de
forma consistente com outros projetos ASF bem-sucedidos. Embora o status
de incubação não seja necessariamente um reflexo da completude ou
estabilidade do código, ele indica que o projeto ainda não foi
totalmente endossado pela ASF.
NuttX é um sistema operacional incorporado em tempo real (RTOS). Seus objetivos são:
Pequena
footprint utilizável em todos, exceto nos ambientes de microcontroles
mais apertados, o foco está no ambiente minúsculo para pequeno e
profundamente incorporado.
Rich Feature OS Set O objetivo é fornecer implementações da maioria das interfaces padrão do SISTEMA OPERACIONAL POSIX para oferecer suporte a um ambiente de desenvolvimento rico e multi-threaded para processadores profundamente incorporados.
Não
é um objetivo fornecer o nível de recursos do SO como os fornecidos
pelo Linux. Para trabalhar com MCUs menores, a pequena footprint deve
ser mais importante do que um conjunto de recursos extenso. Mas a
conformidade padrão é mais importante do que uma pequena footprint.
Certamente um RTOS menor poderia ser produzido ignorando padrões. Pense
no NuttX é um pequeno trabalho linux com um conjunto de recursos muito
reduzido.
Altamente
escalável Totalmente escalável de minúsculo (8 bits) a moderado
incorporado (64 bits). A escalabilidade com conjunto de recursos ricos é
realizada com: Muitos arquivos de origem minúsculos, link de
bibliotecas estáticas, altamente configurável, uso de símbolos fracos
quando disponíveis.
Conformidade
de padrões A NuttX se esforça para alcançar um alto grau de
conformidade de padrões. As principais normas de governo são as normas
POSIX e ANSI. ApIs padrão adicionais do Unix e de outros RTOS comuns são
adotadas para funcionalidades não disponíveis sob esses padrões ou para
funcionalidades que não são apropriadas para os RTOS profundamente
incorporados (como fork()).
Devido
a essa conformidade de padrões, o software desenvolvido sob outros OSs
padrão (como o Linux) deve ser portado facilmente para NuttX.
Tempo Real Totalmente preventivo; prioridade fixa, round-robin, e agendamento "esporádico".
Licença Apache não restritiva totalmente aberta.
GNU
Toolchains Compatíveis com as cadeias de ferramentas GNU baseadas no
buildroot disponível para download para fornecer um ambiente completo de
desenvolvimento para muitas arquiteturas.
NINA B302 E NuttX
Como
o módulo NINA B302 é baseado no chip NRF52840 (cpu), será possível
rodar o Nuttx sem problemas. O usuário deve dar atenção ao mapeamento de
GPIOS da U-BLOX.
O link abaixo, é roteiro Básico para que você possa preparar o ambiente para programar o NINA B302 com o NuttX
Dependências
$sudo apt install \ bison flex gettext texinfo libncurses5-dev libncursesw5-dev \ gperf automake libtool pkg-config build-essential gperf genromfs \ libgmp-dev libmpc-dev libmpfr-dev libisl-dev binutils-dev libelf-dev \ libexpat-dev gcc-multilib g++-multilib picocom u-boot-tools util-linux
Nota: O NuttX utiliza um sistema de build semelhante ao do Kernel do Linux (https://www.kernel.org/doc/html/latest/kbuild/index.html). Ele utiliza o kconfig-frontends como seu sistema de configuração. O repositório tools.git é utilizado para instalar este pacote. Porém se você estiver usando o Ubuntu 19.10 ou mais recente, estas distribuições já contém o pacoteCompilador ARM$sudo apt install gcc-arm-none-eabi binutils-arm-none-eabi
Download do NuttX
$ mkdir nuttx
cd nuttx
git clone https://github.com/apache/incubator-nuttx.git nuttx
git clone https://github.com/apache/incubator-nuttx-apps apps
Seleção do NINA B302 (NRF52840)
$ cd nuttx ./tools/configure.sh -l nrf52840-dk:nsh
osboxes@osboxes:~/nuttx/nuttx$ ./tools/configure.sh -l nrf52840-dk:nsh
No configuration change.
osboxes@osboxes:~/nuttx/nuttx$
Customização e compilação
$ cd nuttx/
make menuconfig
$ make
.config - NuttX/x86_64 Configuration ──────────────────────────────────────────────────────────────────────────────────── ┌───────────────────────── NuttX/x86_64 Configuration ──────────────────────────┐ │ Arrow keys navigate the menu. <Enter> selects submenus ---> (or empty │ │ submenus ----). Highlighted letters are hotkeys. Pressing <Y> includes, │ │ <N> excludes, <M> modularizes features. Press <Esc><Esc> to exit, <?> for │ │ Help, </> for Search. Legend: [*] built-in [ ] excluded <M> module < > │ │ ┌───────────────────────────────────────────────────────────────────────────┐ │ │ │ Build Setup ---> │ │ │ │ System Type ---> │ │ │ │ Board Selection ---> │ │ │ │ RTOS Features ---> │ │ │ │ Device Drivers ---> │ │ │ │ Networking Support ---> │ │ │ │ Crypto API ---> │ │ │ │ File Systems ---> │ │ │ │ Graphics Support ---> │ │ │ │ Memory Management ---> │ │ │ │ Audio Support ---> │ │ │ │ Video Support ---> │ │ │ │ Wireless Support ---> │ │ │ │ Binary Loader ---> │ │ │ │ Library Routines ---> │ │ │ │ Open Asymmetric Multi Processing ---> │ │ │ │ Application Configuration ---> │ │ │ └───────────────────────────────────────────────────────────────────────────┘ │ ├───────────────────────────────────────────────────────────────────────────────┤ │ <Select> < Exit > < Help > < Save > < Load > │ └───────────────────────────────────────────────────────────────────────────────┘
Para habilitar o exemplo Hello world, você precisa habilitar a seguinte configuração.
CONFIG_BUILTIN
Symbol: BUILTIN [=y] │ │ Type : boolean │ │ Prompt: Support Builtin Applications │ │ Location: │ │ (1) -> Library Routines │ │ Defined at libs/libc/builtin/Kconfig:6 │ │ Depends on: !BUILD_KERNEL [=n]
CONFIG_EXAMPLES_HELLO
Symbol: EXAMPLES_HELLO [=y] │ │ Type : tristate │ │ Prompt: "Hello, World!" example │ │ Location: │ │ -> Application Configuration │ │ (1) -> Examples │ │ Defined at /home/osboxes/nuttx/apps/examples/hello/Kconfig:6 │
CONFIG_NSH_BUILTIN_APPS
─────────────────────────────── Search Results ────────────────────────────────┐
│ Symbol: NSH_BUILTIN_APPS [=y] │
│ Type : boolean │
│ Prompt: Enable built-in applications │
│ Location: │
│ -> Application Configuration │
│ -> NSH Library │
│ (1) -> NSH Library (NSH_LIBRARY [=y]) │
│ Defined at /home/osboxes/nuttx/apps/nshlib/Kconfig:193 │
│ Depends on: NSH_LIBRARY [=y] && BUILTIN [=y]
Você pode pesquisar os itens de configuração pressionando "/" na tela do menu. Você também pode
pular para esse menu digitando um número como "(1)" no lado esquerdo dos resultados da pesquisa.
Após alterar a configuração, não esqueça de configurar o TXD e RXD....acordo com o board.h que se encontra em /home/osboxes/nuttx/nuttx/boards/arm/nrf52/nrf52840-dk/include Os pinos TXD e RXD que são utilizados para comunicação com o terminal são
P1.13 e P0.29, os mesmos GPIO22 e GPIO23 no encapsulamento do NINA B302
/* UART0 is connected to the virtual COM port:
* UART0_RX - P0-29
* UART0_TX - P1-13
*/
#define BOARD_UART0_TX_PIN (GPIO_INPUT | GPIO_PORT1 | GPIO_PIN(13))
#define BOARD_UART0_RX_PIN (GPIO_OUTPUT | GPIO_VALUE_ONE | GPIO_PORT0 | GPIO_PIN(29))
...faça então o make, escreva a imagem e abra o nsh novamente.
make[3]: Leaving directory '/home/osboxes/nuttx/apps/system/readline' make[2]: Leaving directory '/home/osboxes/nuttx/apps' make[1]: Leaving directory '/home/osboxes/nuttx/apps' IN: /home/osboxes/nuttx/apps/libapps.a -> staging/libapps.a make[1]: Entering directory '/home/osboxes/nuttx/nuttx/fs' make[1]: 'libfs.a' is up to date. make[1]: Leaving directory '/home/osboxes/nuttx/nuttx/fs' make[1]: Entering directory '/home/osboxes/nuttx/nuttx/binfmt' make[1]: 'libbinfmt.a' is up to date. make[1]: Leaving directory '/home/osboxes/nuttx/nuttx/binfmt' make[1]: Entering directory '/home/osboxes/nuttx/nuttx/arch/arm/src' make[2]: Entering directory '/home/osboxes/nuttx/nuttx/boards/arm/nrf52/nrf52840-dk/src' make[2]: 'libboard.a' is up to date. make[2]: Leaving directory '/home/osboxes/nuttx/nuttx/boards/arm/nrf52/nrf52840-dk/src' LD: nuttx make[1]: Leaving directory '/home/osboxes/nuttx/nuttx/arch/arm/src' CP: nuttx.bin
Após compilar, será gerado um BIN, o mesmo deve ser gravado no endereço zero do NINA B302.Abra então o TERATERM (115200,N,8.1)
TESTANDO NO NINA B302
Conexão com USB para SERIAL
DÚVIDAS
suporte@smartcore.com.br
REFERÊNCIAS
Sobre a SMARTCORE
A SmartCore fornece módulos para comunicação wireless, biometria, conectividade, rastreamento e automação.
Nosso portfólio inclui
modem 2G/3G/4G/NB-IoT/Cat.M, satelital, módulos WiFi, Bluetooth, GNSS /
GPS, Sigfox, LoRa, leitor de cartão, leitor QR code, mecanismo de
impressão, mini-board PC, antena, pigtail, LCD, bateria, repetidor GPS e
sensores.
Mais detalhes em www.smartcore.com.br
Nenhum comentário:
Postar um comentário