2 puntos por GN⁺ 2024-06-12 | 1 comentarios | Compartir por WhatsApp
  • El RP2040 de Raspberry Pi es un microcontrolador pensado para integrarse en electrónica de consumo; es barato y fácil de conseguir con inventario abundante, lo que reduce la carga de elegirlo en las primeras etapas del desarrollo
  • En lugar de ofrecer muchas variantes, Raspberry Pi se enfoca en un solo componente, lo que reduce la optimización fina de especificaciones, pero logra que preguntas, ejemplos, bibliotecas y herramientas se concentren en un mismo lugar
  • Su precio de alrededor de 70 centavos puede no ser ideal para optimizar el costo por pieza en producción masiva, pero en proyectos como Late Mate el ahorro en desarrollo puede ser una ventaja mayor
  • Su combinación de dos núcleos, 30 GPIO, USB, UART/SPI/I2C/PWM, más RAM interna y sin flash integrada se acerca a un compromiso suficiente y flexible
  • El PIO y el bootloader de solo lectura, junto con un diseño que evita una protección de firmware excesiva, hacen que el RP2040 parezca un componente práctico orientado a usos concretos

Un ecosistema creado por una estrategia de componente único

  • El RP2040 es un microcontrolador creado por Raspberry Pi y, a diferencia de las más conocidas placas Raspberry Pi, está pensado para ir integrado dentro de productos electrónicos de consumo
  • En Mouser hay inventario disponible para envío inmediato en cantidades de decenas de miles de unidades, y su precio ronda los 70 centavos
  • Los fabricantes de microcontroladores en general ofrecen muchos productos parecidos, pero con pequeñas diferencias
    • Como los productos físicos tienen costos de fabricación, en producción a gran escala incluso ahorrar 1 centavo por pieza puede afectar la rentabilidad
    • Por eso existe un incentivo a elegir un microcontrolador con el dimensionamiento justo para el producto
  • Raspberry Pi, en la práctica, se concentra en un solo componente con el RP2040
    • Eso reduce las opciones y el margen para ajustar especificaciones con precisión
    • Pero a cambio, preguntas en StackExchange, posts de blog, experiencia acumulada, issues de GitHub, bibliotecas y herramientas se concentran en el mismo componente
  • Proyectos como Late Mate pueden ahorrar más en costos de desarrollo que en costo de componentes, por lo que esta estrategia de componente único puede ser un buen compromiso
  • El soporte para Rust es bueno, con ejemplos como los de Embassy, y también hay ejemplos de firmware para teclados, drones y robots de fútbol

Hardware suficiente y la flexibilidad de PIO

  • El diseño del RP2040 se acerca más a un compromiso de propósito general suficiente y flexible que a una configuración de “máxima especificación”
    • Ofrece dos núcleos decentes, y el segundo puede usarse cuando hace falta
    • Tiene 30 GPIO, una cantidad promedio
    • No incluye flash integrada y destina más presupuesto a RAM interna, que es más difícil de ampliar externamente
    • El ADC es razonable, y ofrece periféricos comunes como USB y UART/SPI/I2C/PWM
  • Entre sus funciones menos tradicionales está PIO
    • PIO significa Programmable Input/Output y se parece a dos pequeños coprocesadores capaces de ejecutar IO rápida con temporización precisa sin consumir tiempo de CPU
    • Se usa para implementar protocolos de comunicación como DShot ESC
    • Pico-PIO-USB implementa una pila USB completa sobre PIO y le da al RP2040 un segundo controlador USB
    • Cuando se usa junto con DMA, un driver de pantalla puede descargar por completo del CPU la comunicación con la pantalla y el táctil

Un bootloader que evita dejarlo inservible y el compromiso de seguridad

  • El RP2040 tiene una arquitectura que no puede quedar inservible
    • Incluye un bootloader de solo lectura
    • Puede actualizarse montándolo como dispositivo de almacenamiento masivo USB y copiando el firmware al “dispositivo de almacenamiento”
    • Su propio protocolo USB simple se usa en picotool
  • Parte de la idea de que proteger el firmware frente a un atacante dedicado es casi imposible, y que intentarlo añade complejidad y costos para la experiencia del desarrollador, por lo que evita una puesta en escena de seguridad excesiva
  • Estas decisiones pueden verse como un equilibrio práctico que toma en cuenta el nicho que ocupa el RP2040 como pequeña pieza de silicio

