¿Señal diferencial USB de un solo pin?

Me gustaría hacer un dispositivo similar al "Digispark", pero lo que realmente me molesta de esos (y la mayoría, si no todos, los diseños de V-USB, al menos todos los que pude encontrar en línea), es el "desperdicio" de un pin GPIO que es solo el negativo de otro pin para el par diferencial. así que me preguntaba si hay una manera fácil (y barata + pequeña, con un recuento de chips tan bajo) de hacer el par diferencial a la conversión de dúplex completo de un solo extremo.

métodos que conozco:

  • usando un opamp para convertir un par diferencial a un solo extremo
  • usando una puerta NOT para convertir un solo extremo a un par diferencial

el problema es que obviamente no podía poner esos dos en paralelo, o produciría un ciclo de retroalimentación.

¿Es esto posible sin tener un IC dedicado que entienda USB u otro pin "desperdiciado" para indicar la dirección? el circuito tendría que distinguir entre una salida impulsada y un pin de entrada de alta impedancia en tiempo real esencialmente, y no tengo idea de si eso podría lograrse o cómo.

USB no es verdadero diferencial. Hay estados que requieren que tanto D+ como D- sean bajos.
¿Para qué vas a usar el pin extra? Si es un microcontrolador con un periférico USB incorporado y un par de señales diferenciales, no podrá usarlo para nada más.
@EugeneSh. V-USB es una implementación de "USB virtual": permite que los AVR sin periférico USB emulen USB.
@EugeneSh. como insinué mi mención de V-USB y "barato", no es un periférico USB (porque generalmente cuestan más), sino esencialmente un bit USB1.1 de baja velocidad. los Digisparks, por ejemplo, se ejecutan en un ATtiny85
@TomCarpenter Acabo de enterarme de eso después de publicar mi pregunta. un poco feo si me preguntas, pero supongo que eso significa que realmente no puedo hacerlo.
@nonchip Supongo que es un poco feo, pero también es bastante inteligente porque permite que se incrusten cables de control de banda lateral adicionales dentro de las dos líneas de datos.
Podría mirar el ATtiny861 que tiene más pines y aún es económico. No está claro si es un objetivo oficial de V-USB, pero hay indicios de que la gente lo ha hecho funcionar. Pero siendo realistas, considere algo barato con un verdadero motor de dispositivo USB.
@ChrisStratton, sí, si necesitara algo rápido, definitivamente optaría por el verdadero USB, pero solo quiero hacer un prototipo barato (tengo un montón de attiny13 y -85s y atmega8s por ahí) para convertir esencialmente USB CDC a 1-64 KB/s SPI modo 3 con 2 comandos adicionales analizados por el uC.
@nonchip, ¿eres lo suficientemente valiente como para quemar el fusible de reinicio? Eso produciría otra E/S (creo que puede recuperarla con un programador de alto voltaje)
¿@ChrisStratton con una tarifa de 12 centavos? sí, creo que solo mostrar un cambio de código PER sería incluso más barato que construir (nadie puede permitirse comprar) un programador HV;)

Respuestas (1)

USB no siempre es diferencial. Hay estados de señalización que requieren que tanto D+ como D- sean bajos.

Además, D+/D- se utilizan para otros fines, como realizar el reinicio y la detección de velocidad, lo que requiere que se cambien las configuraciones de la resistencia de detección.

El pin no se "desperdicia", es "requerido". Supongo que debería pensar en él menos como un par diferencial y más como un inteligente protocolo de comunicación de dos hilos que a veces se usa como diferencial para mejorar la velocidad y la inmunidad, y a veces como un solo extremo para hacer cosas de control.

No estaba al tanto de eso antes (D+/- generalmente se describen como un par diferencial, y los nombres también lo insinúan), pero sí, está bien, obviamente no puedo hacerlo entonces (excepto agregando un " dedicado " usb a 1 cable" ic o algo así, que... no. :P)