segunda-feira, 28 de março de 2022

U-BLOX NINA W e VISUAL CODE - ESP-IDF DEBUGGING

 U-BLOX NINA W e VISUAL CODE - ESP-IDF DEBUGGING

(Testado com FrameWork ESP-IDF)


O objetivo deste BLOG é demonstrar como é possível utilizar o VISUAL CODE para programar o módulo U-BLOX NINA W com framework ESP-IDF e então DEBUGAR um programa. Foi utilizado o EVK-NINA-W102 para o teste.

O kit de desenvolvimento EVK-NINA-W102 foi desenvolvido para facilitar testes e desenvolvimentos com o chip u-blox NINA-W10X que apresenta importantes recursos:

  • Wi‑Fi 802.11b/g/n
  • Bluetooth dual mode clássico BR/EDR v4.2 e Bluetooth Low Energy v4.2
  • Permite embarque de aplicações
  • Pino a pino compativel com outros itens da família u-blox NINA tais como o NINA-B112, NINA-B111 entre outros
  • Longo alcance: estimado em 300m sem barreira
  • Várias interfaces: UART, RMII (Ethernet), SPI, SDIO host, CAN, JTAD< I2S, I2C, GPIO, DAC/ADC
  • Opera como estação WiFi ou access point WiFi
  • Vários recuros de segurança: WPA/WPA2, WPS, Enterperise Security, Secure boot
Para se obter sucesso com DEBUG, foi baseado no material do link abaixo e também alguns debates com um cliente Smartcore.


Após uma longa busca pela Internet sobre DEBUG com ESP32, vários links apontaram para uma placa MINI-MODULE ou ESP-prog. Após uma análise na placa, constatou-se que trata-se de um chip FTDI com várias GPIOS, modelo FTDI2232 que, com um driver específico, consegue implementar o protocolo JTAG em uma das saídas.

Ao analisar o EVK-NINA-W102, constatou-se que o mesmo tem um FTDI4232 e que os pinos são os  mesmos do FTDI2232.

Analisando o DATASHEET do EVK-NINA-W102, constatou-se que FTDI4232 (PORTA) tem conexão com o  MODELO W102 (JTAG)...



...que é mesma ligação utilizada pelo MINI-MODULE ou ESP-prog



No EVK-NINA-W106, seguem JUMPERS, desloque os 4 para esquerda, pois o mesmos de fábrica estão conectados no cartão uSD


No EVK-NINA-W106, seguem JUMPERS, desloque os 4 para esquerda, pois o mesmos de fábrica estão conectados no cartão uSD



1.       Instalar o Visual Studio Code em https://code.visualstudio.com

2.     Abrir o VSCode e clicar em extensões, procurar por ESP-IDF e instalar a opção Espressif IDF.


3.       Logo após a instalação e ativação do plugin, clicar no logo da Espressif que será adicionado no menu esquerdo do VSCode. Será carregada a aba ESP-IDF Setup.

4.       Antes de escolher a opção Express, você deve avaliar algumas limitações para o bom funcionamento da IDF.

A IDF não funciona corretamente em computadores onde o path do usuário contenha espaços – por isto, se seu usuário está em C:\Users\Usuario da silva\, escolha a opção Advanced e salve a IDF em outro caminho.

5.       Se usada a opção Advanced, você tem algumas configurações para adicionar, como a fonte de download dos dados, as pastas da IDF e do ESP-Tools além da versão da IDF.


6.       Confirme clicando em Install, pegue um café e aguarde o download – são mais de 800mb em arquivos e deve demorar um pouco.


7.       Após alguns minutos, confirme o download do ESP-Tools.


Neste momento serão baixados os compiladores para cada placa da Espressif.


8.       Após mais alguns minutos, você verá a confirmação de que o ambiente foi instalado com sucesso. Feche todas as janelas do VSCode e reabra.

9.       Quando o VSCode reabrir, confirme que a extensão da Espressif foi carregada e que aparece no menu lateral.

Abra o seu projeto em ESP-IDF e não arquivos do Arduino Framework.

Para este tutorial usarei o código Blink dos exemplos da IDF para continuar. Para carregar o exemplo, aperte F1 e digite “esp exampl” para abrir o repositório de códigos de exemplo do ESP. Confirme com Enter.


Selecione o projeto Blink e clique em Create Project using Blink.


