Седой 0 10 ноября, 2009 Опубликовано 10 ноября, 2009 · Жалоба "Заблокировать" появление диска в системе до определенного момента(события на втором интерфейсе). Сейчас всегда возвращаю ошибку из "железа" на SCSI-комманды чтения и записи от хоста, диск в системе присутствует, но операции чтения\записи для него не проходят. Возможно есть более элегантное решение? Делайте реэнумерацию. Когда нужен mass storage - устройство должно содержать его интерфейс, когда не нужен - интерфейса нет. Но будут тонкости - система должна видеть это как два разных устройства. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
korbian 0 10 ноября, 2009 Опубликовано 10 ноября, 2009 · Жалоба Делайте реэнумерацию. Когда нужен mass storage - устройство должно содержать его интерфейс, когда не нужен - интерфейса нет. Но будут тонкости - система должна видеть это как два разных устройства. Как я понял, вы предлагаете модифицировать дескриптор устройства на лету? НО второй\специализированный интерфейс должен быть доступен ВСЕГДА, а первый (mass storage) должен "отлочить" диск только по сигналу на втором. на этот интерфейс предполагается посадить стандартный драйвер Windows usbstor.sys. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Седой 0 10 ноября, 2009 Опубликовано 10 ноября, 2009 · Жалоба Как я понял, вы предлагаете модифицировать дескриптор устройства на лету? НО второй\специализированный интерфейс должен быть доступен ВСЕГДА, а первый (mass storage) должен "отлочить" диск только по сигналу на втором. на этот интерфейс предполагается посадить стандартный драйвер Windows usbstor.sys. "Отлочить" и "прилочить" должен второй (управляющий) интерфейс, который должен быть доступен ВСЕГДА. Посмотрите спецификацию DFU 1.1 - как раз так и сделано. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
korbian 0 10 ноября, 2009 Опубликовано 10 ноября, 2009 · Жалоба "Отлочить" и "прилочить" должен второй (управляющий) интерфейс, который должен быть доступен ВСЕГДА. Посмотрите спецификацию DFU 1.1 - как раз так и сделано. спасибо, посмотрю! спасибо, посмотрю! глянул одним глазом! :) сразу возник вопрос, если придется перепрошивать устройство много раз за один сеанс работы (одно подключение к компьютеру) не исчерпаю ли я резерв по перепрошивки внутренней флеш микроконтроллера? то есть в каких пределах обычно находится этот параметр(количество перезаписей внутренней флеш)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
galjoen 0 10 ноября, 2009 Опубликовано 10 ноября, 2009 · Жалоба korbian, а если ваше устройство как хаб описать? И уже к нему, с точки зрения ОС, подключается/отключается всё, что угодно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
korbian 0 10 ноября, 2009 Опубликовано 10 ноября, 2009 · Жалоба korbian, а если ваше устройство как хаб описать? И уже к нему, с точки зрения ОС, подключается/отключается всё, что угодно. спасибо за идею, можно попробовать! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Седой 0 12 ноября, 2009 Опубликовано 12 ноября, 2009 · Жалоба korbian, а если ваше устройство как хаб описать? И уже к нему, с точки зрения ОС, подключается/отключается всё, что угодно. В принципе возможно, только одно но ... обычный USB блок в известных мне микроконтроллерах не позволит вам это сделать - "подключать/отключать всё что угодно" глянул одним глазом! :) сразу возник вопрос, если придется перепрошивать устройство много раз за один сеанс работы ... А это ещё зачем? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
galjoen 0 12 ноября, 2009 Опубликовано 12 ноября, 2009 · Жалоба В принципе возможно, только одно но ... обычный USB блок в известных мне микроконтроллерах не позволит вам это сделать - "подключать/отключать всё что угодно" Да, про то, что адреса (старшие 7 бит) у хаба, и подключенных к нему девайсов, будут разные. Я об этом как-то и не подумал... А так хаб дополнительно всего одну Interrupt In EP займёт, ну и контрольный канал, конечно. Жаль, что это невозможно. Т.о. можно много проблем решить было бы. Да и вообще, у современных микроконтроллеров даже и младшие то 4 бита адреса у EP изменить невозможно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
korbian 0 13 ноября, 2009 Опубликовано 13 ноября, 2009 · Жалоба А это ещё зачем? ну как зачем. в исходном состоянии одна прошивка, после определенного события заливается другая или я что то неправильно понял? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Седой 0 13 ноября, 2009 Опубликовано 13 ноября, 2009 · Жалоба ну как зачем. в исходном состоянии одна прошивка, после определенного события заливается другая или я что то неправильно понял? Совершенно не нужно перепрограммировать контроллер для того, чтобы провести реэнумерацию с другим набором дескрипторов и логикой обработки USB пакетов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
korbian 0 13 ноября, 2009 Опубликовано 13 ноября, 2009 · Жалоба провести реэнумерацию с другим набором дескрипторов и логикой обработки USB пакетов. а где почитать про это? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DiMonstr 0 18 ноября, 2009 Опубликовано 18 ноября, 2009 · Жалоба А поддерживается составное USB устройство, к примеру, с интерфейсом Mass Storage Device (MSD) и Communications Device Class (CDC) на уровне BIOSа??? Сможет ли BIOS распознать подобный девайс, поставить драйвер для MSD и выполнить программу с загрузочного сектора флэш памяти, которая подключена к контроллеру USB? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
galjoen 0 18 ноября, 2009 Опубликовано 18 ноября, 2009 · Жалоба MassStorage, в т.ч. и в составном устройстве, биос поддерживает. И загрузится с него можно. Только интерфейс MassStorage должен первым идти. Что-то у меня иначе в винде не работало. CDC не делал. Попробовал и пришёл к выводу, что винда только если в дескрипторе DEVICE его класс прописать понимает, а в INTERFACE - нет. Т.е. составное устройство сделать невозможно. А м.б. это у меня руки кривые... А про драйвера и биос скажу, что это две вещи несовместные. В биосе нужно через прерывания работать. Он только MassStorage, клавиатуру и мышку понимает. Причём у двух последних для этого специальный биосовский протокол должен поддерживаться. Но из своей программы, с загрузочного MassStorage в биосе запущенной, со своим же CDC, конечно, работать можно. Через прерывания биос. Там ограничений куда как меньше, чем в случае работы из под ОС будет... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DiMonstr 0 19 ноября, 2009 Опубликовано 19 ноября, 2009 · Жалоба В биосе нужно через прерывания работать. Он только MassStorage, клавиатуру и мышку понимает. Как показывает практика, BIOS поддерживает и USB хабы. Вчера пробовал подключать загрузочную флэшку с DOS'ом через хаб. На первой машине это привело к зависанию на этапе POST, а на второй прокатило. BIOS увидел флэшку и загрузился с неё Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DiMonstr 0 20 ноября, 2009 Опубликовано 20 ноября, 2009 (изменено) · Жалоба ...Попробовал и пришёл к выводу, что винда только если в дескрипторе DEVICE его класс прописать понимает, а в INTERFACE - нет. Т.е. составное устройство сделать невозможно. А м.б. это у меня руки кривые... Хочу опровергнуть заявление galjoen о невозможности создания составного устройста Сегодня попробовал сделать составное USB устройство: Mass Storage Device и CDC Ethernet Emulation Model. Прилагаю описание дескрипторов во вложении. А также картинку диспетчера устройств во вложении. Composite_USB_device.html Изменено 20 ноября, 2009 пользователем DiMonstr Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться