terça-feira, 26 de janeiro de 2021

Programando u-blox NINA-B302 com NuttX

 Programando u-blox NINA-B302 com NuttX


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, sem APP ainda.

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 pacote

Compilador 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-dongle:nsh
osboxes@osboxes:~/nuttx/nuttx$ ./tools/configure.sh -l nrf52840-dongle: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 >            │  
  ───────────────────────────────────────────────────────────────────────────────┘  
    
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-dongle/src'
make[2]: 'libboard.a' is up to date.
make[2]: Leaving directory '/home/osboxes/nuttx/nuttx/boards/arm/nrf52/nrf52840-dongle/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.


De acordo com o board.h que se encontra em 
/home/osboxes/nuttx/nuttx/boards/arm/nrf52/nrf52840-dongle/include
Os pinos TXD e RXD que são utilizados para comunicação com o terminal são
P0.15 e P0.13, os mesmos GPIO3 e GPIO1 no encapsulamento do NINA B302
* The following definitions must be provided so that the NRF52 serial
 * driver can set up the UART for the serial console properly.
 */ 
#define BOARD_UART0_RX_PIN  (GPIO_INPUT  | GPIO_PORT0 | GPIO_PIN(13))
#define BOARD_UART0_TX_PIN (GPIO_OUTPUT | GPIO_VALUE_ONE | GPIO_PORT0 | GPIO_PIN(15)) 
TESTANDO NO NINA B302
Abra então o TERATERM (115200,N,8.1)



Sobre a SMARTCORE

A SmartCore fornece módulos para comunicação wireless, biometria, conectividade, rastreamento e automação.
Nosso portifó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