Проц LPC23хх, на нем работает хост и читает с флешки данные. В процессе работы в любой момент устройство может заснуть и соответственно отрубает питание от флешки. Обнаружилась такая проблема, что не всегда после этого флешки запускаются. Иногда по выходу из слипа, флешка не отвечает на запрос первого дескриптора, иногда проходит енумерацию, но перестает отвечать на запросы класса Mass storage.
Эксперименты показали, что если после зависания флешки опять войти в слип и выйти быстро в течении секунды, флешка так и висит, но если просидеть в слипе секунд 15, то потом она нормально запускается и работает. Похоже на то, что питание с шины USB когда вхожу в слип медленно падает и флешка не может полностью вернуться в начальное состояние.
Начало работы у меня сделано так. Обнаруживается устройство на шине, пауза 100мс, дается команда порту на ресет( устанавливается бит PRS в регистре HcRhPortStatus), пауза 100мс, запрос дескриптора. И если флешка заглючила, то на этот запрос уже ответа нет.
Проблема наблюдается не часто, сильно зависит от конкретной флешки. Чаще всего на самых дешевых noname китайских флешках.
Может я не правильно начинаю работу после обнаружения флешки, как ее заставить сброситься? Или нужно когда ухожу в слип, перед отключением питания с шины что-то еще сделать, чтобы хост дал команду флешке выключиться?
|