Easyelectronics.ru

Электроника для всех
Текущее время: 07 июл 2020, 21:00

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 62 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: USB CDC ACM
СообщениеДобавлено: 19 янв 2019, 05:19 
Старожил
Аватара пользователя

Зарегистрирован: 06 ноя 2013, 16:07
Сообщения: 681
Откуда: Германия
Когда открыт - отображается, разумеется. С задержкой 20 мс, иногда. А вот что делать, когда не открыт?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: USB CDC ACM
СообщениеДобавлено: 19 янв 2019, 05:25 
Старожил

Зарегистрирован: 17 дек 2014, 04:38
Сообщения: 692
А что собственно вы хотите сделать ? Вы поймите это не праздное любопытство, но для того что бы дать какой-то совет нужно понимать каков протокол обмена и откуда куда вы чего хотите передавать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: USB CDC ACM
СообщениеДобавлено: 19 янв 2019, 05:43 
Старожил
Аватара пользователя

Зарегистрирован: 06 ноя 2013, 16:07
Сообщения: 681
Откуда: Германия
Я как-раз не хочу никаких протоколов. Я хочу иметь возможность "поговорить" с устройством просто через терминал, текстом. Если бы меня устраивало написание спец. программы для PC, то я бы не извращался с CDC, а работал бы напрямую с USB-пакетами.

Дал я ему команду "полный статус раз в секунду" и оно просто выплевывает раз в секунду свою сотню байт и бежит дальше. Если это работает, к примеру, через UART 115200, то заблокируется устройство на 10 мс (если буфер не использовать), но гарантировано не дольше, слушает его кто-нибудь или нет. И при этом гарантированно не потеряет ни одного байта, если все-таки его слушают. А вот с CDC я таких гарантий не получаю.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: USB CDC ACM
СообщениеДобавлено: 19 янв 2019, 17:00 
Старожил

Зарегистрирован: 17 дек 2014, 04:38
Сообщения: 692
dev писал(а):
Дал я ему команду "полный статус раз в секунду" и оно просто выплевывает раз в секунду свою сотню байт и бежит дальше. Если это работает, к примеру, через UART 115200, то заблокируется устройство на 10 мс (если буфер не использовать), но гарантировано не дольше, слушает его кто-нибудь или нет.
Не понял, что значит "заблокируется устройство на 10 мс" ? Если через UART, то устройство просто каждые 10мс плюет в порт и бежит дальше не ожидая подтверждения, откуда тогда 10мс ?
dev писал(а):
И при этом гарантированно не потеряет ни одного байта, если все-таки его слушают. А вот с CDC я таких гарантий не получаю.
И опять же, как не потеряет ни одного байта, если терминал на хосте не слушает, значит байты уйдут в пустоту. С CDC как раз все проще, пакетная передача, ESOF дает вам информацию о физическом соединении, вы готовите пакет к отправке и выставляете флаг VALID, если 3 ~ 5мс пакет не ушел, значит на хосте терминал погасили и принимать пакеты некому. Если при передаче, терминал не может принять пакет 20мс !!! значит у вас проблема в USB девайсе, пакеты должны уходить сразу.

PS: Alexsam сделал очень не плохой USB CDC драйвер и выложил его на этом форуме, он как раз подготовлен для использования потребителем - прост, с хорошими ремарками и описанием работы. Поищите на форуме.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: USB CDC ACM
СообщениеДобавлено: 19 янв 2019, 17:23 
Старожил
Аватара пользователя

Зарегистрирован: 06 ноя 2013, 16:07
Сообщения: 681
Откуда: Германия
void1509 писал(а):
Не понял, что значит "заблокируется устройство на 10 мс" ? Если через UART, то устройство просто каждые 10мс плюет в порт и бежит дальше не ожидая подтверждения, откуда тогда 10мс ?


А сколько надо времени, что бы передать сотню байт на скорости 115200?

void1509 писал(а):
И опять же, как не потеряет ни одного байта, если терминал на хосте не слушает, значит байты уйдут в пустоту.


Если они никому не интересны - пусть уходят. А если интересны - не потеряются. Идеально.

