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

PIC32MX USB HOST

Дайте пожалуйста консультацию по применению 32-разрядного контроллера MICROCHIP с поддержкой USB 2.0 OTG. Суть задачи: наобходимо реализовать интеллектуальный 4-х портовый хаб, который может определять с каким VID и PID подключено USB-устройство и если в списке разрешенных устройство отсутствует, то запретить его работу. Предполагаемая структура устройства: PC-HOST <=> PIC32MX440F128H (в режиме device) <=> Parallel Interface <=> PIC32MX440F128H (в режиме HOST) <=> HUB <=> Mouse, Printer, Keyboard, Scaner. Интерфейс между двумя контроллерами PIC - параллельный PMP. Нужно реализовать между двумя контроллерами PIC транзитную передачу пакетов от хоста ПК к хабу и на этапе инициализации устройства подключенного к хабу на шине USB компьютера, контроллер PIC должен сравнивать поля VID и PID в дескрипторе устройства. Возможно ли решить такую задачу с программной точки зрения на контроллере PIC?

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

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


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

Возможно ли решить такую задачу с программной точки зрения на контроллере PIC?

Нет.

 

Есть несколько путей решения вашей задачи:

1. Поставить FPGA, которая будет парсить поток между хостом и хабом (или, как вариант, сама являться хабом).

2. Поставить МК с хостом, который будет проверять VID/PID устройства перед подключением к "настоящему" хосту.

3. Следить за VID/PID программно со стороны хоста.

 

ИМХО, если нужно именно аппаратное решение, то вариант 2 является наиболее простым.

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


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

...ИМХО, если нужно именно аппаратное решение, то вариант 2 является наиболее простым.

 

Почему нет???

К варианту №2 и подходит контроллер PIC32MX440F128H.

Получится организовать транзитную передачу пакетов???

 

Одним из первых вариантов было применение контроллера USB фирмы Cypress семейства EZ-HOSTс двумя модулями SIE. Там можно было закольцевать обмен транзакциями между SIE1 и SIE2. Первый

настроить как Device, а второй как Host. Но не судьба - их очень тяжело купить:(((

 

Кто-нибудь работал с этим каменем?

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

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


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

Спецификацию почитали бы что-ли. Ну как Вы собираетесь девайсом хаб изображать, а?

 

Вариант 2 предполагает использование аналоговых ключей для коммутации, а не "транзитную передачу пакетов" силами контроллера.

И да, любой МК с хостом в этом случае годится, в т.ч. PIC.

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


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

Спецификацию почитали бы что-ли. Ну как Вы собираетесь девайсом хаб изображать, а?

 

Да Вы не поняли. В качестве хаба будет отдельный полностью аппаратный хаб контроллер (например, ISP1520). Восходящий порт предполагается подключить к контроллеру PIC32MX440F128H в режиме хост. К ПК предполагается подключить второй контроллер PIC32MX440F128H в режиме функция. Два контроллера потому, что сложно достать контроллер с двумя портами USB, настраиваемых либо как хост либо функция или OTG. Ну а дальше не буду повторяться.

 

Этот механизм называется "виртуализация".

 

Вариант 2 предполагает использование аналоговых ключей для коммутации, а не "транзитную передачу пакетов" силами контроллера.

И да, любой МК с хостом в этом случае годится, в т.ч. PIC.

 

А каким образом Вы предлагаете применить аналоговый ключ? Что будет представлять из себя логика работы устройства?

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

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


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

Этот механизм называется "виртуализация".

И Вы готовы наворотить гору весьма сложного софта для контроллеров и драйверов со стороны хоста?

 

А каким образом Вы предлагаете применить аналоговый ключ? Что будет представлять из себя логика работы устройства?

Устройство получается очень простое:

Ставим стандартную ИС хаба, внешние разъемы через мультиплексоры могут быть подключены либо к соответствующим

портам хаба, либо к порту микроконтроллера. При подключении нового устройства сначала при помощи МК смотрим VID/PID,

затем, если они относятся к числу разрешенных, коммутируем устройство на хаб.

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


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

PIC-и никак не пойдут.

А вот это устройство сможет сделать то что вам надо.

http://www.alylab.eu/OpenProjects/ARMUltimator2/ARMU2.htm

 

В i.MX27 есть специальный режим на USB прозрачного перенаправления с одного USB порта на другой и при этом процессор может слушать обмен.

В случае чего запрещенного берет и глушит обмен.

Ну и FPGA на крайний случай может помочь.

Простым контроллером USB-дивайса никакого процессора очевидно не сделать чисто эмуляцию восходящего порта хаба.

И потому что в шине USB часто валит полный поток даже когда никто из дивайсов ничего не передает.

И потому что контроллер процессора чтобы понять что ему передают должен принять пакет т.е. в USB от него всегда уйдет ACK, а очень часто надо и NAK передавать, и это еще не касаясь синхронизации и прочих жестких таймингов.

 

 

Дайте пожалуйста консультацию по применению 32-разрядного контроллера MICROCHIP с поддержкой USB 2.0 OTG.

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


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

И Вы готовы наворотить гору весьма сложного софта для контроллеров и драйверов со стороны хоста?

 

Конечно нет! Поэтому и ищу другие варианты решения этой задачи.

 

Устройство получается очень простое...

 

Я накидал структурную схемку на бумажке. Что получилось - на фотке во вложении.

Правильно ли я думаю, что в этом случае необходимо будет реализовать следующие функции:

1) управление мультиплексорами;

2) контроллер должен определять к какому порту USB подключили (отключили) девайс и подключать его к себе управляя двумя мультиплексорами. Тут два варианта: либо с помощью хаба, либо дополнительной микросхемы;

3) контроллер должен уметь запрашивать дескриптор устройства и дескриптор серийного номера;

 

Если это так, то получается действительно очень просто:)

post-21706-1255518192_thumb.jpg

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


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

2) контроллер должен определять к какому порту USB подключили (отключили) девайс и подключать его к себе

управляя двумя мультиплексорами. Тут два варианта: либо с помощью хаба, либо дополнительной микросхемы;

Достаточно и одного мультиплексора - выходы, идущие к контроллеру, вполне можно и запараллелить. Управлять однозначно от контроллера, плюс от хаба нужно будет получать статус подключения устройства.

 

Если это так, то получается действительно очень просто:)

Ну, как мы знаем, дьявол скрывается в деталях.

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


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

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

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

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

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

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

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

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

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

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