⏱️ Lectura: 15 min

El CH32V003, un microcontrolador RISC-V de apenas 10 centavos de dólar, es el centro de la respuesta que un ingeniero embebido de Trinidad y Tobago publicó el 16 de agosto de 2026 contra uno de los ataques más duros que ha recibido la arquitectura en años.

📑 En este artículo
  1. TL;DR
  2. Qué pasó
  3. Contexto e historia
  4. Detalles técnicos del microcontrolador RISC-V CH32V003
  5. Cómo probar un CH32V003 vos mismo
  6. Impacto y análisis
  7. Qué sigue
  8. Preguntas frecuentes
    1. ¿Qué es el CH32V003?
    2. ¿Qué significa RV32EC?
    3. ¿Por qué Dmitry Grinberg critica a RISC-V si él mismo predijo que ganaría el segmento barato?
    4. ¿El CH32V003 puede reemplazar cualquier proyecto con STM32 o ATtiny?
    5. ¿Qué programador hace falta para grabar el chip?
    6. ¿Existe un toolchain completamente open source para el CH32V003?
  9. Referencias

El artículo original, de Dmitry Grinberg, llegó a la portada de Hacker News y encendió una discusión larga en Lobsters. La réplica, publicada en rvembedded.com, no defiende cada decisión del comité de RISC-V: ataca un punto distinto, el que casi nadie discutió en esos hilos.

TL;DR

  • Dmitry Grinberg publicó “RISC-V: They Should Have Known Better” y llegó a la portada de Hacker News.
  • Un ingeniero embebido de Trinidad y Tobago respondió el 16 de agosto de 2026 en rvembedded.com.
  • El CH32V003 es un microcontrolador RISC-V RV32EC de unos 10 centavos de dólar, con 2 KB de RAM y 16 KB de flash.
  • Grinberg dedujo desde cero los requisitos de un núcleo barato y llegó exactamente a RV32EC, el que usa el CH32V003.
  • El propio Grinberg escribió que está “100% seguro” de que RISC-V dominará el segmento de microcontroladores desechables.
  • El autor pagó entre US$60 y US$200 de envío por chips de un dólar, sin el envío gratuito habitual en EE.UU. y Europa.
  • Usó el CH32V003 en dos productos reales: un monitor de contenedores con sensor ToF y un controlador agrícola de puertas.
  • El debate sigue abierto en Lobsters sin resolución técnica posible: es una discusión sobre acceso, no solo sobre encoding.

Qué pasó

Dmitry Grinberg publicó “RISC-V: They Should Have Known Better”, un ensayo extenso sobre las decisiones de codificación de instrucciones que, según él, hacen de RISC-V una arquitectura mal diseñada tanto para procesadores de alto rendimiento como para microcontroladores baratos. El texto llegó a la portada de Hacker News y generó un hilo largo en Lobsters, dos de los foros donde más se discute diseño de hardware entre ingenieros de software y firmware.

La respuesta llegó tres días después, el 16 de agosto de 2026, cuando un ingeniero que trabaja desde Trinidad y Tobago publicó su réplica en rvembedded.com. Su punto de partida no es técnico: es geográfico. Antes de opinar sobre codificación de instrucciones, describe lo que cuesta conseguir un chip de un dólar cuando vivís fuera de Estados Unidos o Europa.

Contexto e historia

RISC-V es una arquitectura de conjunto de instrucciones (ISA) abierta y libre de regalías, desarrollada originalmente en UC Berkeley y hoy gobernada por RISC-V International. A diferencia de ARM o x86, cualquier fabricante puede implementar el núcleo sin pagar licencia, lo que abarató drásticamente los microcontroladores más simples.

El chip que discute el artículo es el CH32V003, fabricado por la empresa china WCH, que implementa RV32EC, una variante reducida de RISC-V de 32 bits con extensión de instrucciones comprimidas. El autor de la réplica no lo eligió al azar: lo usa en producción desde hace más de un año. En 2025 publicó un video titulado “Goodbye STM32 ARM, Meet the CH32 RISC-V Chips That Replaced It!” donde documentó su migración completa desde ARM hacia esta familia de chips.

Su argumento central no ataca la elegancia del encoding de instrucciones, que reconoce imperfecto (los offsets de las instrucciones comprimidas de store le parecen extraños, y Zicsr debería venir incluido por defecto en vez de ser una extensión aparte que hay que recordar pedir). Ataca la premisa de que el diseño de la ISA es lo único que importa. Cuenta que pagó entre US$60 y US$200 de envío por pedidos de chips de un dólar, mientras que comprar en Digikey o Mouser con envío gratuito es la norma para un desarrollador en Estados Unidos o Europa. Una empresa de fabricación de placas que lo había contactado para un posible patrocinio retiró la oferta apenas supo desde dónde despachaba.