void1509 писал(а):
Если при передаче, терминал не может принять пакет 20мс !!! значит у вас проблема в USB девайсе, пакеты должны уходить сразу.


20 мс между выставлением VALID и срабатыванием ISTR_CTR. Проблема явно не в устройстве.

void1509 писал(а):
PS: Alexsam сделал очень не плохой USB CDC драйвер и выложил его на этом форуме, он как раз подготовлен для использования потребителем - прост, с хорошими ремарками и описанием работы. Поищите на форуме.


Проблема с готовыми решениями в том, что неизвестно, насколько они работают, а на какие моменты автор забил. Вот alexsam забил на очень многое (мы ведь о том же самом говорим?)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: USB CDC ACM
СообщениеДобавлено: 19 янв 2019, 17:53 
Старожил

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 4679
Откуда: КЧР, поселок Нижний Архыз
dev писал(а):
Вот alexsam забил на очень многое (мы ведь о том же самом говорим?)

Вот, кстати, с ходу мне не удалось тот код заставить работать. Когда-нибудь, если вдруг возникнет дикое желание сделать USB для F103 (хотя, не знаю даже, зачем бы мне это понадобилось), портирую эмулятор PL2303 на STM32F103.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: USB CDC ACM
СообщениеДобавлено: 19 янв 2019, 17:56 
Старожил
Аватара пользователя

Зарегистрирован: 06 ноя 2013, 16:07
Сообщения: 681
Откуда: Германия
С эмуляторами PL2303 & Co. такая проблема - их нельзя использовать в коммерческих продуктах.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: USB CDC ACM
СообщениеДобавлено: 19 янв 2019, 18:29 
Старожил

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 4679
Откуда: КЧР, поселок Нижний Архыз
Да и пофиг!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: USB CDC ACM
СообщениеДобавлено: 19 янв 2019, 19:02 
Старожил

Зарегистрирован: 17 дек 2014, 04:38
Сообщения: 692
dev писал(а):
А сколько надо времени, что бы передать сотню байт на скорости 115200?

пакет USB не может быть более 64 байт и уйдет он по любому за 1 фрейм (1мс).
dev писал(а):
20 мс между выставлением VALID и срабатыванием ISTR_CTR. Проблема явно не в устройстве.
Это не нормально.

void1509 писал(а):
PS: Alexsam сделал очень не плохой USB CDC драйвер и выложил его на этом форуме, он как раз подготовлен для использования потребителем - прост, с хорошими ремарками и описанием работы. Поищите на форуме.


dev писал(а):
Проблема с готовыми решениями в том, что неизвестно, насколько они работают, а на какие моменты автор забил. Вот alexsam забил на очень многое (мы ведь о том же самом говорим?)

А в чем собственно проблема ? Ну и опять же, там исходники и вы можете допилить напильником необходимый вам функционал.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: USB CDC ACM
СообщениеДобавлено: 19 янв 2019, 19:12 
Старожил

Зарегистрирован: 17 дек 2014, 04:38
Сообщения: 692
Eddy_Em писал(а):
Вот, кстати, с ходу мне не удалось тот код заставить работать. Когда-нибудь, если вдруг возникнет дикое желание сделать USB для F103 (хотя, не знаю даже, зачем бы мне это понадобилось), портирую эмулятор PL2303 на STM32F103.

А в чем разница ? Его вариант запилен под Keil и как пишет общество - работает из коробки. К тому же не плохо описан и читабельный код. У меня нет Keil, я пользуюсь GCC, но мои либы скажем так - для внутреннего пользования(не выведен API и без ремарк). Если вы реализуете CDC, то какая разница как вы его реализуете - через протокол PL2303, Ft222, ST CDC или CDC ACM. Функционал у них будет один и тот же, что обусловленно API работы с serial.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: USB CDC ACM
СообщениеДобавлено: 19 янв 2019, 19:17 
Старожил
Аватара пользователя

Зарегистрирован: 06 ноя 2013, 16:07
Сообщения: 681
Откуда: Германия
void1509 писал(а):
пакет USB не может быть более 64 байт и уйдет он по любому за 1 фрейм (1мс).


Это было про UART, не путайте.

void1509 писал(а):
Это не нормально.