10.   Assim que o projeto for criado, devemos configurar algumas coisas para que a depuração do código funcione.

Primeiro, vamos instalar o driver correto para depuração através do FTDI FT4232 embarcado na EVK. Para isto, baixe o Zadig em https://zadig.akeo.ie/.

Ao abrir o Zadig, clique Options e habilite List All Devices. Escolha o EVK-NINA-W106 (Interface 0) e clique em Replace Driver. Pode demorar alguns minutos até que a operação termine.

Quando terminar, basta fechar o Zadig. Desconecte o EVK e reconecte para garantir que o Windows reconheceu o novo driver.

11.   Depois, precisamos alterar um arquivo de interface do OpenOCD para identificar nosso EVK como um dispositivo válido. O kit de interfaces enviado junto com a instalação padrão conversa apenas com o FT2232H, mas podemos aproveitar o mesmo arquivo para configurar a compatibilidade com o EVK. Para isto, navegue até a pasta onde você instalou a IDF, acesse: tools\openocd-esp32\v0.11.0-esp32-20211220\openocd-esp32\share\openocd\scripts\interface\ftdi e procure pelo arquivo minimodule.cfg. Abra em um editor de texto e altere a linha ftdi_vid_pid para ficar igual à imagem abaixo.

ftdi_device_desc "EVB-NINA-W106"
ftdi_vid_pid 0x0403 0x6011

12.   Agora, precisamos dizer para a extensão da Espressif no VSCode como encontrar nossa EVK-NINA-106 através do OpenOCD.

Para isto, dentro do VSCode, clique em Arquivo, Preferências, Configurações. Na busca, digite “idf open” para encontrar o OpenOCD Configs. Clique em Editar em settings.json.

Inclua as linhas abaixo para que seu arquivo fique parecido com o abaixo:

"idf.openOcdConfigs": [                    "interface/ftdi/minimodule.cfg",
 "board/esp32-wrover-kit-3.3v.cfg"
]

Seu arquivo de configuração deve ficar parecido com o da imagem abaixo.

13.   E, por último, precisamos dizer para o VSCode o que deve ser iniciado quando solicitarmos a função de debug, isto é, quando apertarmos o F5 para começar.

Dentro da pasta do seu projeto, acesse o subdiretório .vscode e procure pelo arquivo launch.json. Se ele não existir, crie um arquivo em branco. No exemplo de código do Blink, este arquivo já será pré-configurado e você pode ignorar este passo.

Digite a estrutura abaixo no arquivo e salve-o. Isto irá dizer para o VSCode que, assim que você solicitar depuração, a solicitação será enviada à extensão da Espressif que fará o trabalho de ligar os outros serviços e configurar o funcionamento.

{
 "version": "0.2.0",
 "configurations": [
 {
    "type": "espidf",
    "name": "Launch",
    "request": "launch"
    }
  ]
}

14.   Antes de compilarmos nosso código para testar, se você estiver usando o exemplo Blink da IDF, delete as linhas abaixo do arquivo .vscode/settings.json ou ajuste conforme a configuração global que fizemos no passo 12. 

     "idf.openOcdConfigs": [
    "interface/ftdi/esp32_devkitj_v1.cfg",
    "target/esp32.cfg"
],

O conteúdo deve ficar igual à imagem


15.No rodapé do VSCode, clique em OpenOCD server. Uma opção será exibida. Clique em OK para confirmar.

A opção ficará verde e o console mostrará que encontrou os núcleos do EVK.


16.   Agora, basta adicionar um breakpoint ao seu código e apertar F5. Aguarde a depuração ser carregada e você estará pronto para navegar pelo código.


Questões: suporte@smartcore.com.br

AGRADECIMENTO ESPECIAL

Filipe Garcia Antunes

Head of Software Development

+55 11 3883-3085

+55 11 94755-6478

filipe@cardios.com.br


FONTES: 
No próprio BLOG e

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

quarta-feira, 23 de março de 2022

U-BLOX NINA W106 e PlatformIO - Arduino DEBUGGING

U-BLOX NINA W e PlatformIO - Arduino DEBUGGING
(Testado com FrameWork Arduino)


O objetivo deste BLOG é demonstrar como é possível utilizar o PlatformIO para programar o módulo U-BLOX NINA W com framework ARDUINO e então DEBUGAR um programa. Foi utilizado o EVK-NINA-W102 para o teste.

