2015-06-18 3 views
4

Итак, работая во встроенной системе, у меня есть USB-накопитель, который используется для зарядки устройства, а также для чтения некоторых данных.Обнаружение, когда устройство USB было отключено с помощью usbd_core.c

Использование usbd_core.c я могу проверить статус,

  • , когда нет ничего подключен статус 4 (USBD_STATE_SUSPENDED).
  • Как только я что-то подключаю, статус меняется на 1 (USBD_STATE_DEFAULT).
  • Но когда я его отключу, статус не изменяется, он продолжает оставаться 1 (USBD_STATE_DEFAULT).

Предполагается, что это так или я чего-то не хватает?

Я также пробовал USBD_Stop() и USBD_Start(), чтобы узнать, не имеет значения, но статус не меняется, когда я его отключу.

Любые идеи?

+0

«usbd_core.c» откуда? Файл ни в коем случае не является универсальным или стандартным, и одно и то же имя файла может использоваться в более чем одной реализации. – Clifford

ответ

1

Спецификация USB определяет шесть состояний USB устройств:

  • Attached: устройство крепится к USB, но не питается от USB.

  • Приведено в действие: устройство подключено к USB и включено, но еще не получил запрос на сброс.

  • По умолчанию: устройство подключено к USB. Он питается и сбрасывается, но ему не присваивается уникальный адрес.

  • Адрес: устройство подключено к USB, оно питается и сбрасывается и имеет уникальный адрес, назначенный ему.

  • Конфигурировано: устройство уже находится в состоянии адреса и настроено. Он не находится в состоянии приостановки.

  • Подвесной: устройство подключено и сконфигурировано, но не обнаружено каких-либо действий на шине не менее 3 мс.

Как вы можете видеть приостановлены требует присоединенного и устройства сконфигурировано, однако также отметить, что все этих состояния требуют подключенного устройства и не может быть, по-видимому используются для обозначения физически удаленных устройств.

Отключение - это событие низкого уровня от контроллера USB - ваш API может обеспечить обратный вызов для таких событий.