Dispositivo USB HID de ingeniería inversa: ¿una forma fácil de hackear el hardware USB?

1

Fondo :

Quiero hacer un controlador personalizado para una XBox. Ya sea destruyendo un controlador existente o creando hardware y firmware desde cero (ish). (Específicamente, el objetivo es hacer un simulador de manejo estilo máquina de arcade con volante, etc., asignado directamente a los botones de un controlador estándar).

Tengo un controlador de Xbox USB sin marca que parece ser compatible con los estándares USB, ya que conectarlo a una PC y usar un rastreador de paquetes USB confirmó que se reconoce como un dispositivo HID y que los datos provenientes de él parecen ser simples y fáciles. sentido.

Mi pregunta: ¿Cuál sería la forma más sencilla de hacer que el dispositivo USB sea desde cero (ish)?

Iba a cortar un controlador existente: desoldar cualquier resistencia variable y reemplazarla con la mía, por ejemplo. para el volante - y lo mismo para los interruptores. Muerto simple. Pero el problema es, entre otros, que la latencia del controlador parece ser bastante pobre , y esperaba mejorarlo.

¿Existen soluciones listas para usar, como Raspberry Pi, Arduino o similares, que, para crear un dispositivo HID:

  1. Tenga una biblioteca que ofrezca la interfaz de alto nivel más simple para los protocolos USB necesarios, con ejemplos de códigos HID de hello-world.
  2. Dame una buena latencia (no es difícil, estoy seguro, dado que es un dispositivo HID simple)
  3. Preferiblemente a través de un lenguaje de programación de alto nivel como Java. (Mi programación en C deja mucho que desear)
  4. No romper el banco
  5. Fuera de la caja con más de 6 entradas de ADC (> frecuencia de muestreo de 100Hz, > 10 bits) y algunas entradas digitales

Ideas:

  1. Raspberry Pi parece una exageración
  2. Los AFAIK de Arduinos tienen una reputación de ser limitados dado su lenguaje / compilador propietario.
  3. Normalmente programo microprocesadores PIC de 8 bits, pero he oído que su pila USB es limitada, difícil de usar y generalmente problemática. También probablemente significaría circuitos adicionales; o al menos molestarse con paquetes que no sean DIP, hacer PCB o cualquier otra cosa
  4. Programe un teléfono inteligente Android antiguo para que actúe como un dispositivo HID. No sé cuál, si alguna versión de SO me permitiría hacer esto sin escribir o modificar una ROM personalizada. Pero la única forma en que puedo pensar en obtener entradas analógicas / digitales sería a través de un módulo bluetooth que se conectaría al teléfono, sin duda, dando una terrible latencia de extremo a extremo.

¡Todos los consejos son bienvenidos!

    
pregunta CL22

2 respuestas

2

Teensy es bastante bueno en ser USB HID: enlace

Pero si desea conectarlo a una xbox, el lado del software puede ser un poco más complicado; No creo que los controladores xbox sean USB HID simples y creo que tienen sistemas anti-clonación.

    
respondido por el pjc50
1

Sugeriría aquí la serie de microcontroladores PIC32, probablemente más específicamente la serie de piezas PIC32MZ. USB incorporado, muchos canales analógicos, hasta 200MHz en partes, por lo que incluso un poco de manipulación y reproducción de datos a través de un número significativo de canales probablemente no corresponda a la latencia a nivel humano. También se considera que es un microcontrolador, por lo que no tiene parte de la sobrecarga de los núcleos ARM cuando se acerca al límite de uC-SoC.

Por supuesto, generalmente están disponibles en partes SMT (creo que la serie -MZ solo existe en las calificaciones SMT) y es probable que necesite al menos una pequeña placa genérica para usarla, pero hay tableros prefabricados disponibles, como esto . Menciona los PIC más pequeños, por lo que esto podría incluir los mismos entornos de desarrollo, al margen de ser una arquitectura completamente diferente. Es probable que las ofertas de pila USB para esta familia de dispositivos se mejoren con respecto a los PIC de 8 bits debido simplemente a la mayor capacidad. Incluso hay una pila de código abierto disponible aquí que es compatible con HID, aunque puede requerir algunos jimmying para que funcione como Es bastante joven.

Por último, algunos datos y punteros: Arduino es de código abierto; así que no es propietario per se ; como lo señala pjc50 arriba, las personas han logrado reconfigurar los AVR pequeños para que actúen como un controlador HID en lugar del modo de dispositivo predeterminado. Las pilas de Microchip son propietarias y, por lo tanto, depende de ellas como la fuente principal de documentación.

Además, advierto que no sea demasiado dependiente de lenguajes de nivel superior para este tipo de desarrollo. A lo largo de los años, sin duda ha habido varios proyectos diferentes destinados a abrir el desarrollo de los Estados Unidos a los HLL como Java o Python . Estos son ciertamente desarrollos novedosos, pero para aplicaciones como el muestreo o el procesamiento en tiempo real (como su aplicación), la eficiencia es crítica y la impartición de VM / JIT / interpretación en estos dispositivos desperdicia dicha eficiencia. En estos entornos integrados, los microcontroladores que operan más cerca de un nivel bajo que uno alto suelen ser un costo de hacer negocios (o, al menos, hacerlo de manera eficiente). Como se suele decir, las herramientas utilizadas deben encajar en el trabajo.

    
respondido por el ecfedele

Lea otras preguntas en las etiquetas