O kit de desenvolvimento EVK-NINA-W102 foi desenvolvido para facilitar testes e desenvolvimentos com o chip u-blox NINA-W10X que apresenta importantes recursos:

  • Wi‑Fi 802.11b/g/n
  • Bluetooth dual mode clássico BR/EDR v4.2 e Bluetooth Low Energy v4.2
  • Permite embarque de aplicações
  • Pino a pino compativel com outros itens da família u-blox NINA tais como o NINA-B112, NINA-B111 entre outros
  • Longo alcance: estimado em 300m sem barreira
  • Várias interfaces: UART, RMII (Ethernet), SPI, SDIO host, CAN, JTAD< I2S, I2C, GPIO, DAC/ADC
  • Opera como estação WiFi ou access point WiFi
  • Vários recuros de segurança: WPA/WPA2, WPS, Enterperise Security, Secure boot
Para se obter sucesso com DEBUG, foi baseado no material do link abaixo e também alguns debates com um cliente Smartcore.


Após uma longa busca pela Internet sobre DEBUG com ESP32, vários links apontaram para uma placa MINI-MODULE ou ESP-prog. Após uma análise na placa, constatou-se que trata-se de um chip FTDI com várias GPIOS, modelo FTDI2232 que, com um driver específico, consegue implementar o protocolo JTAG em uma das saídas.

Ao analisar o EVK-NINA-W102, constatou-se que o mesmo tem um FTDI4232 e que os pinos são os  mesmos do FTDI2232.

Analisando o DATASHEET do EVK-NINA-W102, constatou-se que FTDI4232 (PORTA) tem conexão com o  MODELO W102 (JTAG)...



...que é mesma ligação utilizada pelo MINI-MODULE ou ESP-prog



No EVK-NINA-W106, seguem JUMPERS, desloque os 4 para esquerda, pois o mesmos de fábrica estão conectados no cartão uSD


No EVK-NINA-W106, seguem JUMPERS, desloque os 4 para esquerda, pois o mesmos de fábrica estão conectados no cartão uSD



Após esta análise, partiu-se para o Software, instalando o DRIVER para fazer o FTDI funcionar com JTAG


Em ZADDIG, selecione



Após analisar o vídeo abaixo, com a ajuda de 
Andreas Speiss constatou-se que deve adicionar ao PLATFORMIO.INI as seguintes sentenças:

upload_port = COM32
debug_tool = esp-prog
debug_init_break = tbreak setup


Ao tentar finalmente executar o DEBUG, foi detectado que VID/PID do FTDI do EVK-NINA-W102não batia pelo VID/PID solicitado pelo DRIVER, como os dois FTDI são basicamente parecidos, alterei o VID/PID para o solicitado para, digamos assim, para ACEITAR o FTD4232, o arquivo


esp32_devkitj_v1.cfg

previamente atualizado com a descompactação do arquivo


C:\Users\Usuario\.platformio\packages\tool-openocd-esp32\share\openocd\scripts\interface\ftdi\esp32_devkitj_v1.cfg

#
# Driver for the FT2232H JTAG chip on the Espressif DevkitJ board
# (and most other FT2232H and FT232H based boards)
#
 
adapter driver ftdi
ftdi_vid_pid 0x0403 0x6011 0x0403 0x6014

# interface 1 is the uart
ftdi_channel 0

# TCK, TDI, TDO, TMS: ADBUS0-3
# LEDs: ACBUS4-7

ftdi_layout_init 0x0008 0xf00b
ftdi_layout_signal LED -data 0x1000
ftdi_layout_signal LED2 -data 0x2000
ftdi_layout_signal LED3 -data 0x4000
ftdi_layout_signal LED4 -data 0x8000

# ESP32 series chips do not have a TRST input, and the SRST line is connected
# to the EN pin. 
# The target code doesn't handle SRST reset properly yet, so this is
# commented out:
# ftdi_layout_signal nSRST -oe 0x0020

reset_config none

# The speed of the JTAG interface, in KHz. If you get DSR/DIR errors (and they
# do not relate to OpenOCD trying to read from a memory range without physical
# memory being present there), you can try lowering this.
#
# On DevKit-J, this can go as high as 20MHz if CPU frequency is 80MHz, or 26MHz
# if CPU frequency is 160MHz or 240MHz.
adapter speed 20000


