🛠 Deux ports USB simultanés : périphérique 480 Mbit/s ET hôte USB sur les pastilles
Objectifs
Le Teensy 4.0 possède DEUX ports USB à 480 Mbit/s totalement indépendants : le port micro-USB classique en mode périphérique (Serial, MIDI/MIDIx4/MIDIx16, Audio, Keyboard, Mouse, Joystick, Touchscreen, MTP, Flight Sim, RawHID…) et un port hôte sur deux pastilles SMD au dos de la carte, piloté par la bibliothèque USBHost_t36. Vous allez lire un clavier USB côté hôte tout en parlant au Moniteur série côté périphérique — et apprendre les deux pièges électriques de ce port.
Matériel
- 1 Teensy 4.0
- Adaptateur USB host : souder D+ / D− sur les deux pastilles inférieures (format 3,048 × 1,016 mm) vers un connecteur USB-A femelle (des cartes adaptatrices communautaires existent)
- 1 clavier ou souris USB
- Recommandé : interrupteur de limitation de courant type TPS2055A sur le VBUS de l'appareil branché
- Bibliothèque : https://github.com/PaulStoffregen/USBHost_t36
Code complet
// 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;
}
}
}
Vérification attendue
Le Moniteur série (via le micro-USB) affiche les codes touches pendant que vous tapez sur le clavier branché sur les pastilles : les deux mondes USB coexistent sur la même carte. Notez que le port hôte du 4.0 est data-only : aucun circuit de gestion de courant embarqué (contrairement au 4.1). Bonus workflow : le même port périphérique accepte CircuitPython — téléversez le .hex officiel (https://circuitpython.org/board/teensy40/) avec Teensy Loader et la carte monte comme disque USB ; PJRC avertit que CircuitPython ne couvre pas tout le matériel du 4.0.
Erreurs fréquentes
- Brancher à chaud un périphérique gourmand : « hot-plugging a USB device can draw too much current and possibly crash (brown-out reset) your Teensy » (fil de sortie, Paul Stoffregen) — ajoutez un switch de limitation type TPS2055A, ou branchez AVANT d'alimenter.
- Oublier myusb.Task dans loop : l'hôte n'énumère jamais rien.
- Alimenter le VBUS de l'appareil depuis le 3,3 V du Teensy : les claviers attendent du 5 V ; le 3,3 V est une sortie limitée à 250 mA.
- Oublier de couper le pad VIN/VUSB : si vous injectez du 5 V par VIN tout en gardant le micro-USB branché au PC, vous refoulez du courant dans l'ordinateur — coupez les pads inférieurs pour séparer les deux rails.
- Confondre les pastilles : il y en a trois groupes au dos — USB hôte (2), SD 4 bits (8), broches 24-33 (10) ; vérifiez la fiche card10a/card10b avant de souder.
- Attendre de USBHost_t36 qu'il gère n'importe quel périphérique : la cible est HID (clavier, souris, manettes), MIDI et stockage ; les webcams et le WiFi USB ne sont pas couverts.
Autres tutoriels pour cette carte
- 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
Exemples de code pour cette carte
clignotante.inoArduinotouche-capacitive.inoArduinoanalogique-12-bits.inoArduinomidi-piano.inoArduinopwm-respiration.inoArduinoservo-angle.inoArduino