scan-hote-usb.ino

Arduino Mega ADK (Rev3) · Archivo : scan-hote-usb.ino · Lenguaje : Arduino · Uso : Détecter et identifier l'appareil branché sur le port USB-A

Gracias al MAX3421E, la Mega ADK habla USB como anfitrión hacia un periférico: lo contrario de su papel habitual de objetivo. Este escaneo imprime VID/PID de lo que se enchufe al USB-A: primer paso antes de un driver.

Hardware necesario

Un Arduino Mega ADK Rev3 (ATmega2560 + chip de host USB MAX3421E con puerto USB-A; el pin digital 7 queda reservado para el reset del MAX3421E). 1 dispositivo USB de 5 V de bajo consumo (llave USB, ratón, segundo Arduino en bootloader…).

Cableado

Nada: el dispositivo va directo al puerto USB-A; no use el pin D7 (reset del MAX3421E).

Funcionamiento

Usb.Init arranca el controlador anfitrión; la máquina de estados USB enumera el dispositivo y getDevDescr expone su ID fabricante/producto. Placa « Arduino Mega ADK » en el IDE. Para host USB/ADK, instale la biblioteca USB Host Shield 2.0; no use D7. El puerto USB-A alimenta el accesorio a 5 V.

Para ir más lejos

Conocido el VID/PID, busque la clase del dispositivo (HID, almacenamiento…) en la doc de USB Host Shield 2.0.

scan-hote-usb.ino

// Inversion de role : la Mega ADK devient maitre USB (MAX3421E).
// Bibliotheque : USB Host Shield 2.0 (Arduino IDE > Gestionnaire).
#include <Max3421e.h>
#include <Usb.h>

USB Usb;

void setup() {
  Serial.begin(115200);
  while (!Serial);
  if (Usb.Init() == -1) { Serial.println(F("MAX3421E introuvable")); while (1); }
  Serial.println(F("Hote USB pret (D7 reserve au reset MAX3421E)"));
}

void loop() {
  uint8_t etat = Usb.getUsbTaskState();
  if (etat == USB_STATE_RUNNING) {
    USB_DEVICE_DESCRIPTOR dev;
    Usb.getDevDescr(); // remplit devDesc
    Serial.print(F("Appareil actif VID=0x"));
    Serial.print(devDesc.idVendor, HEX);
    Serial.print(F(" PID=0x"));
    Serial.println(devDesc.idProduct, HEX);
  } else {
    Serial.print(F("Etat USB: 0x"));
    Serial.println(etat, HEX);
  }
  delay(2000);
}

← Volver a la ficha