Cómo saber si se perdió la conexión USB

6

Estoy trabajando con el controlador AT90USB1287 con comunicación USB a PC. Estoy enviando algunos comandos desde la PC al controlador utilizando la comunicación USB para activar algún interruptor controlado. Puedo cambiar los estados del interruptor mediante el envío de comandos (ENCENDIDO y APAGADO, interruptor controlado por voltaje).

Mi problema es cuando el interruptor está ENCENDIDO y, desafortunadamente, el usuario olvidó enviar el comando de APAGADO desde la PC y él apaga la PC, pero aún así el controlador se está ejecutando o supongo que si perdí la conexión de la PC a través de USB, en ese momento está causando problemas.

Quiero verificar el código del controlador ATUSB1287 en sí mismo si la conexión USB está suelta, entonces el comando swicth t debería ser cero.

¿Puede alguien ayudarme a saber si la conexión USB se pierde o no? Este es mi enfoque, ¿es posible verificar en el bucle principal que se perdió la conexión USB? si se pierde, apague.

¿Alguna otra manera de apagar? después de perder la conexión a la PC o al apagado de la PC.

Soy nuevo en este tipo de cosas, si hay algo malo en esta pregunta, por favor, discúlpeme.

    
pregunta verendra

5 respuestas

2

En la página 258 de la hoja de datos :

  

• 0 - VBUS: bandera VBus
  El valor leído de este bit indica el estado de   el pin VBUS. Este bit puede ser utilizado en dispositivo.   Modo para monitorear el estado de conexión del bus USB de la aplicación. Ver   Sección 22.10, página 255   para más detalles.

En la página 255:

  

22.10 Detección de plug-ins
  La conexión USB es detectada por el pad VBUS, gracias a la siguiente arquitectura:

  LalógicadecontroldelpadVBUSemiteunaseñalconrespectoalVBUS.  niveldevoltaje:
  •Laseñal"Session_valid" es activa alta   cuando el voltaje en el pad VBUS es mayor o   igual a 1.4V. Si es inferior a 1,4 V, la señal no está activa
  • La señal “Vbus_valid” está activa alta cuando   El voltaje en la almohadilla VBUS es mayor o igual a 4.4V. Si es inferior a 4.4V, la señal no está activa
  • Se establece el bit de estado VBUS   cuando VBUS es mayor que "Vbus_   válido". El bit de estado VBUS se borra   cuando VBUS cae por debajo   “Session_valid” (comportamiento de histéresis)
  • El indicador VBUSTI se establece cada vez que cambia el estado del bit VBUS

No estoy seguro de si esto es lo que estás buscando pero pensé que lo publicaría de todos modos.

    
respondido por el Wallace
2

Es probable que la solución que mejor se adapte a sus requisitos sea buscar cuándo dejan de suceder los eventos de trama USB de 1 ms. Debería haber una lógica relacionada en su código USB para manejar estos eventos, que podría haber restablecido una pérdida del temporizador de trama. Si ese temporizador se vence, sabes que la PC ya no está administrando activamente el USB, incluso si VBUS todavía está presente.

    
respondido por el Chris Stratton
1
  

¿Cómo saber si la conexión USB está perdida o no?

Busque en el manual de su microcontrolador, debería haber información sobre cómo detectar el evento de suspensión USB. Este evento ocurre cuando el host deja de comunicarse con el dispositivo por más de 3 ms, sin enviar eventos de marco uniforme. Se supone que los dispositivos USB disminuyen su corriente USB en este estado.

Tenga en cuenta que esto no será útil en caso de que el controlador o el programa de control simplemente muera, por ejemplo. por el administrador de tareas. El evento de marco USB todavía se enviará cada milisegundo.

    
respondido por el Turbo J
1

Si está usando el marco LUFA para administrar la comunicación USB, entonces puede usar el evento EVENT_USB_Device_Disconnect () para detectar la desconexión física del cable (igual que la detección VBUS que Wallace señaló).

La respuesta de Chris Stratton también se admite en el marco LUFA, a través del EVENT_USB_Device_StartOfFrame () que se recibe cada 1 ms y se puede usar para detectar una conexión válida de nivel de protocolo. Simplemente reinicie un temporizador cada vez que se dispare el evento y verifique si el temporizador se desborda. Si es así, su dispositivo está conectado físicamente, pero no se está comunicando.

Puede encontrar más información sobre estos eventos en LUFA a través de la documentación aquí: respondido por el indrone

0

Una forma no específica de USB sería que el controlador consulte ocasionalmente la PC y espere un reconocimiento. Después de N consultas sin un acuse de recibo, el controlador puede asumir que la comunicación se ha perdido.

    
respondido por el JRobert

Lea otras preguntas en las etiquetas