1) Baixe e instale o Visual Studio Code


2) Execute o Visual Studio Code


3) Na opção EXTENSIONS (canto esquerdo), procure por PlatformIO e Instale. Aguarde!

4) Uma vez instalado o PlatformIO, vá em PIO Home e crie um Novo Projeto e digite os parâmetros abaixo e então Finish


Aguarde alguns minutos para instalação do SDK. A instalação do SDK ficará em 

C:\Users\USER\.platformio>
e os fontes em
C:\Users\USER\Documents\PlatformIO\Projects\blink\src\main.cpp

5) Na opção EXPLORER você verá o projeto e o código fonte (Arduino Sintax). 


6) Observe o arquivo Platformio.ini que foi criado, você pode futuramente mudar para aceitar outro tipo de framework, como exemplo, ESP-IDF.

[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino

upload_port = COM32
debug_tool = esp-prog
debug_init_break = tbreak setup

7) Altere o código para

#include <Arduino.h>

void setup() {
  // put your setup code here, to run once:
  pinMode(23, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(23, HIGH);
  delay(1000);
  digitalWrite(23, LOW);
  delay(1000);
}


8) Compile (seja paciente), a primeira vez demora mais tempo.


9) Faça o UPLOAD (pressione tecla BOOT e então RESET) e você verá o LED alterando de estado a cada 1 segundo!


10) Faça o UPLOAD (pressione tecla BOOT e então RESET) e você verá o LED alterando 

11) Para DEBUG, pressione F5 ou vá no menu RUN-->START DEBUGGING




12) Questões: suporte@smartcore.com.br

Thanks to Brian Lough


FONTES: 
No próprio BLOG e

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

  

segunda-feira, 24 de setembro de 2018

U-BLOX NINA W E PlatformIO - Arduino

U-BLOX NINA W E PlatformIO - Arduino

O objetivo deste BLOG é demonstrar como é possível utilizar o PlatformIO para programar o módulo U-BLOX NINA W com framework ARDUINO. Foi utilizado o EVK-NINA-W para o teste.
1) Baixe e instale o Visual Studio Code


2) Execute o Visual Studio Code


3) Na opção EXTENSIONS (canto esquerdo), procure por PlatformIO e Instale. Aguarde!

4) Uma vez instalado o PlatformIO, vá em PIO Home e crie um Novo Projeto e digite os parâmetros abaixo e então Finish


Aguarde alguns minutos para instalação do SDK. A instalação do SDK ficará em 

C:\Users\USER\.platformio>
e os fontes em
C:\Users\USER\Documents\PlatformIO\Projects\blink\src\main.cpp

5) Na opção EXPLORER você verá o projeto e o código fonte (Arduino Sintax). 


6) Observe o arquivo Platformio.ini que foi criado, você pode futuramente mudar para aceitar outro tipo de framework, como exemplo, ESP-IDF.

[env:nina_w10]
platform = espressif32
board = nina_w10
framework = arduino

7) Altere o código para

#include <Arduino.h>

const int ledPin = LED_RED;

void setup() {
  // setup pin 5 as a digital output pin
  pinMode (ledPin, OUTPUT);
}

void loop() {
  digitalWrite (ledPin, HIGH); // turn on the LED
  delay(500); // wait for half a second or 500 milliseconds
  digitalWrite (ledPin, LOW); // turn off the LED
  delay(500); // wait for half a second or 500 milliseconds
}

8) Copie o arquivo

https://1drv.ms/u/s!Ak_-1v7Ug-k21DFw_xuDhCBs3H-b para

\Users\USER\.platformio\packages\framework-arduinoespressif32\tools\partitions

https://1drv.ms/u/s!Ak_-1v7Ug-k21DK-ERJ4gkEckKtM para
C:\Users\USER\.platformio\packages\framework-arduinoespressif32\tools\sdk\bin

(atualmente os "bin" do Platformio não funcionam)


9) Compile (seja paciente), a primeira vez demora mais tempo.


10) Faça o UPLOAD (pressione tecla BOOT e então RESET) e você verá o LED alterando de estado a cada 1 segundo!



11) Questoes: suporte@smartcore.com.br

FONTES: 

 

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