|
|
  |
Два фнукциональных устройства в одном физическом |
|
|
|
Nov 10 2009, 07:53
|
Местный
  
Группа: Свой
Сообщений: 244
Регистрация: 21-02-05
Из: Урал
Пользователь №: 2 806

|
Цитата(korbian @ Nov 10 2009, 11:37)  "Заблокировать" появление диска в системе до определенного момента(события на втором интерфейсе). Сейчас всегда возвращаю ошибку из "железа" на SCSI-комманды чтения и записи от хоста, диск в системе присутствует, но операции чтения\записи для него не проходят. Возможно есть более элегантное решение? Делайте реэнумерацию. Когда нужен mass storage - устройство должно содержать его интерфейс, когда не нужен - интерфейса нет. Но будут тонкости - система должна видеть это как два разных устройства.
|
|
|
|
|
Nov 10 2009, 08:16
|

Группа: Участник
Сообщений: 13
Регистрация: 13-03-09
Пользователь №: 46 063

|
Цитата(Седой @ Nov 10 2009, 10:53)  Делайте реэнумерацию. Когда нужен mass storage - устройство должно содержать его интерфейс, когда не нужен - интерфейса нет. Но будут тонкости - система должна видеть это как два разных устройства. Как я понял, вы предлагаете модифицировать дескриптор устройства на лету? НО второй\специализированный интерфейс должен быть доступен ВСЕГДА, а первый (mass storage) должен "отлочить" диск только по сигналу на втором. на этот интерфейс предполагается посадить стандартный драйвер Windows usbstor.sys.
--------------------
© korbian
|
|
|
|
|
Nov 10 2009, 10:51
|
Местный
  
Группа: Свой
Сообщений: 244
Регистрация: 21-02-05
Из: Урал
Пользователь №: 2 806

|
Цитата(korbian @ Nov 10 2009, 13:16)  Как я понял, вы предлагаете модифицировать дескриптор устройства на лету? НО второй\специализированный интерфейс должен быть доступен ВСЕГДА, а первый (mass storage) должен "отлочить" диск только по сигналу на втором. на этот интерфейс предполагается посадить стандартный драйвер Windows usbstor.sys. "Отлочить" и "прилочить" должен второй (управляющий) интерфейс, который должен быть доступен ВСЕГДА. Посмотрите спецификацию DFU 1.1 - как раз так и сделано.
|
|
|
|
|
Nov 10 2009, 11:15
|

Группа: Участник
Сообщений: 13
Регистрация: 13-03-09
Пользователь №: 46 063

|
Цитата(Седой @ Nov 10 2009, 13:51)  "Отлочить" и "прилочить" должен второй (управляющий) интерфейс, который должен быть доступен ВСЕГДА. Посмотрите спецификацию DFU 1.1 - как раз так и сделано. спасибо, посмотрю! Цитата(korbian @ Nov 10 2009, 14:05)  спасибо, посмотрю! глянул одним глазом!  сразу возник вопрос, если придется перепрошивать устройство много раз за один сеанс работы (одно подключение к компьютеру) не исчерпаю ли я резерв по перепрошивки внутренней флеш микроконтроллера? то есть в каких пределах обычно находится этот параметр(количество перезаписей внутренней флеш)?
--------------------
© korbian
|
|
|
|
|
Nov 10 2009, 12:28
|

Группа: Участник
Сообщений: 13
Регистрация: 13-03-09
Пользователь №: 46 063

|
Цитата(galjoen @ Nov 10 2009, 14:58)  korbian, а если ваше устройство как хаб описать? И уже к нему, с точки зрения ОС, подключается/отключается всё, что угодно. спасибо за идею, можно попробовать!
--------------------
© korbian
|
|
|
|
|
Nov 12 2009, 13:07
|
Местный
  
Группа: Свой
Сообщений: 244
Регистрация: 21-02-05
Из: Урал
Пользователь №: 2 806