1 comentarios

 
GN⁺ 2024-06-12
Comentarios de Hacker News
  • El verdadero protagonista del RP2040 es el PIO, y le da capacidades que chips competidores como el ESP32 difícilmente pueden igualar
    Por eso se usa por todos lados en el mundo del hackeo de consolas. Aun así, para usos con batería estaría bueno que en la V2 bajara más el consumo en modo de suspensión profunda

    • Cosas como la duración de batería probablemente mejoren con la experiencia acumulada. Hablé del RP2040 con alguien del lado de silicio y me dijo que son rasgos bastante típicos de un diseño de primera generación
      La lógica digital que se puede validar en FPGA en general sale bastante bien, pero los elementos analógicos son mucho más difíciles de afinar, y eso se nota en peor consumo energético, un ADC flojo y la ausencia de DAC interno o amplificadores operacionales. El chip inalámbrico del Pico W tampoco está totalmente integrado como en el ESP32, sino que es un componente comercial aparte, por razones parecidas
    • La parte más frustrante del PIO es que solo hay 2. Cada uno tiene 4 subunidades, pero solo hay espacio para 32 instrucciones y no hay entrada de reloj externo
      Es excelente para implementar periféricos muy básicos, pero ya varias veces empecé a hacer algo un poco más complejo y terminé dándome cuenta de que era demasiado lento y no alcanzaba el espacio. Con apenas un poco más de potencia, podría reemplazar bastante fácil varios usos menores de FPGA
    • Para mí, la estabilidad del suministro es la clave. Un solo IC, vida útil larga del producto y siempre hay stock. Después del caos de 2021/2022, no pienso volver a sacrificar eso por ahorrar unos centavos
    • En robótica pasa lo mismo. 8 PIO alcanzan para leer y registrar 4 codificadores en cuadratura casi sin costo de interrupciones, así que se pueden hacer controladores de lazo cerrado con muy buen rendimiento incluso en entornos lentos como Micropython
    • Comparar el ESP32 con el RP2040 es casi como comparar peras con manzanas
      Si necesitas mucho I/O, normalmente no miras el ESP32. Su punto fuerte es que es barato y trae WiFi integrado. Hay otras opciones de microcontroladores que salen mejor paradas frente al RP2040, pero la mayoría no apunta al mercado hobby
  • En los últimos años hemos usado RP2040 en la credencial electrónica[1] de la conferencia de seguridad RVASec, y la experiencia escribiendo software ha sido bastante buena
    El repositorio de GitHub de la credencial de este año está aquí. Hay un simulador de la credencial que funciona solo por software y permite trastear un poco incluso sin el hardware, aunque las funciones multijugador, que dependen de la comunicación infrarroja entre credenciales, pueden ser menos divertidas: https://github.com/HackRVA/badge2024

    [1] Video de la credencial 2023: https://www.youtube.com/watch?v=KWZriUMNpLc
    [2] https://rvasec.com/

    • Me da curiosidad por qué lo hicieron a medida y no usaron un producto de NXP
  • Decir que son “el mismo microcontrolador y solo dos revisiones con corrección de errores” no es exacto
    En realidad es exactamente el mismo microcontrolador, con solo dos opciones de empaquetado. Una viene en carrete de 7 pulgadas con 500 unidades y la otra en carrete de 13 pulgadas con 3400 unidades. Se puede ver en el “Ordering code” del datasheet: https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.p...

    • Aun así, sí hubo varias revisiones con correcciones de errores. RP2040-B0 fue la original, la -B1 mejoró parte del código ROM y la -B2 añadió más cambios en la ROM y corrigió errores de silicio de las primeras versiones
      Si usas el SDK oficial, en general no hace falta preocuparse mucho por qué versión es, porque las bibliotecas estándar de alto nivel detectan la revisión de hardware en tiempo de ejecución y activan o desactivan las mitigaciones necesarias
  • El RP2040 prácticamente revivió por sí solo el nicho bastante específico de los controladores personalizados
    Gracias a gp2040[1], un firmware open source para gamepads, la gente puede comprar fightsticks y controles leverless de calidad razonable por mucho menos que los de marcas como Victrix o Razer. Como es open source, la comunidad hobby de controles también está haciendo PCBs basados en RP2040 para toda clase de proyectos e ideas raras de controladores

    [1] https://gp2040-ce.info

    • Me pregunto qué tanto de eso puede atribuirse directamente al RP2040. Proyectos como QMK0 ya venían usando desde hace mucho una base de código técnicamente bastante parecida para teclados DIY
      A simple vista, GP2040 no parece tener nada que no pudiera hacerse también con algún otro microcontrolador medianamente moderno. Está claro que el RP2040 fue el catalizador que impulsó la adopción masiva de GP2040, pero algo parecido probablemente también habría sido posible con un Pro Micro

    • Tampoco hay que dejar afuera a PhobGCC. Yo soy el desarrollador principal, y hay una familia sucesora menos específica de GameCube, como ProGCC V3, GC Ultimate y Phizard

    • La expresión “por sí solo” parece restarle mérito a cosas anteriores, como las placas Brook, por ejemplo Zero-Pi[1]. Históricamente no parece del todo correcto decirlo así

      [1] https://www.brookaccessory.com/detail/53169470/

  • Si te gusta la electrónica como hobby pero no quieres fabricar ni diseñar tú mismo placas de montaje superficial, hay muchísimas placas RP2040 baratas y accesibles
    Lo he usado con la Raspberry Pi Pico ($5), que viene en una buena placa con bastante I/O. Si pagas un poco más, también está la versión W con WiFi

    Si no te molesta tener un poco menos de I/O, puedes pedir un RP-2040 Zero. Compré 6 por unos $12 en AliExpress. Solo tiene 23 pines de I/O, pero trae botón de reset, USB-C y es muy pequeño (1.5 cm x 2.5 cm)