Это - жизнь, которую я и наблюдаю на экране в данный момент.

void1509 писал(а):
А в чем собственно проблема ?


Это не продакшн-код, а прототип. К примеру, что там произойдет, если отправить новый пакет до того, как уйдет старый?

void1509 писал(а):
Ну и опять же, там исходники и вы можете допилить напильником необходимый вам функционал.


О чем и речь - далеко не всегда стоит брать чужой код непонятного качества. Часто лучше прочитать стандарт и сделать самому. О чем и весь топик.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: USB CDC ACM
СообщениеДобавлено: 19 янв 2019, 19:49 
Старожил

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 4679
Откуда: КЧР, поселок Нижний Архыз
void1509 писал(а):
я пользуюсь GCC

Аналогично. Я ж говорю: "из коробки", т.е. с минимальным допиливанием кода, у меня не взлетел этот CDC. Лично мне такая реализация не очень нравится, лучше по-другому сделать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: USB CDC ACM
СообщениеДобавлено: 19 янв 2019, 19:54 
Старожил
Аватара пользователя

Зарегистрирован: 27 мар 2015, 04:10
Сообщения: 1931
Откуда: Харьков
dev писал(а):
void1509 писал(а):
PS: Alexsam сделал очень не плохой USB CDC драйвер и выложил его на этом форуме, он как раз подготовлен для использования потребителем - прост, с хорошими ремарками и описанием работы. Поищите на форуме.


Проблема с готовыми решениями в том, что неизвестно, насколько они работают, а на какие моменты автор забил. Вот alexsam забил на очень многое (мы ведь о том же самом говорим?)

Например? На что я там забил?
Там правда висит один ПР не одобренный, но все руки не доходят его перелопатить. А так у меня на базе этой либы работает под всем, что там перечислено и без глюков.
Пиши что там добавить/поправить и будет общее счастье и веселье


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: USB CDC ACM
СообщениеДобавлено: 19 янв 2019, 21:22 
Старожил
Аватара пользователя

Зарегистрирован: 06 ноя 2013, 16:07
Сообщения: 681
Откуда: Германия
- API - совсем не UART-подобное. А если не нужен UART, то зачем связываться с CDC?
- Как определить, что предыдущий блок уже ушел?
- Как определить, что данные вообще уйдут? (вторая половина этого топика)
- Как притормозить поток с хоста, если не успеваешь обрабатывать? А не блокируя прерывание? (первая половина этого топика)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: USB CDC ACM
СообщениеДобавлено: 19 янв 2019, 22:38 
Старожил

Зарегистрирован: 17 дек 2014, 04:38
Сообщения: 692
dev писал(а):
- API - совсем не UART-подобное. А если не нужен UART, то зачем связываться с CDC?

О каком API вы пишите ? Я к примеру передаю блоки в своем протоколе. А CDC ACM использую, что бы дрова на хост не писать, тем более под разные системы.
dev писал(а):
- Как определить, что предыдущий блок уже ушел?

в EP регистре выставлен флаг NAK, после того как вы установили VALID
dev писал(а):
- Как определить, что данные вообще уйдут? (вторая половина этого топика)

Что значит вообще уйдут ? Если произошло рассоединение USB выставится флаг ESOF, если соединение есть и прошло несколько SOF сигналов, значит на хосте драйвер не открыт (API функция open).
dev писал(а):
- Как притормозить поток с хоста, если не успеваешь обрабатывать? А не блокируя прерывание? (первая половина этого топика)

Все очень просто, пока вы не выставите флаг VALID, USB device периферия ничего принимать не будет, обрабатывайте свой пакет сколько надо. Но помните, на хосте в serial API есть переменная VTIME в которой указано время таймаута в миллисекундах. Если вы его превысите, то программа на хосте будет считать что связь оборвалась. По умолчанию время 5000мс (5секунд).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: USB CDC ACM
СообщениеДобавлено: 19 янв 2019, 22:46 
Старожил
Аватара пользователя

Зарегистрирован: 06 ноя 2013, 16:07
Сообщения: 681
Откуда: Германия
void1509 писал(а):
О каком API вы пишите ?