|
Цитата(galjoen @ Nov 10 2009, 16:58)  korbian, а если ваше устройство как хаб описать? И уже к нему, с точки зрения ОС, подключается/отключается всё, что угодно. В принципе возможно, только одно но ... обычный USB блок в известных мне микроконтроллерах не позволит вам это сделать - "подключать/отключать всё что угодно" Цитата(korbian @ Nov 10 2009, 16:15)  глянул одним глазом!  сразу возник вопрос, если придется перепрошивать устройство много раз за один сеанс работы ... А это ещё зачем?
|
|
|
|
|
Nov 12 2009, 13:31
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(Седой @ Nov 12 2009, 16:07)  В принципе возможно, только одно но ... обычный USB блок в известных мне микроконтроллерах не позволит вам это сделать - "подключать/отключать всё что угодно" Да, про то, что адреса (старшие 7 бит) у хаба, и подключенных к нему девайсов, будут разные. Я об этом как-то и не подумал... А так хаб дополнительно всего одну Interrupt In EP займёт, ну и контрольный канал, конечно. Жаль, что это невозможно. Т.о. можно много проблем решить было бы. Да и вообще, у современных микроконтроллеров даже и младшие то 4 бита адреса у EP изменить невозможно.
|
|
|
|
|
Nov 13 2009, 09:32
|

Группа: Участник
Сообщений: 13
Регистрация: 13-03-09
Пользователь №: 46 063

|
Цитата(Седой @ Nov 12 2009, 16:07)  А это ещё зачем? ну как зачем. в исходном состоянии одна прошивка, после определенного события заливается другая или я что то неправильно понял?
--------------------
© korbian
|
|
|
|
|
Nov 13 2009, 12:44
|
Местный
  
Группа: Свой
Сообщений: 244
Регистрация: 21-02-05
Из: Урал
Пользователь №: 2 806

|
Цитата(korbian @ Nov 13 2009, 14:32)  ну как зачем. в исходном состоянии одна прошивка, после определенного события заливается другая или я что то неправильно понял? Совершенно не нужно перепрограммировать контроллер для того, чтобы провести реэнумерацию с другим набором дескрипторов и логикой обработки USB пакетов.
|
|
|
|
|
Nov 13 2009, 12:53
|

Группа: Участник
Сообщений: 13
Регистрация: 13-03-09
Пользователь №: 46 063

|
Цитата(Седой @ Nov 13 2009, 15:44)  провести реэнумерацию с другим набором дескрипторов и логикой обработки USB пакетов. а где почитать про это?
--------------------
© korbian
|
|
|
|
|
Nov 18 2009, 18:39
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
MassStorage, в т.ч. и в составном устройстве, биос поддерживает. И загрузится с него можно. Только интерфейс MassStorage должен первым идти. Что-то у меня иначе в винде не работало. CDC не делал. Попробовал и пришёл к выводу, что винда только если в дескрипторе DEVICE его класс прописать понимает, а в INTERFACE - нет. Т.е. составное устройство сделать невозможно. А м.б. это у меня руки кривые... А про драйвера и биос скажу, что это две вещи несовместные. В биосе нужно через прерывания работать. Он только MassStorage, клавиатуру и мышку понимает. Причём у двух последних для этого специальный биосовский протокол должен поддерживаться. Но из своей программы, с загрузочного MassStorage в биосе запущенной, со своим же CDC, конечно, работать можно. Через прерывания биос. Там ограничений куда как меньше, чем в случае работы из под ОС будет...
|
|
|
|
|
Nov 19 2009, 09:23
|
Частый гость
 
Группа: Свой
Сообщений: 81
Регистрация: 26-10-06
Из: Россия, Пенза
Пользователь №: 21 706

|
Цитата(galjoen @ Nov 18 2009, 21:39)  В биосе нужно через прерывания работать. Он только MassStorage, клавиатуру и мышку понимает. Как показывает практика, BIOS поддерживает и USB хабы. Вчера пробовал подключать загрузочную флэшку с DOS'ом через хаб. На первой машине это привело к зависанию на этапе POST, а на второй прокатило. BIOS увидел флэшку и загрузился с неё
|
|
|
|
|
Nov 20 2009, 14:17
|
Частый гость
 
Группа: Свой
Сообщений: 81
Регистрация: 26-10-06
Из: Россия, Пенза
Пользователь №: 21 706

|
[attachment=38334:________...________.html] Цитата(galjoen @ Nov 18 2009, 21:39)  ...Попробовал и пришёл к выводу, что винда только если в дескрипторе DEVICE его класс прописать понимает, а в INTERFACE - нет. Т.е. составное устройство сделать невозможно. А м.б. это у меня руки кривые... Хочу опровергнуть заявление galjoen о невозможности создания составного устройста Сегодня попробовал сделать составное USB устройство: Mass Storage Device и CDC Ethernet Emulation Model. Прилагаю описание дескрипторов во вложении. А также картинку диспетчера устройств во вложении.
Сообщение отредактировал DiMonstr - Nov 20 2009, 14:20
Эскизы прикрепленных изображений
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|