🛠 Crear un dispositivo HID personalizado con Romu
Objetivos
Este tutorial tiene como objetivo configurar la placa Romu para que se comporte como un dispositivo de interfaz humana (HID) personalizado, como un pad de macros o un controlador MIDI. A diferencia de las placas clásicas que requieren cables, la Romu se conecta directamente a un puerto USB Tipo-A. El objetivo es comprender la arquitectura híbrida del RP2354A y explotar sus funciones de seguridad para crear claves de autenticación sin contraseña o herramientas de productividad.
Material Necesario
- Placa de desarrollo Romu (Bitmerse)
- Ordenador con puerto USB Tipo-A
- Entorno de desarrollo C/C++ (SDK Raspberry Pi RP235x)
- Cable de depuración USB-C (para el flasheo inicial a través de pads)
- Soldador y cable fino (para conectar pads si es necesario)
Pasos
Instala el SDK oficial para el RP2354A. Asegúrate de que el compilador Arm Cortex-M33 esté configurado correctamente, ya que el núcleo principal gestiona la pila USB.
- Configuración del Entorno
git clone https://github.com/raspberrypi/pico-sdk.git
cd pico-sdk
make
Crea una nueva carpeta de proyecto. Como la Romu no tiene GPIOs externos fácilmente accesibles, utilizarás los botones integrados y el LED RGB. Configura el descriptor USB para declarar un dispositivo HID genérico.
- Preparación del Proyecto HID
// Ejemplo simplificado de estructura de descriptor HID
const uint8_t hid_report_descriptor[] = {
0x05, 0x01, // Usage Page (Generic Desktop)
0x09, 0x06, // Usage (Keyboard)
0xA1, 0x01, // Collection (Application)
// ... definiciones de teclas ...
0xC0
};
Escribe el código que lee el estado de los botones físicos en la placa. Al presionar, envía un trama HID específica (por ejemplo, una combinación de teclas para un atajo).
- Implementación de la Lógica de Entrada
void send_hid_report(uint8_t keycode) {
uint8_t report[8] = {0};
report[2] = keycode;
tud_hid_report(0, report, sizeof(report));
}
Compila el firmware. Como no hay un conector USB-C estándar para el flasheo en modo BOOTSEL, probablemente necesites usar los pads de depuración para conectar un adaptador USB-Serial o usar una herramienta de flasheo SWD, según la configuración final de la placa.
- Compilación y Flasheo
cmake ..
make
Verificación
Una vez cargado el firmware, inserta la placa Romu directamente en un puerto USB Tipo-A de tu ordenador. El sistema operativo debe detectar un nuevo dispositivo HID. Abre un editor de texto o una herramienta de diagnóstico USB para confirmar que al presionar los botones de la Romu se activan las acciones programadas (ej: enviar una letra o macro). El LED RGB debe encenderse para indicar actividad.
Para Ir Más Allá
Explora las funciones de seguridad Arm Trustzone y Secure Boot del RP2354A. Puedes diseñar una clave de seguridad que requiera autenticación criptográfica antes de enviar comandos HID, convirtiendo la Romu en un token de autenticación sin contraseña robusto para entornos sensibles.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
romu-rgb-led-pwm.inoC/C++ (Pico SDK)romu-hid-keyboard-macro.inoC/C++ (TinyUSB)romu-internal-flash-storage.inoC/C++ (Pico SDK)romu-midi-controller.inoC/C++ (TinyUSB)romu-secure-boot-check.inoC/C++ (Pico SDK)romu-hid-custom-keyboard.inoC++ (Arduino)