Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: несколько logical unit в Mass Storage
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
zuy
Есть девайс с усб хостом, который работает с флешками.
Все было ОК пока не начали появляться флешки с технологией U3. Они на компе показываются двумя устройствами CD и флешкой.
Часть таких флешек работает в девайсе, а часть нет.

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

Для проверки, я сделал возврат запроса INQUIRY для юнита 0 и 1. меняя поле bCBWLUN в CBW.
И получаю что ответ на INQUIRY для обоих номеров юнита абсолютно одинаковый.
Для рабочих флешек PERIPHERAL DEVICE TYPE = 0 в обоих юнитах,
для не рабочих там 5 тоде для обоих.

Подскажите как мне правильно для такого вида флешек правильно выделить именно флешевый девайс и работать с ним?
Deka
А есть вариант сделать выбор простым перебором? Есть что-то, что отличает один юнит от другого? Например файловая система или наличие файла... Т.е. открыли юнит и проверили его. Если не он - открыли следующий.
zuy
Цитата(Deka @ Jun 11 2009, 22:43) *
А есть вариант сделать выбор простым перебором? Есть что-то, что отличает один юнит от другого? Например файловая система или наличие файла... Т.е. открыли юнит и проверили его. Если не он - открыли следующий.


Дело в том, что от типа юнита зависит поддерживаемый набор команд. До файловой системы я не могу добраться.
Следующим запросом идет Read Capacity(из набора SCSI т.к. предпологается что присутствует флешка) и не работающие флешки на нем отказываются работать.
Я пробовал жестко указать в CBW номер юнита 1 вместо 0.
Ситуация не поменялась вообще никак, флешки которые работали так и остались рабочими, а те которые не работали так и не работают.
Может я неправильно юниты переключаю?
galjoen
Цитата(zuy @ Jun 11 2009, 22:49) *
И получаю что ответ на INQUIRY для обоих номеров юнита абсолютно одинаковый.
Для рабочих флешек PERIPHERAL DEVICE TYPE = 0 в обоих юнитах,
для не рабочих там 5 тоде для обоих.

Что-то мне такие флешки не попадались.
Сделал самодельный MassStorage (несколько лет назад). Пробовал делать и в виде нескольких юнитов (один токо для чтения). При изменении поля PERIPHERAL DEVICE TYPE в INQUIRY (для экспериментов) на не 0 комп лез в инет за обновлением... Видимо сейчас ситуация поменялась.

А вы не пробовали смотреть снуппером как комп с такими флешками работает? Что там у него вместо Read Capacity? Выложите лог если можно.
zuy
Цитата(galjoen @ Jun 13 2009, 07:35) *
Что-то мне такие флешки не попадались.
Сделал самодельный MassStorage (несколько лет назад). Пробовал делать и в виде нескольких юнитов (один токо для чтения). При изменении поля PERIPHERAL DEVICE TYPE в INQUIRY (для экспериментов) на не 0 комп лез в инет за обновлением... Видимо сейчас ситуация поменялась.

А вы не пробовали смотреть снуппером как комп с такими флешками работает? Что там у него вместо Read Capacity? Выложите лог если можно.


Проблема решилась. пересмотрел логи.
Оказалось, просто некоторые флешки тормознутые и надо в цикле довольно долго делать TEST_UNIT_READY/GET SENSE пока не сработает ( на одной 440 итераций проходит до готовности)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.