Introducción a la placa microcontroladora Raspberry Pi Pico multinúcleo con C
Colaboración de Editores de DigiKey de América del Norte
2023-06-07
En los sistemas integrados existe la necesidad inherente de disponer de una unidad de microcontrolador (MCU) potente y de bajo coste. Estos dispositivos desempeñan un papel importante no solo en el producto, sino también en el apoyo a las pruebas, la creación rápida de prototipos y capacidades como el aprendizaje automático (ML). Sin embargo, iniciarse en el uso de unidades de microcontrolador suele requerir un profundo conocimiento de la tecnología MCU y de los lenguajes de programación de bajo nivel. Además, las placas de desarrollo suelen costar entre $20 y $1,000, lo que puede resultar demasiado caro para muchos desarrolladores. Además, no siempre se dispone de una placa de desarrollo, e incluso cuando la hay, los diseñadores suelen tener dificultades para ponerla en marcha.
Este artículo presenta la Raspberry Pi Pico (SC0915) como una placa de desarrollo de bajo coste para la MCU RP2040 que proporciona a los desarrolladores un amplio una amplia gama de capacidades. El artículo explora el Pico y algunas placas de expansión, examina los diferentes kits de desarrollo de software que soporta la Raspberry Pi Pico, y demuestra cómo crear una aplicación de LED parpadeante utilizando el SDK de C.
Introducción a la Raspberry Pi Pico
La Raspberry Pi Pico se presentó por primera vez en 2021 como plataforma de desarrollo para el microcontrolador RP2040. Pico se puede utilizar como placa de desarrollo independiente o se puede diseñar directamente en un producto gracias a las conexiones de borde que se pueden soldar a una placa base (Figura 1). Entre el costo inferior a $5 de Pico y su uso polivalente, se ha convertido en una solución popular tanto para fabricantes como para desarrolladores profesionales.
Figura 1: La Raspberry Pi Pico es una placa de desarrollo de bajo costo que contiene todo lo necesario para desarrollar aplicaciones en el microcontrolador RP2040. (Fuente de la imagen: Raspberry Pi)
El RP2040 cuenta con un procesador Arm® Cortex®-M0+ de doble núcleo a 133 megahercios (MHz) e incluye hasta 264 kilobytes (Kbytes) de SRAM. El RP2040 no incluye Flash en el chip. En su lugar, el Raspberry Pi Pico proporciona un chip flash externo de 2 megabytes (Mbyte) que interactúa con el RP2040 a través de una interfaz periférica serial cuádruple (QSPI). La placa también incluye un LED de usuario, un oscilador de cristal que el bucle de fase cerrado (PLL) utiliza para crear un reloj de CPU de alta velocidad estable, y un pulsador para configurar si el procesador arranca normalmente o en un gestor de arranque.
Un amplio ecosistema
La Raspberry Pi Pico ya cuenta con un amplio ecosistema que permite a los desarrolladores elegir entre utilizar MicroPython o kits de desarrollo de software C para escribir aplicaciones para la placa. Una nota interesante sobre la Raspberry Pi Pico es que no hay una única placa de desarrollo disponible. En cambio, hay tres: el SC0915 original con una configuración estándar, el SC0917, que incluye conectores de cabecera, y el SC0918, que incluye un chip Wi-Fi de bajo costo para aplicaciones conectadas (Figura 2).
Figura 2: La Raspberry Pi Pico está disponible en tres configuraciones. (Fuente de la imagen: Beningo Embedded Group, LLC)
Para cada una de estas versiones, la huella general de la placa sigue siendo la misma. Las conexiones de borde de la placa constan de conexiones de borde de 40 patillas para los periféricos y las opciones de conexión que se muestran en la Figura 3. Entre ellos se incluyen alimentación, tierra, un transmisor y receptor asíncrono universal (UART), entrada y salida de uso general (GPIO), modulación por ancho de pulsos (PWM), un convertidor de analógico a digital (ADC), una interconexión periférica serial (SPI), una interfaz de circuito interintegrado (I2C) y depuración.
Figura 3: Los pines de conexión de borde de Raspberry Pi Pico proporcionan una amplia variedad de acceso a periféricos. (Fuente de la imagen: Raspberry Pi)
Opciones de placa a placa
Cuando la Raspberry Pi se va a utilizar para la creación rápida de prototipos, existe la necesidad de ganar fácil acceso a los conectores del borde de la placa. Una opción para acceder a ellos es rellenar las cabeceras y utilizar un tablero de prueba. Sin embargo, esta solución puede dar lugar a menudo a un lío de cables que puede dar lugar a errores. Así que, en su lugar, hay varias opciones de placas breakout que amplían los conectores de los bordes a interfaces más fácilmente disponibles.
Por ejemplo, la placa del módulo Pico MM2040EV de Bridgetek divide la mayoría de los conectores de borde en conexiones pin y toma. Además, existe el escudo 103100142 para el Pico de Seeed Studio que proporciona cada interfaz periférica como un conector. Cada conector es compatible con el pin de las placas de expansión para añadir funciones como sensores inerciales, impulsores de motor y telémetros.
¿A C o a MicroPython?
Los sistemas integrados se han escrito tradicionalmente en C porque equilibra el control de bajo nivel con los enfoques de aplicación de sistemas de alto nivel. El problema de C hoy en día es que es un lenguaje de programación anticuado y cincuentón que apenas se enseña en las universidades. También es demasiado fácil inyectar accidentalmente errores y causar daños. A pesar de estos problemas potenciales, C es el lenguaje elegido para la mayoría de los desarrollos de sistemas integrados.
Una alternativa al uso de C, proporcionada por el ecosistema Raspberry Pi Pico, es MicroPython. MicroPython es un puerto CPython diseñado para ejecutarse en sistemas basados en MCU. Aunque sin duda es un procesador más pesado que C, es un lenguaje moderno con el que muchos desarrolladores están familiarizados y se sienten cómodos. MicroPython puede abstraer detalles de bajo nivel de la unidad de microcontrolador y el hardware. Los accesos al hardware se realizan a través de interfaces de programación de aplicaciones (API) de alto nivel que son fáciles de aprender, una característica importante cuando los plazos de los proyectos son ajustados.
A la hora de elegir qué kit de desarrollo de software (SDK) utilizar (C o MicroPython), los desarrolladores deben centrarse en sus necesidades específicas. En comparación con MicroPython, el uso de C proporcionará acceso de bajo nivel a los registros de la unidad de microcontrolador, tendrá una huella de memoria más pequeña y será más eficiente.
Configuración del SDK de C
Cuando se utiliza el SDK de C para crear una aplicación de LED parpadeante, hay varias opciones. La primera es revisar la documentación del SDK y seguir las instrucciones. La segunda es utilizar un contenedor Docker preestablecido para instalar automáticamente todas las herramientas necesarias para empezar. Una tercera opción es instalar los toolchains y el código de ejemplo de Raspberry Pi Pico manualmente, incluyendo:
- Git
- Python 3
- Cmake
- gcc-arm-none-eabi \
- libnewlib-arm-none-eabi
Recuperar el código de ejemplo de Raspberry Pi Pico puede hacerse clonando el repositorio git de Raspberry Pi usando el siguiente comando:
git clone https://github.com/raspberrypi/pico-sdk /home/sdk/pico-sdk && \
cd /home/sdk/pico-sdk && \
git submodule update --init &&
Una vez instaladas estas librerías y el código fuente, el siguiente paso es explorar y compilar una aplicación de LED parpadeante.
Escribir una primera aplicación blinky
El C SDK incluye un ejemplo que los desarrolladores pueden utilizar para crear su primera aplicación. El siguiente código utiliza el LED integrado de Pico y la directiva PICO_DEFAULT_LED_PIN para configurar un pin de E/S y hacerlo parpadear con un retardo de 250 milisegundos (ms).
Copiar
/**
* Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include "pico/stdlib.h"
int main() {
#ifndef PICO_DEFAULT_LED_PIN
#warning blink example requires a board with a regular LED
#else
const uint LED_PIN = PICO_DEFAULT_LED_PIN;
gpio_init(LED_PIN);
gpio_set_dir(LED_PIN, GPIO_OUT);
while (true) {
gpio_put(LED_PIN, 1);
sleep_ms(250);
gpio_put(LED_PIN, 0);
sleep_ms(250);
}
#endif
}
Listado de código: El Raspberry Pi Pico utiliza la directiva PICO_DEFAULT_LED_PIN para configurar un pin de E/S y hacerlo parpadear con un retardo de 250 ms. (Código fuente: Raspberry Pi)
Según el listado, al LED_PIN se le asigna el pin por defecto; luego se hacen llamadas a las API de C gpio. gpio_init se utiliza para inicializar el pin, mientras que gpio_set_dir se utiliza para establecer el LED_PIN a una salida. Se crea entonces un bucle infinito que alterna el estado del LED cada 250 ms.
Compilar la aplicación es relativamente sencillo. En primer lugar, un desarrollador necesita crear un directorio de construcción en su carpeta Raspberry Pi Pico utilizando los siguientes comandos:
mkdir build
cd build
A continuación, hay que preparar cmake para la compilación ejecutando el siguiente comando:
cmake
Ahora, un desarrollador puede cambiar al directorio blinky y ejecutar make:
cd blink
make
El resultado del proceso de construcción será un archivo blinky.uf2. El programa compilado se puede cargar en la Raspberry Pi Pico manteniendo pulsado el pin BOOTSEL y encendiendo la placa. El RP2 aparecerá entonces como un dispositivo de almacenamiento masivo. El desarrollador tiene que arrastrar el archivo blinky.uf2 a la unidad, momento en el que el gestor de arranque instalará la aplicación. Una vez completado, el LED debe comenzar a parpadear.
Conclusión:
La Raspberry Pi Pico es una solución atractiva para los desarrolladores de sistemas embebidos que buscan flexibilidad en su ciclo de desarrollo. Hay varias opciones disponibles, como soluciones independientes o placas con conectividad inalámbrica. Además, el ecosistema es compatible con C y C++, así como con MicroPython. Los desarrolladores pueden elegir el lenguaje que mejor se adapte a su aplicación y aprovechar el SDK correspondiente para acelerar el desarrollo de software.
Descargo de responsabilidad: Las opiniones, creencias y puntos de vista expresados por los autores o participantes del foro de este sitio web no reflejan necesariamente las opiniones, las creencias y los puntos de vista de DigiKey o de las políticas oficiales de DigiKey.