Detalles técnicos del microcontrolador RISC-V CH32V003

Antes de las quejas sobre el encoding, Grinberg hace un ejercicio distinto: se pregunta para qué sirve realmente un núcleo de microcontrolador barato. Su respuesta es que vive dentro de un chip más grande, activando registros y configurando bloques de hardware (su ejemplo es un reproductor MP3, una lectora de tarjetas SD, una memoria USB). El trabajo real lo hace el silicio a medida alrededor del núcleo, no el núcleo mismo.

De ahí deriva los requisitos: baja latencia de interrupción, poca área de silicio y buena densidad de código, porque el código vive en ROM o SRAM y ambas son caras por byte. Sin multiplicador ni divisor por hardware, porque casi no hay aritmética pesada. Sin separación de privilegios, porque nunca corre nada que no sea de confianza.

Y entonces escribe la frase él mismo: “Pero”, podrías decir, “¡acabás de describir RV32IC (o RV32EC)!”. Más adelante, sin rodeos, admite: “Estoy 100% seguro de que RISC-V va a quedarse con el segmento de microcontroladores baratos y desechables, eventualmente.” El crítico más citado del mes dedujo desde cero, con lápiz y papel, el conjunto de instrucciones que ya implementa un chip de diez centavos, y luego pasó el resto del artículo molesto porque ese chip existe.

El CH32V003 en sí tiene especificaciones mínimas: 16 registros de propósito general (la “E” de RV32E, contra los 32 registros de la variante estándar RV32I), 2 KB de SRAM, 16 KB de flash, sin multiplicador, sin divisor y solo modo máquina, sin niveles de privilegio adicionales. Es literalmente el núcleo que Grinberg describió como ideal antes de criticar que existiera.

microcontrolador RISC-V CH32V003 sobre una placa de desarrollo
El CH32V003 implementa RV32EC: 16 registros, sin multiplicador ni divisor. Foto de Sahand Babali en Unsplash
flowchart TD
    A["Nucleo barato dentro de un chip mayor"] --> B["Baja latencia de interrupcion"]
    A --> C["Poca area de silicio"]
    A --> D["Buena densidad de codigo"]
    A --> E["Sin multiplicador ni divisor"]
    A --> F["Sin separacion de privilegios"]
    B --> G["RV32EC"]
    C --> G
    D --> G
    E --> G
    F --> G

OpciónCuándo usarlaVentajaLimitación
CH32V003 (RISC-V RV32EC)Proyectos de volumen alto donde el costo unitario define el diseñoRonda los 10 centavos de dólar y usa una ISA abiertaSin multiplicador ni divisor por hardware, solo modo máquina
STM32C0 (ARM Cortex-M0+)Cuando ya existe código o librerías ARM que no conviene portarEcosistema HAL maduro y depuración con herramientas ARM estándarSujeto a la misma logística de importación que cualquier otro chip ARM
ATtiny402 (AVR de 8 bits)Proyectos simples sin necesidad de aritmética de 32 bitsToolchain avr-gcc probado durante décadasCódigo menos denso que RISC-V comprimido en lógica compleja

💭 Clave: Grinberg dedujo desde primeros principios el núcleo ideal para un microcontrolador barato y llegó exactamente a RV32EC. Su enojo no es con la ingeniería, es con que el resultado le parece casualidad, no mérito.

Cómo probar un CH32V003 vos mismo

El chip se consigue en placas de desarrollo de bajo costo y el toolchain para programarlo es abierto. El proyecto más usado es ch32v003fun, mantenido por el ingeniero de hardware Charles Lohr, que expone los registros del chip sin una capa HAL pesada.

Instalación en Linux (Debian/Ubuntu):

sudo apt install git make gcc
git clone https://github.com/cnlohr/ch32v003fun.git
cd ch32v003fun/ch32v003fun
make flash

Instalación en macOS (con Homebrew):

brew install git make
git clone https://github.com/cnlohr/ch32v003fun.git
cd ch32v003fun/ch32v003fun
make flash

Instalación en Windows (vía WSL2, la ruta más estable porque el toolchain RISC-V está pensado para Linux):

wsl --install
wsl
sudo apt install git make gcc
git clone https://github.com/cnlohr/ch32v003fun.git
cd ch32v003fun/ch32v003fun
make flash

El repositorio descarga el compilador cruzado RISC-V la primera vez que corrés make. El comando make flash compila el ejemplo y lo graba en el chip a través de un programador WCH-LinkE conectado por el pin SWIO.

