Перейти к содержанию
    

Два фнукциональных устройства в одном физическом

"Заблокировать" появление диска в системе до определенного момента(события на втором интерфейсе). Сейчас всегда возвращаю ошибку из "железа" на SCSI-комманды чтения и записи от хоста, диск в системе присутствует, но операции чтения\записи для него не проходят. Возможно есть более элегантное решение?

Делайте реэнумерацию. Когда нужен mass storage - устройство должно содержать его интерфейс, когда не нужен - интерфейса нет.

Но будут тонкости - система должна видеть это как два разных устройства.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Делайте реэнумерацию. Когда нужен mass storage - устройство должно содержать его интерфейс, когда не нужен - интерфейса нет.

Но будут тонкости - система должна видеть это как два разных устройства.

Как я понял, вы предлагаете модифицировать дескриптор устройства на лету? НО второй\специализированный интерфейс должен быть доступен ВСЕГДА, а первый (mass storage) должен "отлочить" диск только по сигналу на втором. на этот интерфейс предполагается посадить стандартный драйвер Windows usbstor.sys.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как я понял, вы предлагаете модифицировать дескриптор устройства на лету? НО второй\специализированный интерфейс должен быть доступен ВСЕГДА, а первый (mass storage) должен "отлочить" диск только по сигналу на втором. на этот интерфейс предполагается посадить стандартный драйвер Windows usbstor.sys.

 

"Отлочить" и "прилочить" должен второй (управляющий) интерфейс, который должен быть доступен ВСЕГДА.

Посмотрите спецификацию DFU 1.1 - как раз так и сделано.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

"Отлочить" и "прилочить" должен второй (управляющий) интерфейс, который должен быть доступен ВСЕГДА.

Посмотрите спецификацию DFU 1.1 - как раз так и сделано.

спасибо, посмотрю!

 

спасибо, посмотрю!

глянул одним глазом! :) сразу возник вопрос, если придется перепрошивать устройство много раз за один сеанс работы (одно подключение к компьютеру) не исчерпаю ли я резерв по перепрошивки внутренней флеш микроконтроллера? то есть в каких пределах обычно находится этот параметр(количество перезаписей внутренней флеш)?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

korbian, а если ваше устройство как хаб описать? И уже к нему, с точки зрения ОС, подключается/отключается всё, что угодно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

korbian, а если ваше устройство как хаб описать? И уже к нему, с точки зрения ОС, подключается/отключается всё, что угодно.

спасибо за идею, можно попробовать!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

korbian, а если ваше устройство как хаб описать? И уже к нему, с точки зрения ОС, подключается/отключается всё, что угодно.

 

В принципе возможно, только одно но ... обычный USB блок в известных мне микроконтроллерах не позволит вам это сделать - "подключать/отключать всё что угодно"

 

 

глянул одним глазом! :) сразу возник вопрос, если придется перепрошивать устройство много раз за один сеанс работы ...

А это ещё зачем?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В принципе возможно, только одно но ... обычный USB блок в известных мне микроконтроллерах не позволит вам это сделать - "подключать/отключать всё что угодно"

Да, про то, что адреса (старшие 7 бит) у хаба, и подключенных к нему девайсов, будут разные. Я об этом как-то и не подумал... А так хаб дополнительно всего одну Interrupt In EP займёт, ну и контрольный канал, конечно.

Жаль, что это невозможно. Т.о. можно много проблем решить было бы.

Да и вообще, у современных микроконтроллеров даже и младшие то 4 бита адреса у EP изменить невозможно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А это ещё зачем?

ну как зачем. в исходном состоянии одна прошивка, после определенного события заливается другая или я что то неправильно понял?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну как зачем. в исходном состоянии одна прошивка, после определенного события заливается другая или я что то неправильно понял?

Совершенно не нужно перепрограммировать контроллер для того, чтобы провести реэнумерацию с другим набором дескрипторов и логикой обработки USB пакетов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

провести реэнумерацию с другим набором дескрипторов и логикой обработки USB пакетов.

а где почитать про это?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А поддерживается составное USB устройство, к примеру, с интерфейсом Mass Storage Device (MSD) и Communications Device Class (CDC) на уровне BIOSа??? Сможет ли BIOS распознать подобный девайс, поставить драйвер для MSD и выполнить программу с загрузочного сектора флэш памяти, которая подключена к контроллеру USB?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

MassStorage, в т.ч. и в составном устройстве, биос поддерживает. И загрузится с него можно. Только интерфейс MassStorage должен первым идти. Что-то у меня иначе в винде не работало.

CDC не делал. Попробовал и пришёл к выводу, что винда только если в дескрипторе DEVICE его класс прописать понимает, а в INTERFACE - нет. Т.е. составное устройство сделать невозможно. А м.б. это у меня руки кривые...

А про драйвера и биос скажу, что это две вещи несовместные. В биосе нужно через прерывания работать. Он только MassStorage, клавиатуру и мышку понимает. Причём у двух последних для этого специальный биосовский протокол должен поддерживаться. Но из своей программы, с загрузочного MassStorage в биосе запущенной, со своим же CDC, конечно, работать можно. Через прерывания биос. Там ограничений куда как меньше, чем в случае работы из под ОС будет...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В биосе нужно через прерывания работать. Он только MassStorage, клавиатуру и мышку понимает.

Как показывает практика, BIOS поддерживает и USB хабы. Вчера пробовал подключать загрузочную флэшку с DOS'ом через хаб. На первой машине это привело к зависанию на этапе POST, а на второй прокатило. BIOS увидел флэшку и загрузился с неё :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...Попробовал и пришёл к выводу, что винда только если в дескрипторе DEVICE его класс прописать понимает, а в INTERFACE - нет. Т.е. составное устройство сделать невозможно. А м.б. это у меня руки кривые...

Хочу опровергнуть заявление galjoen о невозможности создания составного устройста :biggrin:

Сегодня попробовал сделать составное USB устройство: Mass Storage Device и CDC Ethernet Emulation Model.

 

Прилагаю описание дескрипторов во вложении.

 

А также картинку диспетчера устройств во вложении.

post-21706-1258726597_thumb.jpg

Composite_USB_device.html

Изменено пользователем DiMonstr

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...