🛠 Deux ports USB simultanés : périphérique 480 Mbit/s ET hôte USB sur les pastilles
Objetivos
El Teensy 4.0 posee DOS puertos USB de 480 Mbit/s totalmente independientes: el puerto micro-USB clásico en modo periférico (Serial, MIDI/MIDIx4/MIDIx16, Audio, Keyboard, Mouse, Joystick, Touchscreen, MTP, Flight Sim, RawHID…) y un puerto host en dos pads SMD en la parte trasera de la placa, controlado por la librería USBHost_t36. Vas a leer un teclado USB en el lado host mientras te comunicas con el Monitor serie en el lado periférico — y aprenderás las dos trampas eléctricas de este puerto.
Material
- 1 Teensy 4.0
- Adaptador USB host: soldar D+ / D− en los dos pads inferiores (formato 3,048 × 1,016 mm) hacia un conector USB-A hembra (existen placas adaptadoras comunitarias)
- 1 teclado o ratón USB
- Recomendado: interruptor de limitación de corriente tipo TPS2055A en el VBUS del dispositivo conectado
- Librería: https://github.com/PaulStoffregen/USBHost_t36
Código completo
// Hôte USB (pastilles du bas) + périphérique série (micro-USB) en parallèle.
#include <USBHost_t36.h>
USBHost myusb;
USBHIDParser hid1(myusb);
KeyboardController clavier(myusb);
void setup {
Serial.begin(9600); // port DEVICE : le Moniteur passe par là
myusb.begin; // port HOST : les pastilles du dessous
Serial.println(F("branchez un clavier USB"));
}
void loop {
myusb.Task; // machine à états de l'hôte — À NE PAS OUBLIER
if (clavier) {
// getKeys renvoie les touches actives ; voir les exemples
// Keyboard de USBHost_t36 pour le mapping complet.
static uint8_t touches[6];
if (memcmp(touches, clavier.getKeys, 6)) {
memcpy(touches, clavier.getKeys, 6);
Serial.print(F("touches actives : "));
for (int i = 0; i < 6; i++)
Serial.print(touches[i], HEX), Serial.print(' ');
Serial.println;
}
}
}
Verificación esperada
El Monitor serie (a través del micro-USB) muestra los códigos de tecla mientras tecleas en el teclado conectado a los pads: los dos mundos USB coexisten en la misma placa. Ten en cuenta que el puerto host del 4.0 es solo de datos: no tiene circuito de gestión de corriente integrado (a diferencia del 4.1). Bonus de flujo de trabajo: el mismo puerto periférico acepta CircuitPython — carga el .hex oficial (https://circuitpython.org/board/teensy40/) con Teensy Loader y la placa se monta como disco USB; PJRC advierte que CircuitPython no cubre todo el hardware del 4.0.
Errores frecuentes
- Conectar en caliente un dispositivo que consume mucha corriente: «hot-plugging a USB device can draw too much current and possibly crash (brown-out reset) your Teensy» (hilo de salida, Paul Stoffregen) — añade un interruptor de limitación tipo TPS2055A, o conecta ANTES de alimentar.
- Olvidar myusb.Task en loop: el host nunca enumera nada.
- Alimentar el VBUS del dispositivo desde los 3,3 V del Teensy: los teclados esperan 5 V; los 3,3 V son una salida limitada a 250 mA.
- Olvidar cortar el pad VIN/VUSB: si inyectas 5 V por VIN mientras mantienes el micro-USB conectado al PC, estás enviando corriente hacia el ordenador — corta los pads inferiores para separar los dos rieles.
- Confundir los pads: hay tres grupos en la parte trasera — USB host (2), SD 4 bits (8), pines 24-33 (10); verifica la ficha card10a/card10b antes de soldar.
- Esperar que USBHost_t36 gestione cualquier dispositivo: el objetivo es HID (teclado, ratón, mandos), MIDI y almacenamiento; las cámaras web y el WiFi USB no están cubiertos.
Otros tutoriales para esta placa
- Premiers pas sur le Teensy 4.0 : Teensyduino, Loader et premier Blink
- GPIO et PWM sous 3,3 V : les règles d'or du Teensy 4.0
- Entrées analogiques et capteur de température interne : le ADC et ses limites
- Piloter un ruban WS2812 sans bloquer le CPU : WS2812Serial et OctoWS2811
- Contrôleur MIDI USB : un potard qui joue du piano (MIDIx4/MIDIx16)
- Comprendre la mémoire : 2 Mo de flash, 1 Mo de RAM TCM/DMA, EEPROM émulée et LittleFS
Ejemplos de código para esta placa
clignotante.inoArduinotouche-capacitive.inoArduinoanalogique-12-bits.inoArduinomidi-piano.inoArduinopwm-respiration.inoArduinoservo-angle.inoArduino