Я работаю с контроллером AT90USB1287 с USB-связью с ПК. Я отправляю некоторые команды с ПК на контроллер, используя связь USB, чтобы активировать какой-то управляемый переключатель. Я могу изменить состояние переключателя, отправив команды (ВКЛ и ВЫКЛ, переключатель, управляемый напряжением).
Моя проблема заключается в том, что когда переключатель включен, и, к сожалению, пользователь забыл отправить команду OFF с ПК, и он выключил компьютер, но контроллер все еще работает, или предположим, что если я потерял соединение с ПК через USB, в это время это вызывает проблемы.
Я хочу проверить сам код контроллера ATUSB1287, если соединение USB ослабло, тогда команда swith t должна быть равна нулю.
Может ли кто-нибудь помочь мне, как узнать, что USB-соединение потеряно или нет? это мой подход, например, можно ли в основном цикле проверить, что USB-соединение потеряно? если потеряно, то выключите.
Есть ли другой способ выключить? после потери связи с ПК или выключения ПК.
Я новичок в этом типе вещей, если что-то не так в этом вопросе, пожалуйста, извините меня.
На странице 258 таблицы данных :
• 0 – VBUS: Флаг VBus
. Значение, считанное из этого бита, указывает состояние вывода VBUS. Этот бит можно использовать в режиме устройства для контроля состояния подключения приложения к шине USB. См. Раздел 22.10, стр. 255 для более подробной информации.
На странице 255:
22.10 Обнаружение
подключаемого модуля USB-соединение обнаруживается панелью VBUS благодаря следующей архитектуре:
Логика управления панели VBUS выдает сигнал относительно уровня напряжения VBUS:
• Сигнал «Session_valid» активен при высоком уровне напряжения, когда напряжение включено . контактная площадка VBUS выше или равна 1,4 В. Если ниже 1,4 В, сигнал не активен
. • Сигнал «Vbus_valid» активен при высоком уровне, когда напряжение на контактной площадке VBUS выше или равно 4,4 В. Если напряжение ниже 4,4 В, сигнал не активен
. • Бит состояния VBUS устанавливается, когда VBUS больше, чем «Vbus_ valid». Бит состояния VBUS сбрасывается, когда значение VBUS падает ниже «Session_valid» (поведение с гистерезисом)
• Флаг VBUSTI устанавливается каждый раз при изменении состояния бита VBUS.
Не уверен, что это то, что вы ищете, но решил, что все равно опубликую это.
Вполне вероятно, что решение, которое лучше всего будет соответствовать вашим требованиям, будет заключаться в том, чтобы искать, когда перестают происходить события кадра USB в 1 мс. В вашем коде USB должна быть соответствующая логика для обработки этих событий, которые вы могли бы сбросить таймером потери кадра. Если этот таймер истечет, вы знаете, что ПК больше не управляет активно USB, даже если VBUS все еще присутствует.
как узнать потеряно usb соединение или нет?
Посмотрите в мануале вашего микроконтроллера, там должна быть информация как отловить событие USB Suspend. Это событие происходит, когда хост вообще перестает связываться с устройством более чем на 3 мс — не отправляя даже кадровых событий. Предполагается, что USB-устройства в этом состоянии снижают свой USB-ток.
Обратите внимание, что это не поможет, если драйвер или управляющая программа будут просто уничтожены, например, диспетчером задач. Событие кадра USB по-прежнему будет отправляться каждую миллисекунду.
Если вы используете инфраструктуру LUFA для управления USB-связью, вы можете использовать событие EVENT_USB_Device_Disconnect() для обнаружения физического отключения кабеля (так же, как указал Уоллес при обнаружении VBUS).
Ответ Криса Стрэттона также поддерживается в среде LUFA через EVENT_USB_Device_StartOfFrame(), который принимается каждые 1 мс и может использоваться для обнаружения действительного соединения на уровне протокола. Просто сбрасывайте таймер каждый раз, когда срабатывает событие, и проверяйте, не переполняется ли таймер когда-либо — если да, то ваше устройство физически подключено, но не обменивается данными.
Вы можете узнать больше об этих событиях в LUFA из документации здесь: LUFA USB Events
Если вы запускаете собственную реализацию, из исходного кода LUFA и примеров для AVR можно многому научиться.
Не относящийся к USB способ заключается в том, чтобы контроллер время от времени опрашивал ПК и ожидал подтверждения. После N запросов без подтверждения контроллер может предположить, что связь потеряна.
OK?
ее на ПК, и ваше приложение отвечает YES
. Если вы какое-то время не получаете ответа, вы знаете, что что-то не так (или компьютер выключен), и вы можете отключить вывод через некоторое время.
Верендра
Уоллес
Верендра
Уоллес
Уоллес
Верендра
Уоллес
Але..ченски