Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Mass Storage (Bulk Only) с несколькими LUN [solved]
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
brag
Доброе время суток!
Есть USB FULL SPEED девайс на STM32F105, на нем 2 накопителя и их оба нужно видеть в Винде(2003,XP) (как 2 диска)
Вроде все сделал по спецификации (на Get Max Lun возвращаю 1), но обращения идут только к LUN 0 (CBW.LUN=0), и сам по себе диск 0 видится и отлично работает. сколько бы лунов не возвращал в Get Max Lun поведение одинаковое - винда в упор не хочет обеащатся к другим лунам, кроме 0.
Есть кардридер, правда HI SPEED, сделал так, чтобы мой девайс отвечал на SCSI команды так же как и он, и результата тоже никакого..
Есть ли у кого-то любой работающий пример Mass Storage с 2 или больше LUN-ами?
Вот лог с UsbTrace кардридера Нажмите для просмотра прикрепленного файла
A вот мой Нажмите для просмотра прикрепленного файла
(Открывать в firefox, explorer загибается)
В ридере после Inquiry идет 3 запроса ReadFormatCapacities, затем пошел Inquiry для LUN=1
А на мой девайс после таких же 3х запросов ReadFormatCapacities (с такаими же ответами) идут куча других запросов но все для LUN=0 и ни одного для других лунов...
Сомневаюсь, что дело в FullSpeed/HiSpeed или в VID/PID..
Драйвера тоже пробовал сносил, тоже не помогло
W интернете тоже ничего не нахожу подобного. с одним диском куча примеров, а с 2+ не могу найти...

Уже и все дескрипторы скопировал (кроме Endpoint, там размер 512 байт у меня 64)
и всеравно эффекта нету

А в FreeBSD нормально увиделось 2 диска... Скорее всего винда не умеет видеть несколько LUN-ов у Full Speed устройствах...
galjoen
Цитата(brag @ Mar 23 2011, 16:56) *
Скорее всего винда не умеет видеть несколько LUN-ов у Full Speed устройствах...

Я, ради интереса, попробовал на своём самодельном Full Speed MassStorage - всё отлично виделось и работало.
А данных то передаваемых в Inquiru в логе почему нет?
brag
А можете кусочек кода дать посмотреть?
На моем девайсе в Linux/BSD все отлично работает, а на винде отлично работает только первый диск, второго вообще не видно и никаких обращений к нему...

вот мой код. там заглушка - везде при обращении к диску возвращается MEDIUM NOT PRESENT
Нажмите для просмотра прикрепленного файла
ну и сам драйвер usb для stm32
Нажмите для просмотра прикрепленного файла

если мне не поможет, то мож кому пригодится в качестве hello-word ,тк OTG в stm32 слабо документировано и примеров в интернете нету, есть только их большая глючная либа sm.gif
galjoen
С кодом разбираться сейчас некогда, да и вообще я давно уже этими делами не занимаюсь - заново влезать нужно, а ох как не хочется (лень).
НО сейчас попробовал в своём старинном проекте LUN=1 поставить и перетранслировать (благо и тот старинный девайс и проект под рукой) - записал программу в процессор, и всё сразу заработало, появилось 2 одинаковых диска. И то, что у них одинаковые имена диска и номера - никак винду не смутило (правда у меня диски защищены от записи с компа).
Винда - самая простяцкая XP.
Попробовал запускать exe-шники с обоих этих дисков одновременно (физически это один файл) - всё запускается, никакой ошибки совместного доступа нет (с одного 2 раза не запустишь - специально так сделано).
В общем, вывод, что это косяк вашего ПО.
brag
странно.. Если в никсах видится 2 а в винде 1 значит либо где-то косяк в ответе на Get Max Lun(в DPIDах разве что) либо сам уже не знаю что...
Спасибо за то,что попробовали, хоть буду знать,что все таки должно работать...
Посмотрел на другие девайсы логгером, там ответы на SCSI команды другие, но все работает так же. Значит косяк где-то до начала SCSI...
brag
Пересмотрел все от начала до Get Max Lun ничего не нагожу, что бы винде не нравилось. даже ответил на Get Descriptor DEVICE QUALIFIER (по спецификации надо Stall возвращать для Full Speed устройств) и всеравно ничего

Еще у меня используется 1 двонаправленный Endpoint, а в этих девайсах In и Out под разными номерами. Nо и не в этом дело.

А дело в том, что у меня серийный номер(тот,который в iSerialNumber в Device Descriptor) состоял не из 12 символовsm.gif получается, если серийник форматный - винда видит все LUNы, иначе только первый sm.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.