quarta-feira, 9 de novembro de 2022

LOM204A - Programando com NuttX RTOS

LOM204A - Programando com NuttX RTOS - LoRa


O objetivo deste BLOG é demonstrar como é possível utilizar o NuttX para programação do WISOL LOM204A. Foi utilizado o BREAKOUT LOM204A para o teste. O exemplo abrirá um terminal para interagir com o NuttX e iniciar acesso permitir acesso a rede LoRa (p2p) e transmitirá pacotes em intervalos curtos.

BETA - EM TESTES - APENAS PARA PROGRAMADORES COM NuttX RTOS

Baseado no B-L072Z-LRWAN1

Módulo


LoRa

LoRa (de "longo alcance") é uma técnica de radiocomunicação física proprietária. Baseia-se em técnicas de modulação de espectro difundida derivadas da tecnologia de espectro de propagação de chirp (CSS). Foi desenvolvido pela Cycleo (patente 9647718-B2), uma empresa de Grenoble, França, posteriormente adquirida pela Semtech. 

P2P refere-se às comunicações LR que ocorrem diretamente entre dispositivos de nó final (peer-to-peer), em vez daquelas que ocorrem entre um nó final e o gateway, no caso LoRaWAN.

Uma comunicação peer-to-peer usando a tecnologia LoRa permite uma comunicação direta e de longa distância entre 2/n dispositivos (Polling). Isso é particularmente útil em ambientes restritos onde a infraestrutura global LoraWAN não é necessária ou simplesmente não está disponível.

NuttX


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 de microcontroladores de 8 bits a 64 bits (RISC-V 64 e AMD64) os principais padrões que governam o 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()).

O NuttX busca alcançar um alto grau de conformidade de padrões.  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 para outros OSes padrão (como o Linux, MacOS, FreeBSD,etc) deve ser portado facilmente para NuttX.

Tempo Real Totalmente preemptivo; 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.

LOM204A e NuttX

Como o módulo LOM20A é baseado no chip STM32L072, será possível rodar o Nuttx sem problemas.

CRIANDO AMBIENTE DE PROGRAMAÇÃO NuttX

O link abaixo, é roteiro Básico para que você possa preparar o ambiente para programar o WISOL LOM204


    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
O Ubuntu e o Debian ainda fornecem o Python 2.7 como o interpretador padrão, mas alguns 
pacotes necessários podem estar faltando para distribuições mais recentes. Python 3 é
recomendado e pode ser instalado da seguinte maneira:
 
$ sudo apt-get install python3 python3-pip python3-setuptool sudo update-alternatives --install /usr/bin/python python /usr/bin/python3
Mantenha-se no diretório do NuttX e execute o script de configuração para criar um arquivo de configuração para o WISOL LOM204A

$ make distclean
$./tools/configure.sh b-l072z-lrwan1:sx127x
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 >            │  
  ───────────────────────────────────────────────────────────────────────────────┘  
    
CC:  binfmt_dumpmodule.c
CC:  binfmt_coredump.c
CC:  builtin.c
AR (create): libbinfmt.a   binfmt_globals.o binfmt_initialize.o binfmt_register.o binfmt_unregister.o binfmt_loadmodule.o binfmt_unloadmodule.o binfmt_execmodule.o binfmt_exec.o binfmt_copyargv.o binfmt_dumpmodule.o binfmt_coredump.o builtin.o
make[1]: Leaving directory '/home/ubuntu/nuttx/nuttx/binfmt'
IN: binfmt/libbinfmt.a -> staging/libbinfmt.a
make[1]: Entering directory '/home/ubuntu/nuttx/nuttx/arch/arm/src'
make[2]: Entering directory '/home/ubuntu/nuttx/nuttx/boards/arm/stm32f0l0g0/common'
CC:  board/stm32_boot.c
CC:  board/stm32_bringup.c
CC:  board/stm32_autoleds.c
CC:  board/stm32_spi.c
CC:  board/stm32_appinit.c
CC:  board/stm32_sx127x.c
AR (create): libboard.a   stm32_boot.o stm32_bringup.o stm32_autoleds.o stm32_spi.o stm32_appinit.o stm32_sx127x.o
make[2]: Leaving directory '/home/ubuntu/nuttx/nuttx/boards/arm/stm32f0l0g0/common'
CPP:  /home/ubuntu/nuttx/nuttx/boards/arm/stm32f0l0g0/b-l072z-lrwan1/scripts/ld.script-> /home/ubuntu/nuttx/nuttx/boards/arm/stm32f0l0g0/b-l072z-lrwan1/scripts/ld.script.tmp
LD: nuttx
make[1]: Leaving directory '/home/ubuntu/nuttx/nuttx/arch/arm/src'
CP: nuttx.hex
CP: nuttx.bin
ubuntu@DESKTOP-GRCNLV8:~/nuttx/nuttx$
Utilize STM32 PROGRAMMER para gravar


Executando


Ao executar o APP sx127x, não conseguiu abrir o arquivo /dev/sx127x pois o mesmo ainda
tem que ser configurado, ou seja, definir as GPIOS de acesso.

Em
/boards/arm/stm32f0l0g0/b-l072z-lrwan1/src/
b-l072z-lrwan1.h
Edite

#define GPIO_SX127X_RESET (GPIO_PORTA | GPIO_PIN8) #define GPIO_SX127X_CS (GPIO_OUTPUT | GPIO_SPEED_HIGH | \ GPIO_OUTPUT_SET | GPIO_PORTA | GPIO_PIN4) #define GPIO_SX127X_DIO0 (GPIO_INPUT | GPIO_FLOAT | GPIO_EXTI | \ GPIO_PORTA | GPIO_PIN12)

/* CMWX1ZZABZ-091 module antenna switch * CRF1 - RX RFI HF * CRF2 - TX RFO HF * CRF3 - TX BOOST */ #define GPIO_SX127X_CRF1 (GPIO_SPEED_HIGH | GPIO_PORTA | GPIO_PIN15) #define GPIO_SX127X_CRF2 (GPIO_SPEED_HIGH | GPIO_PORTC | GPIO_PIN2) #define GPIO_SX127X_CRF3 (GPIO_SPEED_HIGH | GPIO_PORTC | GPIO_PIN1)

Em
\nuttx\nuttx\arch\arm\src\stm32f0l0g0\hardware
stm32l0_pinmap.c
Edite

#define GPIO_SPI1_SCK_2 (GPIO_ALT | GPIO_AF0 | GPIO_PORTB | GPIO_PIN3)
para
#define GPIO_SPI1_SCK_1 (GPIO_ALT | GPIO_AF0 | GPIO_PORTA | GPIO_PIN5)

UART

/* By default the USART2 is connected to STLINK Virtual COM Port: * USART2_RX - PA3 * USART2_TX - PA2 */

Execução




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