sábado, 3 de julio de 2021

NuttX en Raspberry Pi-Pico RP2040

Introducción.

  Hace varios años comencé a testear al RTOS NuttX.

  De un tiempo a esta parte, no he podido dedicarle las horas necesarias para seguir su desarrollo. 

  Hace unos meses me dí a la tarea de retomarlo y entre las primeras grandes diferencias es que NuttX es llamado también Apache Nuttx. (No me detendré a explicar lo anterior, hay bastante info al respecto)

  A la vez siempre trabajé dentro de la línea de STM32 ya sea cortex M3 (F103) o cortex M4 (F407), pero recientemente descubrí a una nueva competidora la Raspberry pi Pico.

  Esta placa posee un microcontrolador ARM cortex M0+ de doble núcleo siendo una opción muy interesante para los RTOS que aprovechen la potencia de esto. Además su precio es equivalente a una blue-pill (STM32F103).

  En las próximas líneas explicaré como obtener el código fuente de NuttX, compilarlo e instalarlo en  la Pi Pico. Todo ello realizado desde una PC con Debian.

Comenzando.

Descargamos el SDK de Raspberry Pi Pico en un directorio acorde:

$ mkdir pico

$ cd pico

$ git clone -b master https://github.com/raspberrypi/pico-sdk.git

$ cd pico-sdk

$ git submodule update --init 

Y luego exportamos la variable de entorno:

$ export PICO_SDK_PATH=/home/usuario/pico/pico-sdk/

Ahora seguimos con NuttX

Instalamos las siguientes herramientas como root:

# apt install automake bison build-essential flex gcc-arm-none-eabi gperf git libncurses5-dev libtool libusb-dev libusb-1.0.0-dev pkg-config kconfig-frontends

Debo aclarar que puede ser que actualmente sea necesario algún paquete extra o incluso que alguno de los nombrados ya no sea necesario, esto lo realicé hace muchos años, y si bien he ido actualizando mi PC, en ocasiones instalo paquetes para otros desarrollos que quizás no noté que sean necesarios y los halla pasado por alto. De todas formas en el siguiente canal de YouTube hay muy buenos video tutoriales.

 Luego descargamos con git los siguientes repositorios en una carpeta acorde, en mi caso:

$ mkdir nuttx-workspace 

$ cd nuttx-workspace

$ git clone https://github.com/apache/incubator-nuttx
 
$ git clone https://github.com/apache/incubator-nuttx-apps.git apps


Una vez hecho lo anterior nos movemos a:

$ cd incubator-nuttx

Allí lanzamos el siguiente comando que configurará por default varias opciones, para que podamos tener un binario con la consola de NuttX y algunas funciones/aplicaciones básicas disponibles:

$ ./tools/configure.sh raspberrypi-pico:nsh

También si deseamos podemos agregar/quitar, características/aplicaciones  desde el config de NuttX (muy interesante para los que nos gusta probar :) )

$ make menuconfig

Finalmente compilamos con:

$ make -j4 

Una vez finalizada la compilación deberíamos tener el archivo nuttx.uf2

Grabando.

Ahora continuamos "grabando" el archivo nuttx.uf2 en la Raspebrry Pi Pico.

Para ellos necesitamos que la PC detecte a la Pi Pico, como una unidad de almacenamiento (como si de un pendrive se tratara). El procedimiento es muy simple, mientras mantenemos presionado el boton "BOOTSEL" de la placa, la conectamos por medio de un cable USB a nuesta PC, luego soltamos el botón y al cabo de unos segunos la PC reconocerá nuestra placa como una unidad de almacenamiento con la etiqueta "RPI_RP2".

Posteriormente "pegamos" el archivo nuttx.uf2 a la "RPI_RP2", y luego de unos segundos se reinicia nuestra placa y comienza a correr NuttX.

Conexión

Una vez que flasheamos la placa, necesitamos conectarla a nuestra PC, por medio de un conversor TTL-RS232-USB, en mis ensayos utilizo uno basado en el CP2102 (muy popular y económico en el mundo Arduino).

El conexionado es el siguiente:

PI-PICO -- TTL-RS232

GP0 (Tx)      Rx       

GP1 (Rx)      Tx

GND            GND


Una vez realizado lo anterior, conectamos nuestra placa por medio del conversor a nuestra PC, y esperamos unos segundos a Linux reconozca el puerto serie, en mi caso /dev/ttyUSB0

Lanzamos minicom y establecemos la configuración:

$ minicom -s


 

Presionamos ESC en nuestra PC.

Presionamos enter y la consola de NuttX debería responder.

Dejo una captura con los comandos, "?", "ps", y "uname" ejecutados.

 Mi setup:

Hay conexiones extra?, próxima entrada del blog.


 

T'T