🛠 HSTX : générer une sortie vidéo/parallèle haute vitesse avec les 8 broches DDR
Objetivos
El RP2350 no tiene ninguna GPU ni motor de visualización — pero posee un bloque único en su categoría: el HSTX (High-Speed Transmit), un transmisor digital solo de salida, de 8 pines, en DDR, citado a 300 Mb/s por pin (datasheet RP2350, §1.1 ; cifra reportada por Wikipedia RP2350). Combinado con los 520 KB de SRAM en 10 bancos y los 16 canales DMA, alimenta pantallas RGB pasivas, DACs R-2R, visualizadores paralelos — el dominio de pico-extras (scanvideo/audio, WIP) y de pico-playground. Este tutorial: comprender la cadena DMA→HSTX→pines y montar una demo scanvideo.
Material
- 1 × tarjeta RP2350 en formato Pico-2 (las demos pico-playground apuntan a
PICO_BOARD=pico2) + cable USB de datos - 1 × pantalla RGB pasiva tipo « DVI sin relojes » o un breakout HSTX (los esquemas de referencia están en pico-extras/pico-playground) — SIN VERIFICAR: el cableado exacto pantalla-resistencias varía según las demos, sigue el esquema del ejemplo que compiles
- pico-sdk 2.x + pico-extras (rama WIP) + pico-playground
Comandos completos
# 1) SDK + extras + playground côte à côte
git clone https://github.com/raspberrypi/pico-sdk.git
git clone https://github.com/raspberrypi/pico-extras.git
git clone https://github.com/raspberrypi/pico-playground.git
export PICO_SDK_PATH=$PWD/pico-sdk PICO_EXTRAS_PATH=$PWD/pico-extras
# 2) Les démos scanvideo du playground (dossier scanvideo)
cd pico-playground && mkdir build && cd build
cmake -DPICO_BOARD=pico2 ..
make -j$(nproc) scanvideo/hello_scanyuv # exemple type
En cuanto a la API, la filosofía HSTX:
// Le HSTX lit la SRAM via DMA et émet en DDR sur 8 broches.
// Pseudo-squelette (API pico-extras WIP, vérifie l'en-tête hardware/hstx.h)
// - configurer le timing : front porch / sync / back porch par ligne
// - charger les pixels en SRAM (banque dédiée pour ne pas bloquer le CPU)
// - armer un DMA circulaire : buffer -> HSTX_DATA, déclenché par le timer vidéo
// - le CPU peut peindre le buffer suivant pendant la transmission : le
// double buffering tient parce que le RP2350 a 520 Ko, pas 264 Ko.
Verificación esperada
Aparece una imagen animada en la pantalla RGB: el HSTX emite los píxeles continuamente, el DMA los reenvía desde la SRAM, y los dos núcleos (M33 o Hazard3 — el HSTX es un periférico, le da igual la arquitectura de la CPU) quedan libres para el renderizado. Mide la carga de memoria: un framebuffer de 320×240 en RGB565 = 150 KB, es decir, el 29 % de la SRAM — imposible en doble buffer en RP2040 (264 KB), cómodo en RP2350.
Errores frecuentes
- Buscar el HSTX en el SDK principal: vive en pico-extras, una rama explícitamente WIP — las API cambian, fija un commit.
- Creer que el HSTX es bidireccional: es un transmisor, solo de salida — para adquisición paralela rápida, es la PIO (¡12 SM!) la que lee, no el HSTX.
- Olvidar el nivel lógico: los pines siguen IOVDD (1,8–3,3 V) — una pantalla TTL de 5 V directa no está garantizada, de ahí los esquemas de referencia.
- Subdimensionar la alimentación: una salida DDR a alta frecuencia en 8 pines + pantalla consume corriente — SIN VERIFICAR: la hoja de datos da tablas por dominio, no una cifra «típica» única; alimenta correctamente (el SMPS interno proporciona hasta 200 mA para el núcleo, no para tus periféricos).
- Escribir en el framebuffer durante el fotograma: tearing — el doble/triple buffer es obligatorio, y es precisamente lo que permiten los 520 KB.
- Confundir HSTX y PIO: el HSTX está diseñado para el flujo paralelo ancho y rápido (vídeo, DAC); la PIO sigue siendo la reina para protocolos bit-bang con condiciones. Ambos coexisten: 3 bloques PIO + HSTX en paralelo.
- Programar en RISC-V pensando que los ejemplos scanvideo lo siguen: la mayoría de los ejemplos de playground se compilan/prueban en Arm — el port RISC-V de las demos de vídeo corre de tu cuenta.
- Descuidar las restricciones térmicas: temperatura ambiente máxima 85 °C (hoja de datos §14.9.3) y apagado por detección de unión 100–150 °C config — una demo de vídeo en carcasa cerrada puede acercarse a los umbrales.
Otros tutoriales para esta placa
- Flasher MicroPython sur une carte RP2350 générique et faire clignoter la première LED
- Console série sur RP2350 : USB CDC natif et UART0 de secours
- Lire l'ADC 12 bits et le capteur de température interne du RP2350
- Exploiter les 3 blocs PIO et 12 machines d'état du RP2350 (avec IRQ dédiées)
- Pico SDK 2.x sur une carte RP2350 générique : CMake, board header et PICO_BOARD
- Basculer les cœurs de Arm Cortex-M33 à Hazard3 RISC-V avec ARCHSEL
Ejemplos de código para esta placa
clignotante.pyPythonbouton-interruption.pyPythonpwm-servo.pyPythonlecture-adc.pyPythonneopixel.pyPythonoled-i2c.pyPython