Обнаружение активности USB-устройства на хосте

usb

Я тестирую устройство WinCE, которое время от времени теряет все USB-соединения. Мне нужно определить, когда USB-соединение на этом устройстве выходит из строя. Когда оно выходит из строя, питание на порту остается, но на D+ и D- нет никаких данных (я проверил это с помощью осциллографа). Это хост-устройство для меня по сути черный ящик, поэтому я не могу ничего с ним сделать, кроме как проверить его состояние.

Мое предлагаемое решение: использовать Arduino какого-либо типа (предпочтительно UNO, поскольку у меня уже есть один), запрограммированный на обнаружение активности USB, чтобы сообщать мне о сбоях USB на хост-устройстве, которое я тестирую.

Возможно ли это? Arduino кажется мне хорошим решением, поскольку я предполагаю, что это USB-клиент, который мне нужен в этом сценарии. Любой пример или указание правильного направления были бы очень полезны. Спасибо!

, 👍0

Обсуждение

Если вы решите использовать Uno, вам, вероятно, придется перепрограммировать ATMega16u2 на плате, который делает usb-to-serial. Я думаю, было бы проще иметь arduino, в котором основной чип поддерживает USB, как Leonardo или Micro. Но я сам ничего не делал с USB., @Gerben

Если вы измените прошивку микросхемы интерфейса USB, реализуете программный USB или используете плату с собственным USB-интерфейсом, например Arduino Leonardo, будет довольно просто запустить таймер тайм-аута для трафика USB и таким образом посмотреть, прекратится ли обычный периодический опрос этого ведомого устройства., @Chris Stratton

Удалось ли вам разобраться? Если да, то можете поделиться кодом?, @NAMAE


1 ответ


Лучший ответ:

0

Если вас интересуют только напряжения на линиях D+ и D-, вы можете подключить их напрямую к двум входам АЦП на Arduino и подключить +5 В и GND к контактам +5 В и GND. Затем Arduino может замерять напряжения и сравнивать их с допустимыми или недопустимыми диапазонами.

,

Это отличная идея. Я так рад, что спросил; не могу поверить, что это даже не пришло мне в голову., @Fuffer

Нет, это действительно не будет работать хорошо. Сигнализация USB находится за пределами полосы пропускания АЦП Arduino. Вам нужно искать переходы, а не уровни., @Chris Stratton