Jump to content

    

USB CDC: как сэкономить на конечных точках?

Recommended Posts

Arlleex

Приветствую!

Стандарт требует 3 физические конечные точки для реализации USB CDC.
Это BULK IN/OUT, INTERRUPT IN. Ок. Я хочу реализовать в своем девайсе 3 VCP.
Но в моем МК только 5 пользовательских двунаправленных конечных точек.
Естественно, хватает только на реализацию двух полноценных каналов VCP.
При этом одна из конечных точек остается свободной. А хотелось же 3 канала.

Можно ли каким-то образом сэкономить на ресурсах и упихать 3 VCP в 5 двунаправленных конечных точек?
Я не совсем понимаю, зачем мне INTERRUPT IN (вернее, зачем они вообще там нужны). От них я хотел бы избавиться (если можно).
И, если их все-таки можно не использовать, корректно ли будет работать Host?

Share this post


Link to post
Share on other sites

AlexandrY
1 hour ago, Arlleex said:

И, если их все-таки можно не использовать, корректно ли будет работать Host?

Тогда на PC надо будет писать свой драйвер и это уже будет не VCP.
Стандартные драйвера COM порта требуют управления сигналами RTS, CTS...
 

Share this post


Link to post
Share on other sites

Herz
40 minutes ago, Arlleex said:

Стандарт требует 3 физические конечные точки для реализации USB CDC.
Это BULK IN/OUT, INTERRUPT IN. Ок. Я хочу реализовать в своем девайсе 3 VCP.
Но в моем МК только 5 пользовательских двунаправленных конечных точек.
Естественно, хватает только на реализацию двух полноценных каналов VCP.
При этом одна из конечных точек остается свободной. А хотелось же 3 канала.

Я, наверное, чего-то не понял, но 5/3=1, и в остатке 2.

Share this post


Link to post
Share on other sites

Arlleex
6 минут назад, AlexandrY сказал:

Тогда на PC надо будет писать свой драйвер и это уже будет на VCP.
Стандартные драйвера COM порта требуют управления сигналами RTS, CTS...

Ну может можно как-то обхитрить этот драйвер? Чтобы он думал, что эти сигналы как бы есть, но по факту их как бы нет:biggrin:
Они мне как бы нафиг не нужны (RTS, CTS и т.д.). К тому же, в VCP разве есть в них нужда и вовсе? Не уверен...
Вот, кстати, кто-то уже интересовался подобным, на 99% подходящим под мою задачу. Похоже, все-таки, можно.

4 минуты назад, Herz сказал:

Я, наверное, чего-то не понял, но 5/3=1, и в остатке 2.

Конечные точки - двунаправленные. То есть, либо IN, либо OUT, либо IN/OUT.

Share this post


Link to post
Share on other sites

AlexandrY
31 minutes ago, Arlleex said:

Вот, кстати, кто-то уже интересовался подобным, на 99% подходящим под мою задачу. Похоже, все-таки, можно.

Так все этим интересуются.
Но ответ таков, что стандартный драйвер винды с таким работать не будет. 
Свой драйвер можете делать какой угодно. Но только не забудьте купить права на написание драйверов под винду. :biggrin:

Share this post


Link to post
Share on other sites

1 час назад, AlexandrY сказал:

Стандартные драйвера COM порта требуют управления сигналами RTS, CTS...

Которое происходит через конечную точку 0.

57 минут назад, AlexandrY сказал:

Так все этим интересуются.
Но ответ таков, что стандартный драйвер винды с таким работать не будет. 

Ну, интересуются в основном нахождением готовых решений. Созданием решений занимается меньшинство. Хотелось бы, чтобы ответ был не в стиле "готового решения в интернете не нашел", а "я проверял, это не работает". Или "вот тут человек пишет, что проверял и у него не получилось".

Читаем описание (Universal Serial Bus Class Definitions for Communications Devices. Revision 1.2 (Errata 1) November 3, 2010):

Цитата

The Communications Class defines a Communications Class interface consisting of a management element and optionally a notification element. The management element configures and controls the device, and consists of endpoint 0. The notification element transports events to the host, and in most cases, consists of a interrupt endpoint.

Прошу обратить внимание на слово "optionally". Если микрософт "забил" на слово "optionally" - жаль.

41 минуту назад, Arlleex сказал:

Печаль тогда, конечно.

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

Share this post


Link to post
Share on other sites

Arlleex
17 минут назад, Сергей Борщ сказал:

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

Как отдадут девайс, на котором можно проверить - так сразу:smile:

Share this post


Link to post
Share on other sites

31 минуту назад, Сергей Борщ сказал:

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

Проверил сам - не взлетело. Даже под линухом. Прочитал документацию внимательнее:

Цитата