Lo bueno de estas placas es que las herramientas de desarrollo estándar de Raspberry Pi, MicroPython y C++ funcionan tal cual, y que puedes cargar el firmware cómodamente por USB.

  • También quisiera recomendar la pico ice. La mayor parte de la etiqueta de $30 se explica por el UP5K incluido, pero para proyectos embebidos que necesitan funcionamiento en el rango de submicrosegundos, es una opción relativamente económica que permite usar herramientas de código abierto.

  • Recomiendo mucho buscar placas de desarrollo alternativas basadas en RP2040 en varios lugares. La Pi Pico oficial sorprendentemente no es gran cosa, y casi todas las placas alternativas son mejores en algún aspecto.
    No tiene reset, tiene un formato más grande, solo 2 Mbit de flash y encima micro USB; en 2024 eso ya está medio fuera de lugar. Casi su única ventaja es que se consigue en todas partes.

  • Las placas RP2040 pequeñas están muy bien. Hice algunos proyectos pequeños basados en adafruit QT Py.
    Estaría bueno que hubiera una versión inalámbrica. Existe si usas ESP32 QT, pero con RP2040 no parece haber una, al menos por lo que veo.

  • A menos que tengas restricciones de espacio realmente severas, no le veo muy claras las ventajas al 2040 Zero. Tiene menos funciones y cuesta más. La Pico ya es bastante pequeña.
    Aun así, la Pico tiene una compatibilidad de pines realmente buena. En el lado de ESP, aunque parezca que hay muchos pines de entrada/salida, por los pines conectados a la flash interna o al bootloader, con suerte termina quedando apenas lo justo. También me pregunto por qué sacan esos pines hacia afuera. La ESP32-CAM tiene 10 pines de datos, pero en la práctica normalmente solo se pueden usar 4.

  • Me cambié de ESP32 a RP2040 porque era un dispositivo más estable y mejor documentado.
    Mi única preocupación actual con RP2040 es que hay muchos modelos de ESP32 con SPIRAM, pero no es tan fácil encontrar placas RP2040 que la traigan. Sinceramente, el entorno de desarrollo en C del RP2040 es tan bueno que se puede aprovechar bien la memoria, pero para hacer proyectos grandes en MicroPython, la SPIRAM es una gran ventaja. Fuera de eso, todo en el RP2040 me parece excelente.

    • Al final quitaron del artículo la parte sobre soporte para Rust, pero si estás abierto a Rust, el Rust asíncrono en embebidos es realmente muy cómodo de usar.
      Dario Nieuwenhuis, una de las figuras clave de Embassy, dio una excelente presentación general en RustNL: https://www.youtube.com/watch?v=H7NtzyP9q8E
    • No estoy nada de acuerdo. Llevo meses trabajando con el ecosistema de Espressif y es la plataforma de microcontroladores mejor documentada que existe hoy.
    • El RP2040 solo tiene un puerto QSPI.
      JLC ensambla placas RP2040 por menos de $3 por unidad en lotes de 5.
    • Me da curiosidad si usaste esp-idf o si usaste las bibliotecas de Arduino.
  • La comparación en sí es como comparar manzanas con duraznos. El RP2040 es solo un chip, mientras que del lado de ESP32 hay muchas opciones con un montón de periféricos incorporados.
    Puedes elegir entre antena WiFi/Bluetooth, controlador de batería de ion-litio, Ethernet, conectores para pantalla o cámara, etc.

    También hay varias opciones de CPU, y cuando quieres hacerlo funcionar con una pila tipo moneda, importa si estás gastando energía en un segundo núcleo innecesario o en WiFi.

    En la variante C6, Espressif incluso volvió a cambiar la ISA, pasando del 8266 al ESP32 y luego a una ISA basada en RISC-V.

    Al final, es como comparar un SoC de primera generación con una familia de SBC de 10 años de antigüedad.

    • Parece que se están confundiendo el ESP32 devkit con el propio ESP32. Lo que trae antena, controlador de batería o cualquier conector es un devkit o al menos un módulo. El ESP32 en sí es un IC pequeño, como el RP2040.
      Por ejemplo, tal vez te refieres a un devkit como este: https://docs.espressif.com/projects/esp-idf/en/latest/esp32s...

      Esta placa en sí también se basa en un módulo como el ESP32-S3-WROOM-1, y ese módulo agrupa el IC ESP32-S3 con elementos de conveniencia como la antena WiFi o conectores.

      En RP2040, el equivalente sería la Raspberry Pi Pico, y ahí también hay pequeñas comodidades como variantes con WiFi. También existen productos empaquetados junto con otros periféricos.

      Ni el RP2040 ni la serie ESP32 son SBC, y ninguno de los dos tiene linaje de SBC. Todas las Raspberry Pi SBC estaban basadas en Broadcom, y el RP2040 es un IC nuevo desarrollado por Raspberry Pi y, hasta donde sé, no tiene IP licenciada de Broadcom.

    • Técnicamente es cierto, pero el punto central tiene más que ver con el uso. El RP2040 realmente es algo singular, y de repente se volvió una excelente opción para muchísimos proyectos, no solo hobby y educación, sino también en dispositivos embebidos profesionales.
      Si miras lo que ofrece por el precio, una sola versión de chip cubre de verdad muchísimos casos. Para mí, eso es lo que significa el avance tecnológico.

    • Lo más seguro es asumir que en ambos casos se está hablando del chip en sí. A ambos se les puede conectar cargadores de batería, cámaras o reactores nucleares, pero esos periféricos son totalmente irrelevantes para esta comparación.

    • Me pregunto si existe alguna alternativa no china comparable a ESP en términos de integración de módulos como WiFi. No me importa si cuesta más.

  • Tengo sentimientos encontrados con respecto al RP2040.
    Por un lado, es un chip excelente para desarrolladores aficionados. Es barato, fácil de conseguir, la placa es fácil de diseñar y ofrece suficientemente bien lo que hace falta para aplicaciones promedio.

    Por otro lado, desde una perspectiva profesional sí se queda un poco corto. Los periféricos están bien, pero cuando entras en detalle te topas rápido con limitaciones. La interfaz XIP es excelente, pero no soporta escritura, así que no puedes agregar un chip FRAM para ampliar memoria. La interfaz PIO es increíble, pero si intentas implementar interfaces más complejas, la limitación de 2x32 instrucciones pesa bastante. ¿Dónde están los Timer/Counter? ¿No hay toque capacitivo? ¿Solo cuatro pines analógicos? ¿No hay entradas tolerantes a 5V? ¿Por qué no hay entrada de reloj rápido para los módulos PIO? ¿Por qué no se puede ejecutar el bootloader con el oscilador interno de anillo? También habría estado bien tener un USB-C PHY.

    También me sorprendió el mal rendimiento ESD. Los Atmega o STM32 suelen aguantar alguna descarga electrostática ocasional, y la protección ESD en puertos expuestos al exterior es algo deseable pero no siempre imprescindible. Con el RP2040, si no agregas protección externa en todos los pines, prácticamente vas a ver cómo algunos mueren durante el uso cotidiano.

