Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Подключение к одному USB host и более одного девайса одновременно
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
GetSmart
Возможно ли?
1. С электрической стороны вопроса.
2. С программной стороны вопроса.

Понятно, что можно ключами переключать D+ D- на множестве разъёмов, но хотелось бы работать одновременно, без отключения девайсов.
aaarrr
Подключите хаб, они именно для этого и придуманы.
GetSmart
Цитата(aaarrr @ Feb 11 2009, 17:19) *
Подключите хаб, они именно для этого и придуманы.

Хабу нужен свой драйвер?
Я скачал пример USB Host Lite с сайта NXP, который умеет работать с флэшками. Подозреваю что он не будет работать с хабом. А хотелось бы подключать более одной флэшки одновременно.
aaarrr
Цитата(GetSmart @ Feb 11 2009, 15:16) *
Хабу нужен свой драйвер?

Таки да, нужен. Но это наиболее прямой путь, ИМХО.
GetSmart
Я когда-то давно читал спецификацию USB и припоминаю что там говорилось о возможности подключения множества (до 128 ?) устройств на шину. Или я ошибаюсь?
aaarrr
Цитата(GetSmart @ Feb 11 2009, 15:29) *
Или я ошибаюсь?

Не ошибаетесь. Но там речь шла как раз об использовании хабов.
GetSmart
Цитата(aaarrr @ Feb 11 2009, 18:17) *
Таки да, нужен. Но это наиболее прямой путь, ИМХО.

Подозреваю, что только для винды это самый "прямой" путь. Для embedded устройства обычно нет возможности "установить" новые дрова. Ведь внешние хабы могут иметь разные PID и VID. Есть ещё вариант поставить на разрабатываемое устройство микросхему-хаб и конкретно для неё встроить драйвер. Но этот вариант на мой взгляд не особо технологичней мультиплексора 4-1 на сигналы D+ D-. А на уровне программы сделать 4 одинаковых потока для работы с 4-мя девайсами. Возможно микросхема-хаб работает по точно такому же принципу и ничем не лучше.

Поправьте меня, если я ошибаюсь, но USB девайсы сами не инициируют передачу, а только отвечают на запросы хаба. Таким образом я могу держать питание на всех девайсах активным, а проц может по очереди передавать фреймы на разные девайсы через мультиплексор. То есть можно сделать по сути одновременную работу девайсов аналогично работе через хаб. Только я не знаю, в каком состоянии держать D+ D- на пассивных девайсах.
aaarrr
Цитата(GetSmart @ Feb 11 2009, 20:01) *
Для embedded устройства обычно нет возможности "установить" новые дрова. Ведь внешние хабы могут иметь разные PID и VID. Есть ещё вариант поставить на разрабатываемое устройство микросхему-хаб и конкретно для неё встроить драйвер.

Хаб - это стандартный класс устройств, поэтому держать специальные драйверы нет никакой надобности.

Цитата(GetSmart @ Feb 11 2009, 20:01) *
То есть можно сделать по сути одновременную работу девайсов аналогично работе через хаб.

Зачем изобретать велосипед, да еще сомнительной конструкции?
GetSmart
Цитата(aaarrr @ Feb 11 2009, 23:16) *
Зачем изобретать велосипед, да еще сомнительной конструкции?

Изобретать бывает интересно smile.gif Во всяком случае, можно сделать подключение хоть 10 девайсов без серьёзного напряга. Если хотите критиковать, то давайте конструктивней. Может есть подводные камни с электрической стороны дела?

Значит у хаба нет своих PID и VID ? Не подскажете где накопать драйвер для хаба?

К примеру. Имеется ТЗ сделать устройство с тремя Host-разъёмами. Варианты:
1. Подключить к процу микросхему-хаб, и от неё развести четыре разъёма. При этом в прошивке проца будет драйвер хаба.
2. Подключить к процу микросхему-мультиплексор и от неё развести четыре разъёма. При этом драйвер хаба не нужен, а драйвер хоста немного дорабатывается на 4 потока.

По сложности и стоимости оба варианта сравнимы. Второй может оказаться даже дешевле.
aaarrr
Цитата(GetSmart @ Feb 11 2009, 20:29) *
Значит у хаба нет своих PID и VID ? Не подскажете где накопать драйвер для хаба?

VID и PID есть, как и у любого USB-устройства. Можно, например, расковырять линуксовые исходники, но...

Цитата(GetSmart @ Feb 11 2009, 20:29) *
При этом драйвер хаба не нужен, а драйвер хоста немного дорабатывается на 4 потока.

чисто теоретически, такой вариант представляется возможным (хотя могу ошибаться sad.gif ), только придется забыть обо всех стандартах и писать собственный ни с чем не совместимый хост-стек.
galjoen
Цитата(aaarrr @ Feb 11 2009, 21:14) *
VID и PID есть, как и у любого USB-устройства. Можно, например, расковырять линуксовые исходники, но...

Зачем ковырять? Прочтите описание с usb.org там всё про хаб есть. В т.ч. рассматривается хаб представляющий из себя набор ключей, как вы и хотите сделать.. Только ещё хаб за подключением девайсов к своим портам следит и по каналу управления информацию об этом шлёт.
Цитата(aaarrr @ Feb 11 2009, 21:14) *
чисто теоретически, такой вариант представляется возможным (хотя могу ошибаться sad.gif ), только придется забыть обо всех стандартах и писать собственный ни с чем не совместимый хост-стек.

Теоретически можно все девайсы параллельно повесить. Электрически, если это флешки (без кабелей), всё работать будет. Но работать будет только после назначения адреса (энумерации). До установки адреса, когда к девайсу по 0-му адресу обращаются, проблеммы будут т.к. 2 или более девайса одновременно отвечать начнут. А вот если девайсы поочереди подключать, то таких проблем не будет. Будут другие - как вы узнаете, что новое устройство на шину подцепили и его проэнумеровать нужно (без переделки драйвера)? Хотя в принципе, если имеются ключи, то всё это не так сложно сваять. Но вот нужно-ли? Хотя если серия предполагается большая, то почему бы и нет? А за стандарты, в т.ч. всякие VID PID хаба не переживайте. Я встречал хаб с VID=PID=0, и ничего всё работало. Драйвер на хаб видимо по классу bDeviceClass в дескрипторе DEVICE ставится.
А вот самодельные девайсы, предназначенные для такого включения, сделать можно и несложно. Это составное устройство с точки зрения хоста будет. А реально несколько независимых.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.