The Communications Class interface shall provide device management by furnishing a management element (endpoint 0); the interface optionally can provide host notification by furnishing a notification element. Only the management element is required for a complete Communications Class interface. The management element also meets the requirements for devices as outlined in the USB Specification. Call management is provided in the communications interface and optionally multiplexed on a data interface. The following configurations describe how the device might provide call management with and without the use of the Communications Class interface:
• The device does not provide any call management on the Communications Class interface and is made up of only a management element (endpoint 0). In this case, the Communications Class interface is minimally represented and only provides device management over a management element (endpoint 0). This corresponds to the Multi-Channel Control Model and the CAPI Control Model, as described in the ISDN Subclass Specification.
• The device does not provide an internal implementation of call management and only accepts minimum set of call management commands from the host. In this case, both a management element and a notification element represent the Communications Class interface. This corresponds to the Direct Line Control Model, as described in the PSTN Subclass Specification.”
• The device provides an internal implementation of call management over the Data Class interface but not the Communications Class interface. In this case, the Communications Class interface is also minimally represented and only provides device management over a management element (endpoint 0). This configuration most closely corresponds to the Abstract Control Model in which commands and data are multiplexed over the Data Class interface. Activation of the command mode from data mode is accomplished using the Heatherington Escape Sequence or the TIES method. For more information about the Abstract Control Model, see the PSTN Subclass Specification.
• The device provides an internal implementation of call management that is accessed by the host over the Communications Class interface. In this case, the Communications Class interface performs both call and device management, and consists of a management element (endpoint 0) and a notification element (normally a interrupt endpoint). The management element will transport both call management and device management commands. The notification element will transport asynchronous event information from the device to the host, such as notification of an available response, which then prompts the host to retrieve the response over the management element. This corresponds to the Abstract Control Model. For more information about the Abstract Control Model, seethe PSTN Subclass Specification.

Наши виртуальные последовательные порты используют Abstract Control Model (CDC-ACM) и попадают в последнюю категорию. Микрософт не виноват :blush:

Вот еще безумная мысль:

Цитата

Notification elements pass messages via an interrupt or bulk endpoint, using a standardized format. Messages are formatted as a standardized 8-byte header, followed by a variable-length data field. The header identifies the kind of notification, and the interface associated with the notification; it also indicates the length of the variable length portion of the message

Интересно, а можно ли использовать одну и ту же interrupt контрольную точку в нескольких виртуальных портах? Но это я проверить не могу - нет у меня исходника с двумя портами.

Share this post


Link to post
Share on other sites

Eddy_Em

INTERRUPT IN не нужен, без него CDC прекрасно работает, а сам INTERRUPT IN вообще не используется (смотрел wireshark'ом).

Специально проверял: и в CDC ACM, и в эмуляторе pl2303 не настраивал INTERRUPT IN. Все работало.

В общем, не нужны четыре точки, нужны только три: стандартная INOUT0, OUT2 и IN3.

Share this post


Link to post
Share on other sites

В CDC нужны минимум 4 точки .Две нулевых по ним идёт служебная информация . И две рабочие, одна для приёма  и одна для передачи данных.

Share this post


Link to post
Share on other sites

Arlleex

Мнения разошлись.
Доберусь до своей железки, проверю.
Правда уже, скорее всего, после отпуска.

47 минут назад, Eddy_Em сказал:

INTERRUPT IN не нужен, без него CDC прекрасно работает, а сам INTERRUPT IN вообще не используется (смотрел wireshark'ом).

А вот Сергей говорит, что у него не работает.

49 минут назад, Eddy_Em сказал:

Специально проверял: и в CDC ACM, и в эмуляторе pl2303 не настраивал INTERRUPT IN. Все работало.

Интересно...

50 минут назад, Eddy_Em сказал:

В общем, не нужны четыре точки, нужны только три: стандартная INOUT0, OUT2 и IN3.

Короче, Вы утверждаете, что у Вас работает. Приму к сведению, спасибо.

42 минуты назад, геннадий75 сказал:

В CDC нужны минимум 4 точки .Две нулевых по ним идёт служебная информация . И две рабочие, одна для приёма  и одна для передачи данных.

Если так, то в моем МК можно будет поднять до 5 VCP (в нем 5 IN/OUT точек).

Но все же, видимо, надеяться на стабильность этих решений не приходится.

Share this post


Link to post
Share on other sites

GenaSPB

Windows 7 при отсутствии или фэйковой interrupt ep  работает только в направлении устройства. Десятый виндовс ранишн работал. После какого то обновления перестал. Наличие interrupt ep для cdc acm  не опционально. Понял после внимательногт чтения документа на... кажется на требования  windows.

Совет взятбюь более подходящий контроллер .

Share this post


Link to post
Share on other sites

Arlleex
3 часа назад, GenaSPB сказал:

Совет взятбюь более подходящий контроллер.

Более подходящий стоит уже не тех денег.
К тому же, надо еще выяснить, можно ли немного схитрить.
Это я про использование одной INTERRUPT КТ для нескольких VCP.

Share this post


Link to post
Share on other sites

GenaSPB

Смотри мои страдания выше... Порт начинает работать в одну сторону (не помню, а может и вообще не стартует драйвер).

Я вот с таким развлекаюсь:
image.png.bde78a4866c0fafd98796c3d32b158b3.png

А может там (у Вас) CDC ACM и не нужен? 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.