En resumen, es un chip genial y excelente para hobby, pero probablemente no sería mi primera opción en un entorno profesional.

  • Me pregunto qué significa exactamente USB-C PHY. USB-C es un conector, y sobre él se puede ejecutar USB 1.1/2.0/3.0/3.1. En la práctica, el RP2040 ni siquiera puede sostener bien un PHY de USB 2.0.

  • Incluso los desarrolladores hobby terminan haciendo proyectos más complejos, y es justamente ahí donde se topan con esos límites.

  • Me pregunto en qué tipo de aplicaciones FRAM ha sido más útil. La tecnología en sí se ve realmente genial, pero el precio es tan alto que cuesta entender cuándo usarla en lugar de una combinación de SRAM o PSRAM con NAND.

  • El macro Synopsys DesignWare SSI dentro del RP2040 en realidad parece que podría usarse con PSRAM o FRAM de lectura/escritura. Pero con la versión resumida del datasheet del RP2040 no parece haber suficiente información para configurarlo así.

  • Raspberry Pi originalmente empezó como una organización educativa sin fines de lucro.

  • El RP2040 es bastante genial, y hasta ahora lo he usado en media docena de proyectos.
    Pero el enfoque de “uno sirve para todo” no va conmigo. Prefiero usar el microcontrolador más pequeño que pueda hacer el trabajo necesario.

    La razón por la que intento usar el microcontrolador más débil posible no es por dinero, sino por el presupuesto de energía. La mayoría de mis proyectos funcionan con batería, así que consumir la menor energía posible es una gran ventaja.

    Aun así, si puedo hacer lo mismo con uno de 20 centavos, me cuesta ver por qué usaría un microcontrolador de $1.

    • Una documentación en línea muchísimo más amplia, código de ejemplo y una comunidad grande de hobbyistas con experiencia que responden preguntas valen mucho más que esos 80 centavos de diferencia.
      Usar un controlador menos potente para que la batería dure más es una razón totalmente válida. Que sea barato suena bien en teoría, pero en proyectos únicos en la práctica casi no importa. Ni recuerdo cuándo fue la última vez que una compra con diferencia de unas cuantas decenas de centavos me importó de verdad; no es una diferencia que se sienta.
  • Me gusta el RP2040, pero quiero explicar por qué me alejé de él en mi proyecto actual.
    Primero, la controversia relacionada con PlatformIO me cayó muy mal. Quiero ponerme del lado de los desarrolladores que salen perjudicados por el desorden en las herramientas.

    Segundo, el ESP32-S3 de gama alta viene en forma de módulo y, en la práctica, se puede montar en una PCB con apenas unos cuantos capacitores de desacoplo. El RP2040 requiere colocar con cuidado alrededor de una docena de componentes, incluido el cristal. Un módulo no solo reduce mucho la complejidad de implementación, sino que además, mediante la estandarización, reduce la posibilidad de que cada ingeniero cometa errores tontos al acomodar componentes.

    Tercero, el ESP32-S3 tiene 14 pines GPIO configurables como tacto capacitivo, mientras que el RP2040 no tiene ninguno. La mayoría de los proyectos que usan RP2040 con tacto capacitivo dependen del MPR121, y ese IC está descontinuado, así que es muy probable que provoque muchas reingenierías urgentes en los próximos meses.

    Es muy probable que en algún momento también saquen versiones del RP2040 más potentes o más simples, y una versión en módulo. No creo que lleguen al nivel de STM o PIC, pero la familia ESP32 tampoco se ve tan extraña una vez que te acostumbras.

    • Espressif parece estar en una situación parecida a la de Pi con respecto a PlatformIO[1]. Visto desde afuera, parece que PlatformIO intentó exigir a RPi y a Espressif un costo anual muy alto, y eso habría ocurrido después de que se agregara el soporte inicial y parte de la comunidad empezara a adoptarlo.
      Es una situación rara, pero da la impresión de que PlatformIO construyó una posición dominante al soportar múltiples plataformas y aceptar contribuciones de la comunidad, y luego intentó extraer valor directamente de los fabricantes. Incluso bloqueó PRs de la comunidad que agregaban nuevas revisiones de placas o corregían errores. Más contexto aquí: [2]

      [1] https://github.com/platformio/platform-espressif32/issues/12...

      [2] https://github.com/platformio/platform-raspberrypi/pull/36

    • Para ser justos, el RP2040 está diseñado para que colocar esos componentes sea realmente fácil. En la práctica solo hay una disposición razonable, y se puede acceder fácilmente a todos los pines que quieras.
      Sumado a una documentación excelente, se acerca a un diseño drop-in de múltiples componentes que instalas una vez y ya no vuelves a pensar en ello. Al principio se veía un poco intimidante, pero la implementación real fue realmente agradable.

    • He usado el RP2040 desde que salió y nunca he usado PlatformIO, así que me da curiosidad saber de qué forma lo usabas y qué fue lo que te pareció tan malo.
      Desarrollar localmente con cmake y pico sdk o micropython parece muy fácil, así que no termino de entender por qué mezclar PlatformIO ahí.

    • No creo mucho que convertir esto en un módulo aporte un valor significativo. Todo el mundo quiere formatos ligeramente distintos, y el circuito periférico es tan fácil de diseñar que es difícil que un módulo marque una diferencia clara.
      El tacto es casi una función de nicho y de un solo propósito, así que incluso está bien que no lo hayan incluido. Para eso corresponde usar otro IC, y si la gente sigue aferrada por flojera a una pieza descontinuada, ese no es problema de RPi. O bien se puede implementar por software.

      En esta parte coincido con el artículo original, y creo que la fundación definió muy bien el producto.

    • Llevo décadas incorporando a diseños chips de Atmel, STM, TI, Ambiq y Nordic, y no es que nunca haya habido formas de resolver esos problemas. Incluso el practicante que está a 2 yardas de mí está batallando con la colocación correcta de los componentes alrededor de un STM en su primer diseño de PCB. Para cualquiera que haya hecho esto aunque sea un poco, no es un problema difícil.
      Al final, esa docena de componentes son el circuito del oscilador/cristal, el hold-up del reset, la alimentación de 3.3V y un montón de capacitores de desacoplo. Ajustar la antena sí puede ser difícil, pero si puedes usar una antena chip tampoco es tan complicado.

      Todo es tan estándar que, cuando vi el esquemático del adafruit RP2040 Feather, me sorprendió más bien que muchas partes parecían casi copiadas tal cual de Feathers anteriores. La diferencia entre el RP2040 Feather y el nRF52840 Feather es el microcontrolador mismo, las 5 piezas completas del circuito de temporización para el RP2040 y más o menos el circuito de antena para la placa de Nordic.

      Los módulos son muy convenientes para vender en el mercado hobby, pero si vas a vender un producto real igual tienes que pasar por el proceso de certificación RF. El costo puede bajar, pero te toca evaluar por tu cuenta si el mayor costo inicial de usar un módulo se compensa con el menor costo de certificación. Aun así, al final lo único que realmente te ahorras es la etapa de ajuste de antena, y normalmente eso se resuelve con una variación del BOM, no con un cambio grande de ruteo.

Al igual que hay decenas de chips STM y PIC, con TI pasa lo mismo. Los clientes quieren pagar solo por lo que necesitan, y los fabricantes tienen la capacidad de producción para sostener esa demanda. Si las diferencias importan, no es una carga. Es muy parecido a quejarse de que Home Depot vende demasiados tipos de madera.

Incluso en ICs de toque capacitivo, Adafruit solo maneja uno, pero en Mouser hay 199 piezas que no están descontinuadas. Para mantener la funcionalidad, a Adafruit le basta con elegir solo una de ellas. La más barata viene en paquete TSOT, así que también debería ser bastante fácil de fabricar. Si no estuviera tan agotado de diseñar y programar este tipo de cosas en el trabajo, hasta podría llegar a casa esta noche y hacer uno. El diseño de la placa tomaría como una hora, y el driver de I2C probablemente unas cuantas horas más.