Raspberry Pi era sinónimo de computadoras Linux de placa única. No más. Los $ 4 Frambuesa Pi Pico board es su intento de entrar en el abarrotado mercado de módulos de microcontroladores.
El microcontrolador en cuestión, el RP2040, también es la primera incursión de Raspberry Pi en el silicio personalizado, y tiene un Cortex M0 + de doble núcleo con lujosas cantidades de SRAM y un hardware periférico de E / S personalizado muy interesante que probablemente significará que nunca tendrá a bit-bang de nuevo. Pero un microcontrolador simple no es divertido sin una placa de desarrollo, y la Raspberry Pi Pico agrega 2 MB de flash, conectividad USB y una buena administración de energía.
Al igual que con las máquinas Raspberry Pi Linux, el énfasis está en ponerlo en funcionamiento rápidamente, y hay abundante documentación: de las guías de tipo "Getting Started" para los SDK de C / C ++ y MicroPython con ejemplos de código, a hojas de datos serias para el Pico y el RP2040 sí mismo, a las notas de diseño de hardware y las placas de conexión KiCAD, e incluso contenido de la ROM de arranque integrada. El Pico parece diseñado para hacer una introducción amistosa a los microcontroladores que usan MicroPython, pero hay suficiente guía disponible para que pueda ir tan profundo como desee.
Nuestra toma rápida: el RP2040 es un microcontrolador muy bien pensado, con innumerables toques de diseño agradables, suficiente potencia para realizar la mayoría de los trabajos y un periférico de E / S de hardware definido por software innovador y muy amigable para los piratas informáticos. Está respaldado por una buena documentación y muchos ejemplos de trabajo, y al final del día, ejecuta un par de núcleos ARM MO + CPU conocidos. Si esto llega a los estantes al precio propuesto de $ 4, podemos ver que se convertirá en la placa de referencia para muchos proyectos que no requieren conectividad inalámbrica.
Pero quieres más detalles, ¿verdad? Sigue leyendo.
En muchos sentidos, el Pico es una placa de microcontrolador "normal" bien equipada. Tiene 26 GPIO de 3.3 V, un puerto ARM estándar de depuración de cables en serie (SWD), capacidades de dispositivo o host USB, dos UART, dos I2C, dos SPI y 16 canales PWM en ocho grupos. (La unidad PWM también puede medir señales PWM entrantes, tanto su frecuencia como su ciclo de trabajo). El Pico tiene un ADC de 12 bits, aunque está conectado a solo cuatro y tres pines, por lo que debe tener un poco de cuidado allí. (Nota del editor: el RP2040 tiene cuatro ADC, pero el cuarto no está disponible en el Pico).
Los núcleos gemelos ARM M0 + funcionan con PLL y tienen una especificación de hasta 133 MHz, que es bastante rápido. Hay divisores de reloj separados para casi todos los periféricos, y se pueden encender y apagar individualmente para ahorrar energía, como ocurre con la mayoría de los otros microcontroladores ARM. Funciona por completo a alrededor de 100 mA a 5 V y tiene modos de suspensión de retención de memoria completa por debajo de 1 mA.
Como lo hacen los módulos ESP8266 y ESP32, utiliza una ROM flash externa para almacenar programas y puede ejecutar código directamente desde la memoria flash como si fuera una memoria interna. La placa Pico viene con un chip flash QSPI de 2 MB decente, pero si eres hábil con un soldador, puedes colocar hasta 16 MB. Tiene 264 kB de SRAM, lo que sin duda es cómodo. La RAM está dividida internamente en cuatro bancos rayados de 64 kB para un acceso paralelo rápido, pero también se puede acceder a ellos por separado si lo desea. Dos bancos adicionales de 4 kB no están rayados y sugieren que se usen a sí mismos como memoria de pila por núcleo, pero nada lo obliga a usarlos de esa manera tampoco.
Existen numerosas comodidades menores a nivel de hardware. Todos los registros de configuración tienen un ancho de 32 bits, por lo que es posible que no desee tener que especificarlos todos, o tal vez desee evitar el baile de lectura-modificación-escritura. Como muchos de los chips STM32, hay un mapa de memoria especial que le permite establecer, borrar o XOR cualquier bit en cualquiera de los registros de configuración en un solo comando atómico. También hay 30 GPIO, por lo que todos caben dentro de un solo registro de 32 bits, nada de este puerto B, Pin 7. Esto también significa que puede leerlos o escribirlos todos a la vez, mientras que configurar pines individuales es fácil a través del acceso atómico anterior.
Una ROM de máscara interna contiene el gestor de arranque UF2, lo que significa que siempre puede volver a controlar el chip. Cuando conecta el Pico manteniendo presionado el botón BOOTSEL, se muestra como un dispositivo de almacenamiento masivo USB, y puede simplemente copiar su código, sin programador, y Raspberry incluso proporciona un archivo de todos ceros que puede copiar a borrón y cuenta nueva completamente la máquina. Sin embargo, si copia el binario MicroPython de Pico, nunca más necesitará el cargador de arranque. La ROM de máscara también contiene algunas rutinas rápidas que admiten matemáticas de punto flotante y entero, y todos los contenidos son de código abierto como se mencionó anteriormente.
La regulación de potencia a bordo es una configuración boost-buck que toma una entrada de 1.8 V a 5 V. Este es un buen rango para baterías de litio, por ejemplo, que puede ser una molestia porque funcionan tanto por encima como por debajo de los 3.3 V del IC, así que es bueno tener un regulador de impulso para exprimir los últimos miliamperios-hora. O puede ejecutar su proyecto en dos AA. Eso es bueno.
Así que el Pico / RP2040 es un tablero de desarrollo moderno y competente con algunos toques pensados. Pero se pone mejor.
El periférico más destacado en el RP2040 y el Pico es el hardware de E / S programable (PIO), que le permite definir su propio periférico de comunicación digital. Hay dos de estas unidades PIO, y cada una tiene cuatro máquinas de estado programables que ejecutan programas secuenciales escritos en un lenguaje ensamblador PIO especial. Cada una de las máquinas de estado tiene su propio divisor de reloj, memoria de registro, indicadores IRQ, interfaz DMA y mapeo GPIO. Estos permiten E / S esencialmente arbitrarias con precisión de ciclo, haciendo el trabajo pesado para que la CPU no tenga que hacerlo.
Si desea programar otro UART, por ejemplo, es trivial. Pero también lo es el UART codificado en Manchester, o un codificador / decodificador de código gris, o incluso trucos más sofisticados. Una de las aplicaciones de ejemplo es un ejemplo de video DPI, con una máquina de estado manejando la sincronización de la línea de exploración y el reloj de píxeles, mientras que otra empuja los datos de píxeles y los codifica por longitud de ejecución. Estos son el tipo de tareas simples pero rápidas que pueden atascar una CPU y provocar fallas de tiempo, por lo que el hardware dedicado es la solución correcta.
Los PIO están diseñados para tener mucha flexibilidad de un CPLD o FPGA, pero son más fáciles de programar. Cada máquina de estado solo puede tomar un "programa" que tiene 32 instrucciones, pero el lenguaje "pioasm" es muy denso. Por ejemplo, el comando para establecer los estados de los pines también tiene un argumento que dice cuánto tiempo esperar después de que se configuran los pines, y los pines adicionales de "configuración lateral" se pueden girar en la misma instrucción. Entonces, con una instrucción puede generar una línea de reloj, configurar sus datos y mantener este estado durante un tiempo definido. Una implementación básica de TX maestro SPI es de dos líneas.
O tome el ejemplo del protocolo LED WS2812. Para enviar un 1 lógico, mantenga alta la línea de datos con reloj automático alta durante un período prolongado y baja durante un período corto. Para enviar un 0 lógico, la línea de datos se mantiene alta durante un período corto y baja durante uno largo. La creación de las rutinas para hacer esto con una velocidad razonable en la CPU, sin fallas, requirió un derramamiento de lágrimas de los piratas informáticos no trivial. Con el periférico PIO, escribir una rutina para desplazar estos bits con precisión de ciclo absoluta es simple, y una vez hecho esto, su código puede simplemente escribir valores RGB en el PIO y el resto se encarga.
Para ejecutar el código PIO desde C, se llama al ensamblador en tiempo de compilación, el programa se convierte en lenguaje de máquina y se almacena como una matriz en un archivo de encabezado, y luego esto se puede escribir en el dispositivo PIO desde main () para inicializarlo . En Python, es aún más fácil: el decorador @asm_pio convierte una función en código PIO. Solo tiene que escribir la función “Python” usando las nueve instrucciones de ensamblaje de PIO y luego conectarla a los pines GPIO. Después de eso, puede llamarlo desde su código como si fuera un periférico normal.
Después de haber jugado un poco con él, el PIO es la característica más genial del Pico / RP2040. Es solo un poco de lógica programable de ciclo correcto, pero la mayoría de las veces, eso es todo lo que necesita. Y si no tiene ganas de aprender un nuevo lenguaje ensamblador, aunque solo son nueve instrucciones, ya hay un puñado de ejemplos y seguramente la gente desarrollará más una vez que las tablas salgan a la calle.
Las computadoras de placa única (SBC) Raspberry Pi, cuando se combinan con su documentación y ejemplos, generalmente logran una buena combinación de ser lo suficientemente simples para el novato y, al mismo tiempo, no esconder demasiado. El resultado es que, en lugar de que se abstraiga el carácter Linux del sistema subyacente, se lo presenta de una manera amigable. Eso parece ser a lo que apuntan las Frambuesas con el Pico: una introducción a los microcontroladores que se hace amigable a través de la documentación y la facilidad de uso de MicroPython, pero eso tampoco es un problema cuando se gira para mirar el código C / C ++.
USB para alimentación, UART para comunicación y SWD para programación y depuración, y tener una Raspberry Pi SBC a mano hace que muchos de los microcontroladores más intensos sean más simples. Por ejemplo, si desea realizar la depuración en el chip, deberá conectarse a través de la interfaz SWD y, para eso, generalmente necesita un programador. Pero, por supuesto, también puede bit-bang un controlador SWD con los GPIO de un SBC Raspberry Pi, pero tendrá que configurar OpenOCD correctamente para hacerlo.
Si todo eso sonaba como un galimatías, no te preocupes, todo esto se soluciona con un simple script pico_setup.sh. No solo instala todo el entorno de compilación y depuración, sino que también (opcionalmente) despliega VScode por usted. Agradable.
Y eventualmente querrá programarlo sobre el SWD. El ciclo de desconectar el USB, mantener pulsado un botón y volver a conectar el USB pasa de moda muy rápido.
Si eres un adicto a la línea de comandos, el sistema de compilación del C SDK se basa en CMake y se ejecuta bien desde la línea de comandos si ya tienes instalada la cadena de herramientas ARM. Y al igual que con todos los SDK, se necesita una cierta cantidad de texto estándar para iniciar una nueva sesión de codificación. De esto se encarga el generador de proyectos pico, para que no tenga que hacerlo.
En las guías de "Introducción", encontrará instrucciones para configurar su entorno en una máquina Raspberry Pi SBC, Windows, Mac o Linux de escritorio. Si prefiere Eclipse como IDE, también hay instrucciones de integración.
Si hay un área que me parece que aún no está completamente desarrollada, es el aspecto de doble núcleo del sistema. En este momento, si escribe código C o Python, se está ejecutando en Core 0, mientras que Core 1 simplemente está inactivo. Tanto la documentación del SDK de C como de Python le dicen cómo iniciar un hilo en el otro núcleo, y también hay un código de ejemplo disponible, pero las instrucciones son escasas. En C, hay un pico / multicore.h e incluso mutex, semáforo y libs de cola para que los incluya, pero la documentación advierte que la mayoría de las funciones stdlib no son seguras para subprocesos. En Python, importa _thread y llama al método start_new_thread (), pero no sé cuánto control preciso tiene.
Si todo lo anterior suena aterrador, bueno, es un poco. La verdad sobre la codificación para sistemas multiprocesador es que abre nuevas formas de que las cosas salgan mal, ya que una CPU cambia los valores de la otra, o ambas intentan escribir en la UART al mismo tiempo. Escribimos las Frambuesas y les preguntamos si estaban planeando portar un RTOS, que proporciona un poco más de estructura al problema, y respondieron que eso era lo primero en su plato después de completar el lanzamiento. Entonces, a menos que sepa lo que está haciendo, es posible que aún no obtenga el beneficio completo del chip de doble núcleo. Pero, sinceramente, esperamos que un RTOS reciba el tratamiento de documentación y tutorial de Raspberry Pi cuando suceda.
No todos los días ves a un nuevo jugador entrar en el mercado de los microcontroladores, y mucho menos a uno con las calificaciones de Raspberry Pi para hackers. Solo por eso, esta placa es notable. Pero el conjunto de características también es sólido, hay muchas comodidades tanto en el silicio como en el soporte, y trae una capacidad verdaderamente nueva a la mesa en forma de unidades PIO. Agregue a todo esto una etiqueta de precio de $ 4, y puede imaginar que se convertirá en la tabla de referencia de la gente, para esos momentos en los que no necesita conectividad inalámbrica.
De hecho, el único competidor real de esta placa en términos de relación precio / rendimiento son las diversas placas ESP32. Pero también son animales muy diferentes: uno ofrece menos GPIO pero tiene amplias funciones inalámbricas, y el otro tiene más (y más flexibles) GPIO, dispositivo y host USB, pero no radio. El consumo de energía mientras se ejecuta al máximo, con la conexión inalámbrica desactivada, es una ligera ventaja para el ESP32, pero los modos de suspensión del Pico son un poco más económicos. Ambos SDK hacen el trabajo en C y ambos ejecutan MicroPython. Los núcleos duales de ESP32 ejecutan FreeRTOS, pero imaginamos que no pasará mucho tiempo antes de que se nivele el campo de juego. Así que básicamente se trata de WiFi vs USB.
Por supuesto, por un poco menos de dinero, uno puede comprar uno de los basados en STM32 "Pastilla negra”, Con otro conjunto de pros y contras. ¡Opciones, elecciones!
Con el Pico, Raspberry Pi está entrando en un campo abarrotado. Tienen el reconocimiento de nombre, un truco de hardware genial, una gran propuesta de valor y un historial de documentación sólida. Si estuviera codificando una aplicación con mucho GPIO sin la necesidad de conexión inalámbrica, el Pico sería una opción sólida, especialmente si pudiera hacer uso del núcleo adicional.
Los dejo con un avance: en la página 9 de la hoja de datos del RP2040, establecen lo que significa "2040": dos núcleos, tipo M0 +, más de 256 kB de RAM y cero kB de flash. ¿Eso significa que eventualmente veremos modelos con más RAM, flash integrado o diferentes núcleos ARM? RP2050? RP2048? Especula salvajemente en los comentarios.
Uber está mejorando sus implementaciones de IoT en todo el mundo mediante la adopción de…
Obras de motor de materia y Bharti Airtel, un proveedor de servicios de telecomunicaciones ha…
En The Legend of Zelda: Breath of the Wild, los guardianes son una forma primitiva…
Muchos de nosotros nos enamoramos absolutamente de Wall-E, el personaje principal de una…
Dhruv Bhutani / Android AuthorityCada año, los fanáticos de los teléfonos inteligentes esperan con ansias…
Apple ha anunciado que Final Cut Pro finalmente llegará para el iPad. Tras años de…