El ejemplo mínimo enciende y apaga un LED escribiendo directamente los registros del puerto GPIO, sin capa de abstracción intermedia:

#include "ch32v003fun.h"

int main() {
    SystemInit();
    RCC->APB2PCENR |= RCC_APB2Periph_GPIOC;
    GPIOC->CFGLR &= ~(0xf << (4 * 4));
    GPIOC->CFGLR |= (GPIO_Speed_10MHz | GPIO_CNF_OUT_PP) << (4 * 4);

    while (1) {
        GPIOC->BSHR = (1 << 4);
        Delay_Ms(500);
        GPIOC->BSHR = (1 << (4 + 16));
        Delay_Ms(500);
    }
}

Este código configura el pin PC4 como salida push-pull y lo alterna cada 500 milisegundos. Es el equivalente al “hola mundo” en cualquier microcontrolador.

Un ejemplo más cercano a un caso real, inspirado en el monitor de contenedores de basura que el propio autor de la réplica puso en producción, lee un sensor por ADC y activa un relé cuando supera un umbral:

#include "ch32v003fun.h"

#define UMBRAL_SENSOR 600

int main() {
    SystemInit();
    RCC->APB2PCENR |= RCC_APB2Periph_GPIOA | RCC_APB2Periph_ADC1;
    ADC1->RSQR3 = 0;
    ADC1->CTLR2 |= ADC_ADON;
    Delay_Ms(1);
    ADC1->CTLR2 |= ADC_ADON;

    while (1) {
        ADC1->CTLR2 |= ADC_SWSTART;
        while (!(ADC1->STATR & ADC_EOC));
        uint16_t muestra = ADC1->RDATAR;

        if (muestra > UMBRAL_SENSOR) {
            GPIOC->BSHR = (1 << 4);
        } else {
            GPIOC->BSHR = (1 << (4 + 16));
        }
    }
}

El doble ADC_ADON no es un error de copiado: en la familia CH32V003 el segundo flanco de esa señal dispara la calibración interna del conversor antes de la primera lectura.

Para confirmar que el binario realmente se compiló para el núcleo reducido y no para una variante con multiplicador o divisor, el comando readelf muestra la cadena de arquitectura embebida en el ELF:

riscv32-unknown-elf-readelf -A firmware.elf | grep arch

Si el Makefile apunta correctamente al chip, la salida debe mostrar rv32ec como cadena de arquitectura, no rv32imc ni ninguna variante con la extensión “M” de multiplicación.

⚠️ Ojo: sin multiplicador ni divisor por hardware, cualquier operación aritmética que no sea suma o desplazamiento de bits se resuelve en software. Para filtros digitales, criptografía o procesamiento de señal, el CH32V003 no es la elección correcta: ahí conviene un núcleo con la extensión M.

Impacto y análisis

El desacuerdo de fondo no es sobre si el CH32V003 es un buen chip. Es sobre si el argumento de Grinberg (que las necesidades de un procesador de alto rendimiento son diametralmente opuestas a las de un núcleo barato, y que por lo tanto ninguna ISA puede servir bien a los dos extremos) sostiene su propia conclusión. El autor de la réplica responde con lo que tiene sobre su escritorio: el mismo estándar RISC-V cubre desde el CH32V003 de diez centavos hasta núcleos de aplicación con MMU y multiplicación de doble precisión, con extensiones que cada implementación activa o ignora según lo que necesite.

Ese es, en el fondo, el diseño modular de RISC-V: una base entera obligatoria y decenas de extensiones opcionales (M para multiplicación, C para instrucciones comprimidas, A para atómicas, F y D para punto flotante) que un fabricante combina según el mercado. Grinberg lo ve como una fuente de fragmentación. El autor de Trinidad y Tobago lo ve como la razón por la que un mismo ecosistema de herramientas puede compilar tanto para el CH32V003 como para un núcleo de aplicación mucho más grande.

El argumento más fuerte de la réplica, sin embargo, no es de arquitectura: es de acceso. Para un estudiante en Nigeria, Bangladesh o el Caribe, la diferencia entre un chip de diez centavos y uno de un dólar no es un redondeo, es la diferencia entre que treinta estudiantes de un curso tengan cada uno su propio chip o que treinta estudiantes miren una sola placa de demostración, si es que llega alguna. La elegancia del encoding de instrucciones es un lujo que se puede discutir una vez que el hardware ya está sobre el escritorio. Que el hardware llegue al escritorio es la pregunta anterior, y ninguna de las quejas sobre offsets comprimidos la responde.

estudiante armando un circuito con un microcontrolador economico
Con 30 alumnos por curso, 10 centavos contra un dólar decide quién tiene chip propio. Foto de Robin Glauser en Unsplash

