Attiny85 не распознается при запуске Windows

Я использую Attiny85 для взаимодействия с компьютером через USB-подключение, и все работает нормально, за исключением случаев, когда я перезагружаю компьютер и Attiny85 подключен. Когда Windows завершает загрузку, Attiny85 не распознается, и в диспетчере устройств он отображается следующим образом:

Неизвестное USB-устройство (ошибка запроса дескриптора устройства)

Если я отключу Attiny85, а затем снова включу его, все будет работать нормально.

Есть ли что-нибудь, чтобы сделать его обнаруживаемым во время загрузки без необходимости постоянно отключать/подключать его?

ИЗМЕНИТЬ:

Подробнее:

Я использую эту плату ATtiny85 USB Mini Dev Board

и libusb-win32 в качестве драйвера USB

, 👍0

Обсуждение

ATTiny на самом деле не работает с USB. Заставить его взаимодействовать с USB-портом, используя что-то вроде V-USB, в лучшем случае хак. Вы не должны ожидать, что он будет работать должным образом во всех отношениях., @Tom Carpenter

Вы можете использовать осциллограф и/или анализатор USB-протокола, чтобы выяснить, что именно V-USB делает неправильно, но в любом случае такая хакерская программная эмуляция не может быть исправлена. Лучше использовать микроконтроллер, который действительно поддерживает USB (например, Teensy)., @CL.

Добавлено больше деталей (плата и USB-драйвер), чтобы помочь в анализе проблемы., @Gonçalo Cardoso


1 ответ


1

У меня недостаточно репутации, чтобы оставить комментарий, поэтому я добавлю сюда свои 2 цента.

Должен быть более элегантный способ сделать это, но в качестве быстрого решения я бы рекомендовал две вещи:

  1. Если это возможно, добавьте на плату кнопку для ручного сброса MCU при загрузке ПК.

  2. Вы можете выполнить программный сброс после включения платы через определенное время (например, 10 секунд) с помощью сторожевого таймера.

,

Я не могу использовать идею с кнопкой, потому что плата будет внутри корпуса, и это будет непрактично. Идея со сторожевым таймером не работает, потому что плата всегда подключена, поэтому, когда компьютер выключен, я бы выполнял процедуру сброса каждые 10 секунд, и я не знаю, «понравится ли это»., @Gonçalo Cardoso

@GonçaloCardoso Что касается сторожевого таймера, вы можете использовать сторожевой таймер только один раз. Вы можете обрабатывать это в своем коде., @Macit

Но в какое время это будет?, @Gonçalo Cardoso

@GonçaloCardoso Время полностью зависит от вашего приложения. Чтобы выполнить программный сброс один раз, посмотрите эту [ссылку](http://www.atmel.com/webdoc/avrlibcreferencemanual/FAQ_1faq_softreset.html)., @Macit

Проблема в том, что мне нужно сделать перезагрузку при загрузке Windows, и мне не удалось найти способ, чтобы плата это обнаружила., @Gonçalo Cardoso

@GonçaloCardoso Когда компьютер выключен, на USB-порту не должно быть питания. После включения ПК ваша плата будет поставляться, и здесь вы запускаете таймер для сброса MCU. Время не должно быть слишком большим, потому что, если вы подключите плату во время работы ПК, плата начнет работать после того, как вы уже установили время. Как я сказал вам в своем ответе, это не идеальное решение, и я не знаю, сможете ли вы разместить кнопку на корпусе платы. В противном случае вам придется копаться в коде V-USB и надеяться, что вы найдете способ выполнить свою работу., @Macit

@GonçaloCardoso Кстати, у меня есть идея, которая должна сработать для вас. Попробуйте отключить параметры энергосбережения для USB-устройств, а затем перезагрузитесь и посмотрите, работает это или нет. Посмотрите на эту [ссылку](http://helpdeskgeek.com/windows-xp-tips/prevent-windows-from-powering-off-usb-device/)., @Macit