Estoy trabajando con el controlador AT90USB1287 con comunicación USB a PC. Estoy enviando algunos comandos desde la PC al controlador mediante comunicación USB para activar algún interruptor controlado. Puedo cambiar los estados del interruptor enviando comandos (ENCENDIDO y APAGADO, interruptor controlado por voltaje).
Mi problema es cuando el interruptor está ENCENDIDO y, lamentablemente, el usuario olvidó enviar el comando APAGADO desde la PC y apagó la PC, pero el controlador sigue funcionando 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 se perdió, entonces el comando swicth t debe ser cero.
¿Alguien puede ayudarme a saber cómo se pierde la conexión USB 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 forma de desconectar? después de perder la conexión a la PC o apagar la PC.
Soy nuevo en este tipo de cosas, si hay algo mal en esta pregunta, disculpe.
En la página 258 de la hoja de datos :
• 0 – VBUS: bandera VBus
El valor leído de este bit indica el estado del pin VBUS. Este bit se puede usar en el modo de dispositivo para monitorear el estado de conexión del bus USB de la aplicación. Consulte la Sección 22.10, página 255 para obtener más detalles.
En la página 255:
22.10 Detección de plug-in
La conexión USB es detectada por el pad VBUS, gracias a la siguiente arquitectura:
La lógica de control del pad VBUS emite una señal con respecto al nivel de voltaje
VBUS: • La señal "Session_valid" está activa alta cuando el voltaje está encendido. la almohadilla 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 el pad VBUS es superior o igual a 4,4 V. Si es inferior a 4,4 V, la señal no está activa
• El bit de estado de VBUS se establece cuando VBUS es superior a “Vbus_ válido”. El bit de estado VBUS se borra cuando VBUS cae por debajo de “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.
Es probable que la solución que mejor se adapte a sus requisitos sea buscar cuándo dejan de ocurrir los eventos de marco USB de 1 ms. Debe haber una lógica relacionada en su código USB para manejar estos eventos, que podría haber reiniciado un temporizador de pérdida de cuadro. Si ese temporizador logra expirar, sabrá que la PC ya no está administrando activamente el USB, incluso si VBUS todavía está presente.
¿Cómo saber si la conexión USB se ha perdido o no?
Busque en el manual de su microcontrolador, debe haber información sobre cómo capturar el evento de suspensión de USB. Este evento ocurre cuando el host deja de comunicarse con el dispositivo por más de 3 ms, sin enviar ni siquiera eventos de trama. Se supone que los dispositivos USB reducen 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 se elimine, por ejemplo, por el administrador de tareas. El evento del marco USB aún se enviará cada milisegundo.
Si está utilizando 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 (lo mismo que señaló Wallace para la detección de VBUS).
La respuesta de Chris Stratton también es compatible con el marco LUFA, a través de EVENT_USB_Device_StartOfFrame() que se recibe cada 1 mS y se puede usar para detectar una conexión de nivel de protocolo válida. Simplemente restablezca un temporizador cada vez que se active el evento y verifique si el temporizador alguna vez se desborda; si es así, entonces su dispositivo está conectado físicamente, pero no se comunica.
Puede obtener más información sobre estos eventos en LUFA a través de la documentación aquí: Eventos USB de LUFA
Si está implementando su propia implementación, hay mucho que aprender del código fuente de LUFA y ejemplos para AVR.
Una forma no específica de USB sería que el controlador consultara ocasionalmente a la PC y esperara un reconocimiento. Después de N consultas sin acuse de recibo, el controlador puede suponer que se ha perdido la comunicación.
OK?
a la PC y su aplicación responde YES
. Si no obtiene una respuesta durante un tiempo, sabe que algo está mal (o la PC se apaga) y puede apagar la salida después de un tiempo.
Verendra
Wallace
Verendra
Wallace
Wallace
Verendra
Wallace
Ale..chenski