Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Composite CDC ACM
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
Dron_Gus
Добрый день.

Есть задачка под STM32407 на FS порту (3 in EP + 3 out EP + EP0) сделать два или даже лучше три последовательных порта. И чтобы работало без самописных драйверов.
Т.е. композитное устройство из...

1. CDC ACM в классическом варианте "не влезает", т.к. используется 1 Bulk in + 1 Bulk out + 1 Interrupt EP.
Покурил стандарт - Interrupt EP опциональная. Т.е. вроде как хватит и двух EP на интерфейс.
Но тут же наступил на грабли - линуксовый драйвер такие устройства отфутболивает. Подавай ему Interrupt EP на Control Interface или иди нафиг.

2. Под линуксом можно использовать кого-нить из http://elixir.free-electrons.com/linux/lat...vers/usb/serial , например http://elixir.free-electrons.com/linux/lat...erial/generic.c но непонятно как он будет работать под виндами. Чужой драйвер подтягивать не хочется.

Может есть у кого какие-то идеи?
Можно ли заиспользовать одну Interrupt EP в двух интерфейсах? Вроде как нет.
Один Control Interface к двум Data Interface в CDC тоже не прицепить.

В общем приветствуются любые идеи.
Genadi Zawidowski
Один Control Interface к двум Data Interface в CDC не стоит делать. он не занимает ендпоинтов.

Вот вам образец как делается два например CDC.

Целиком проект тут
https://188.134.5.254/browser/trunk

Отсутствие Interrupt endpoint мешает работать под windows xp и 7-кой. под W10 работает.
Dron_Gus
Цитата(Genadi Zawidowski @ May 16 2017, 12:20) *
Один Control Interface к двум Data Interface в CDC не стоит делать. он не занимает ендпоинтов.

Вот вам образец как делается два например CDC.

Целиком проект тут
https://188.134.5.254/browser/trunk

Отсутствие Interrupt endpoint мешает работать под windows xp и 7-кой. под W10 работает.

Большое спасибо за информацию! Исходники изучу подробно вечером.
К сожалению отсутствие Interrupt Endpoint мешает работать и под Linux http://elixir.free-electrons.com/linux/v4....cdc-acm.c#L1287 . Кто-то решил "исправить" https://lkml.org/lkml/2012/9/9/192 . Для меня Линукс основная ОС.
Для себя то я могу это поправить, но не будешь же это обьяснять другим пользвателям.
Семерка и ХР, я думаю, мало у кого остались.
Но все же хочется иметь более-менее беспроблемный вариант. Видимо не зря со всякими FreeRTOS и ChibiOS идут примеры с Int EP, хотя никаких уведомлений через нее не ходит.

Если задать несколько конфигураций. Предположим первая: CDC + CDC + CDC без Int EP, а вторая: CDC с Int EP ("резервный" вариант), будет ли операционная система перебирать конфигурации пока не найдет устраивающую ее? Не совсем понимаю механизм переключения конфигураций.

Или, может быть, можно как-то со стороны устройства определить тип ОС? Хотя что-то сомневаюсь.
AlexRayne
А встречал кто нибудь реализацию виртуального хаба? чтобы через его интерфейс можно было цеплять произвольное количество девайсов?
Genadi Zawidowski
я ендпоинты нотификационные назначал на несуществующие номера. На один всех нельзя. Увидите в исходниках.
Dron_Gus
Цитата(AlexRayne @ May 16 2017, 14:53) *
А встречал кто нибудь реализацию виртуального хаба? чтобы через его интерфейс можно было цеплять произвольное количество девайсов?

Сомневаюсь что такое возможно. У каждого устройства есть адресс. Чтобы эмулировать несколько надо откликаться на несколько. Я такого не видел.

Цитата(Genadi Zawidowski @ May 16 2017, 16:18) *
я ендпоинты нотификационные назначал на несуществующие номера. На один всех нельзя. Увидите в исходниках.

Спасибо. Т.е. девайс будет слать NACK при обращении к ним? И все будет как бы верно?
Genadi Zawidowski
Насчет альтернативных конфигураций в CDC кажется и не предполагается...
Цитата
Т.е. девайс будет слать NACK при обращении к ним? И все будет как бы верно?

Девайс не может слать NAK с отсутствующего EP, там таймаут просто... хотя надо смотреть, у меня уже не работает usblyzer. Критерий что все нормально - если работает через USB HUB, многие вещи допустимые при прямом соединении не работают через HUB.

Кстати, у F7 endpoints больше чем у F4
ps: в питере можно и лично повидаться.
Dron_Gus
Цитата(Genadi Zawidowski @ May 16 2017, 16:19) *
Насчет альтернативных конфигураций в CDC кажется и не предполагается...

Девайс не может слать NAK с отсутствующего EP, там таймаут просто... хотя надо смотреть, у меня уже не работает usblyzer. Критерий что все нормально - если работает через USB HUB, многие вещи допустимые при прямом соединении не работают через HUB.

Кстати, у F7 endpoints больше чем у F4
ps: в питере можно и лично повидаться.

Я имел в виду конфигурации устройства. Те что в Configuration Descriptor. Обычно он один, не очень представляю логику хоста по выбору из нескольких.
Надо будет почитать спеку, что же делает девайс если нет контрольной точки. Вроде как Int точки опрашиваются с заданным интервалом. Расточительно ждать таймаут. А вообще красивое решение. sm.gif
Да. Про Ф7 знаю. И про HS порт у 407го. Но таковы реалии проекта. Кстати вот этого http://rusefi.com Может быть осилю свою версию с STM32F7xx, но пока на стадии рисования железа завис.
Можно. Раньше вроде были какие-то встречи посетителей electronix.ru . Потом я лет так на 5 выпал. Ну в любом случае с меня пиво! sm.gif
Dron_Gus
Вроде заработало под Линуксом. Правда если включить отладочную информацию от модуля cdc_acm то он сыплет ошибками по несузествующим EP. Но на работу не влияет.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.