реклама на сайте
подробности

 
 
> Композитное USB устройство но мало эндпоинтов?
Albun
сообщение Jun 17 2009, 17:13
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 21-07-08
Пользователь №: 39 116



Здравствуйте!
При написании прошивки под микроконтроллер AT91SAM7S128 cтолкнулся со следующей проблемой.
Необходимо сделать композитное устройство которое будет объединять в себе два виртуальных компорта (CDC). Соответственно делаю дескриптор конфигурации в котором описаны оба CDC. При этом в каждом CDC есть пункт описания BULK эндпоинтов входа и выхода а также один interrupt эндпоинт. Итого в сумме получается 6 эндпоинтов необходимо для реализации двух CDC в одном композитном устройстве.

Вот вырезка описания BULK эндпоинтов
для первого CDC:
0x07,0x05,0x01,0x02,0x40,0x00,0x00, (тут эднпоинт адрес = 1)
0x07,0x05,0x82,0x02,0x40,0x00,0x00, (тут эднпоинт адрес = 2)
для второго CDC:
0x07,0x05,0x04,0x02,0x40,0x00,0x00, (тут эднпоинт адрес = 4)
0x07,0x05,0x85,0x02,0x40,0x00,0x00 (тут эднпоинт адрес = 5)

Т.е. каждый эндпоинт должен иметь свой адрес который у меня равен 1,2, 4 и 5. Проблема в том что микроконтроллер имеет только 3 эндпоинта (не считая контрольного). Получается я могу задать адреса только
от 1 до 3, т.е. например только для первого CDC, а для второго уже не хватает свободных эндпоинтов. Есть ли возможность каким то образом обойти данное ограничение, т.е. задать дескриптор конфигурации
каким-то таким образом что и второму CDC я смогу задать адреса эндпоинтов от 1 до 3?

Или, вообще, допустим я хочу сделать композитное устройство с 10-ю CDC. Возможно ли такое или количество устройств которые я могу объеденить в одно композитное упирается в количество доступных эндпоинтов (что для AT91SAM7S128 равно 4, для AT91SAM7X128 равно 6 и вообще спецификацией USB зарезервировано 4 бита что равно максимально 16-ти возможным эндпоинтам)???
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 3)
tAmega
сообщение Jun 17 2009, 17:55
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 474
Регистрация: 20-01-09
Из: НН
Пользователь №: 43 639



Нет не можете. Если открыли USB устройство, то нельзя у него отнимать эндпойнты "на лету". И если у Вас 5 эндпойнтов, максимум что можно сделать, это mass storage + CDC.


--------------------
пользователь отключен
Go to the top of the page
 
+Quote Post
Alex11
сообщение Jun 18 2009, 07:50
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 106
Регистрация: 23-10-04
Из: С-Петербург
Пользователь №: 965



Сэкономить можно только на Interrupt endpoint. Если вы не используете изменение битов состояния COM-порта, а только передачу данных, то для нескольких CDC можно назначить один и тот же Interrupt endpoint. Формально некорректно, но работает.
Go to the top of the page
 
+Quote Post
Albun
сообщение Jun 18 2009, 09:08
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 21-07-08
Пользователь №: 39 116



Цитата(Alex11 @ Jun 18 2009, 10:50) *
Сэкономить можно только на Interrupt endpoint. Если вы не используете изменение битов состояния COM-порта, а только передачу данных, то для нескольких CDC можно назначить один и тот же Interrupt endpoint. Формально некорректно, но работает.


Да, именно так пришлось и поступить, назначить общую Interrupt эндпоинт. У меня используется простейшая конфигурация порта - RX & TX, так что по interrupt EP вообще ничего не отсылаю. Я пробовал вообще выбрасывать описание для interrupt EP из дескриптора конфигурации, но тогда системой воспринимался только первый отсылаемый bulk пакет, второй уже не отсылался - система не подтверждала его принятие. Фактически я проверил, если указан один и тот же адрес эндпоинта для двух устройств, то Windows приписывает эту эндпоинт первому устройству. Точно так же пришлось поступить для объединения CDC + CCID ридера - я разместил в дискрипторе конфигурации описание ридера первым а CDC вторым с общей interrupt эндпоинт и соответственно системой воспринимаются пакеты высланные по Interrupt EP как от CCID устройства.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 00:04
Рейтинг@Mail.ru


Страница сгенерированна за 0.01379 секунд с 7
ELECTRONIX ©2004-2016