El autor menciona además un libro propio, todavía en un 80% de avance, dedicado exclusivamente a documentar cada una de las particularidades del CH32V003 que un desarrollador nuevo termina golpeándose la cabeza al descubrir: la ausencia de Zicsr por defecto, los offsets extraños de las instrucciones de store comprimidas, y otras decisiones del encoding que Grinberg también señala en su artículo. En eso, ambos coinciden: el ISA tiene aristas reales. Donde discrepan es en si esas aristas invalidan el proyecto completo.

Qué sigue

La discusión sigue abierta en Lobsters y en los comentarios de ambos artículos, y no tiene un cierre técnico posible: es, en el fondo, un desacuerdo sobre qué problema está tratando de resolver RISC-V primero. Mientras tanto, el CH32V003 y chips similares de la familia CH32, fabricados por WCH, siguen apareciendo en proyectos hobbistas documentados públicamente, como el interruptor activado por silbido que el propio autor de la réplica construyó y mostró en video.

A corto plazo, lo más probable es que el debate no cambie el diseño de la ISA (RISC-V International ya fijó las extensiones base) pero sí influya en cómo se enseña arquitectura de computadoras en universidades con presupuesto limitado, donde el costo por estudiante ya es, para muchos programas, el factor que decide si la materia se dicta con hardware real o solo con simuladores.

📖 Resumen en Telegram: Ver resumen

Probalo vos: cloná ch32v003fun y corré make flash sobre una placa CH32V003 de pocos dólares para ver el blink corriendo en minutos.

Preguntas frecuentes

¿Qué es el CH32V003?

Es un microcontrolador de 32 bits fabricado por la empresa china WCH que implementa RV32EC, una variante reducida de RISC-V con instrucciones comprimidas. Cuesta alrededor de 10 centavos de dólar por unidad en volumen.

¿Qué significa RV32EC?

RV32 indica una arquitectura RISC-V de 32 bits. La “E” señala el subconjunto Embedded, con 16 registros de propósito general en vez de los 32 habituales. La “C” indica soporte de instrucciones comprimidas de 16 bits, que mejoran la densidad de código.

¿Por qué Dmitry Grinberg critica a RISC-V si él mismo predijo que ganaría el segmento barato?

Su objeción no es que RISC-V vaya a dominar ese segmento, sino que considera que ciertas decisiones de encoding, como los offsets de las instrucciones de store comprimidas o que Zicsr sea una extensión separada, son defectos de diseño evitables, más allá de que el resultado final funcione.

¿El CH32V003 puede reemplazar cualquier proyecto con STM32 o ATtiny?

No en todos los casos. Al no tener multiplicador ni divisor por hardware, tareas con aritmética intensiva, como procesamiento de señal o criptografía, rinden peor que en un chip con esas unidades. Para tareas de control simple, como leer sensores o manejar salidas digitales, es una alternativa válida y más barata.

¿Qué programador hace falta para grabar el chip?

Un adaptador WCH-LinkE, que se conecta por el pin SWIO del chip y cuesta pocos dólares. El mismo adaptador también permite depurar con puntos de interrupción.

¿Existe un toolchain completamente open source para el CH32V003?

Sí. El proyecto ch32v003fun ofrece ejemplos, definiciones de registro y un flujo de compilación basado en GCC para RISC-V, sin depender del IDE propietario de WCH.

Referencias

  • rvembedded.com: la réplica completa de un ingeniero embebido de Trinidad y Tobago al artículo de Dmitry Grinberg, publicada el 16 de agosto de 2026.
  • dmitry.gr: sitio de Dmitry Grinberg, autor de “RISC-V: They Should Have Known Better”, el artículo que originó la discusión.
  • github.com/cnlohr/ch32v003fun: toolchain y ejemplos open source para programar el CH32V003 sin el IDE propietario de WCH.
  • riscv.org: sitio oficial de RISC-V International, la organización que mantiene las especificaciones de la arquitectura.
  • en.wikipedia.org/wiki/RISC-V: referencia general sobre el conjunto de instrucciones RISC-V y sus extensiones.

📱 ¿Te gusta este contenido? Únete a nuestro canal de Telegram @programacion donde publicamos a diario lo más relevante de tecnología, IA y desarrollo. Resúmenes rápidos, contenido fresco todos los días.

Imagen destacada: Foto de Mathew Schwartz en Unsplash


Javier Alarcón

Ingeniero de infraestructura especializado en redes, sistemas Linux, Kubernetes y arquitecturas cloud. Cubre hardware, networking, observabilidad y prácticas de ingeniería para equipos de producción.

0 Comentarios

Deja un comentario

Marcador de posición del avatar

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.