Об этом: https://github.com/saewave/STM32F103-USB-CDC-CMSIS
Все остальные пункты туда же относились.

void1509 писал(а):
Я к примеру передаю блоки в своем протоколе. А CDC ACM использую, что бы дрова на хост не писать, тем более под разные системы.


Ну так и для простого USB дрова писать совсем не обязательно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: USB CDC ACM
СообщениеДобавлено: 19 янв 2019, 22:57 
Старожил

Зарегистрирован: 17 дек 2014, 04:38
Сообщения: 692
dev писал(а):
Ну так и для простого USB дрова писать совсем не обязательно.


Что значит "простого" ? USB это не соединение точка-точка, это шина. Каждое устройство которое вы подключаете - новый девайс на шине (как плату в PCI). И к каждому устройству нужен драйвер для операционной системы. Иначе этого устройства в системе не будет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: USB CDC ACM
СообщениеДобавлено: 19 янв 2019, 23:41 
Старожил

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 4679
Откуда: КЧР, поселок Нижний Архыз
Не нужен там никакой "драйвер", просто через libusb можно работать. Но это нудно, поэтому лучше использовать то, подо что "драйвера" уже есть!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: USB CDC ACM
СообщениеДобавлено: 19 янв 2019, 23:53 
Старожил

Зарегистрирован: 17 дек 2014, 04:38
Сообщения: 692
Можно, но это как говорится - вариации на тему. В винде libusb ставит свой драйвер, юникс/линукс через прямой доступ к USB стеку. Возможности через libusb сильно расширяются, но и программа на хосте тоже должна уметь работать с libusb, да и код толстеет. Во многих случаях когда можно обойтись соединением точка-точка, проще и удобней воспользоваться CDC ACM. К примеру моё приложение по линукс использует сигналы серийного порта для обработки событий, все это конечно можно было бы реализовать через libusb, но писанины было бы много.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: USB CDC ACM
СообщениеДобавлено: 19 янв 2019, 23:56 
Старожил

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 4679
Откуда: КЧР, поселок Нижний Архыз
Дык, я по той же самой причине (банальная лень) и сделал эмулятор PL2303, чтобы не париться с libusb и прочей фигней. Просто открыл /dev/ttyUSBx, да читай/пиши!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: USB CDC ACM
СообщениеДобавлено: 20 янв 2019, 00:30 
Старожил

Зарегистрирован: 17 дек 2014, 04:38
Сообщения: 692
Как вариант, такого (PL2303) зверя не видал, по этому использовал CDC ACM. А вы в своем эмуляторе какие VendorID/ProductID используете ? Свои или производителя, и если свои, как на них дрова натравливаете ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: USB CDC ACM
СообщениеДобавлено: 20 янв 2019, 00:50 
Старожил

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 4679
Откуда: КЧР, поселок Нижний Архыз
Я ж говорю: эмулятор PL2303. Т.е. VID/PID от PL2303! И используется модуль ядра usb/serial/pl2303.ko


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: USB CDC ACM
СообщениеДобавлено: 20 янв 2019, 01:39 
Старожил

Зарегистрирован: 17 дек 2014, 04:38
Сообщения: 692
Понятно, это одна из причин по которой я отказался от библиотеки ST. CDC ACM позволяет использовать произвольные.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: USB CDC ACM
СообщениеДобавлено: 20 янв 2019, 02:17 
Старожил

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 4679
Откуда: КЧР, поселок Нижний Архыз
void1509 писал(а):
CDC ACM позволяет использовать произвольные.

Ничего не понял.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: USB CDC ACM
СообщениеДобавлено: 20 янв 2019, 02:32 
Старожил

Зарегистрирован: 17 дек 2014, 04:38
Сообщения: 692
Если ваше устройство соответствует USB CDC ACM спецификации, то вы можете ставить любые VID/PID их любая (кроме винды) система все равно будет видеть как ttyACM. А для винды нужен текстовый файл .inf , он там в библиотеке Alexsam присутствует, и винда ставит свой драйвер usbser.sys. Так что получается есть дрова под все системы что называется из коробки. И не важно какие вы себе нарисовали VID/PID.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 62 ]  На страницу Пред.  1, 2, 3  След.


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB