Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

Не получается разобраться с usb

Вт окт 01, 2019 14:32:39

Здравствуйте, хочу разобраться с usb. Для примера решил сделать custom hid устройство. Так вот написал самодельный драйвер на CMSIS. Устройство определяется в системе правильно. Но передача данных не работает. По сообщениям в анализаторе судя по всему драйверу не нравятся string дескрипторы. Почему не знаю. Если сгенерировать код в кубе то же самое. В чем может быть проблема? Если есть рабочий пример на f429zit скиньте пожалуйста.

Re: Не получается разобраться с usb

Сб окт 05, 2019 11:07:47

https://radiokot.ru/forum/viewtopic.php ... 0%BA%D0%B0

Re: Не получается разобраться с usb

Сб окт 05, 2019 11:18:24

А строковые дескрипторы правильно передаются? Если дескриптор длинней 63 символов, его надо в несколько заходов отправлять. Я когда HID делал, намучился, сделал так. Потом начал лепить CDC ACM, пришлось подобным же образом реализовать функцию отправки остальных дескрипторов (т.к. дескриптор устройства вылез за пределы 63 байт, чего в эмуляции PL2303 не было).

P.S. От custom HID никакой пользы нет! Делайте CDC!!!

Re: Не получается разобраться с usb

Сб окт 05, 2019 12:03:17

Eddy_Em писал(а):От custom HID никакой пользы нет!
В винде HID позволяет ставить дрова автоматически и подключаться к устройству без прав администратора.

Re: Не получается разобраться с usb

Сб окт 05, 2019 12:04:54

А мне нравится HID. Ни драйверов специальных, не надо приложению говорить на каком порту девайс висит. Сложнее обмен только делать. Свое надо городить.

Re: Не получается разобраться с usb

Сб окт 05, 2019 12:14:37

Z_h_e писал(а):Сложнее обмен только делать. Свое надо городить.
Через COM порт не нужно придумывать (или использовать готовый) протокол обмена.
С USB проще в том что пакеты делятся на 64 байта и в большинстве случаев данные в них помещаются, т. е. не нужно как с COM портом искать начало и конец посылки.

Re: Не получается разобраться с usb

Сб окт 05, 2019 12:22:47

Мурик, я так и написал, что с HIDoм надо свое городить, то есть в отличии от CDC.

Re: Не получается разобраться с usb

Сб окт 05, 2019 13:10:13

С COM портом разве не нужно? Как без протокола обмена понять где какие данные?

Re: Не получается разобраться с usb

Сб окт 05, 2019 13:16:32

Разные уровни протокола нужны будут. Тот уровень что для HID, для COM будет прозрачен. Со стороны компа.

Re: Не получается разобраться с usb

Вт окт 08, 2019 19:03:51

А мне нравится HID. Ни драйверов специальных, не надо приложению говорить на каком порту девайс висит. Сложнее обмен только делать. Свое надо городить.

Для работы с HID на стадии отладки ПО невозможно просто взять, и сделать
Код:
еchо "команды" > /dev/ttyUSBx

Это очень удобно с текстовым командным протоколом. Кроме того, у CDC и скорость значительно выше, чем у HID! А если нет полномочий суперпользователя, а очень хочется, можно и в юзерспейсе сделать посредника... В случае с HID всегда нужно сначала набросать какой-то костяк, прежде чем станет возможным с девайсом работать (разве что девайс - эмуляция клавы-мыши-джойстика). Поэтому лично я считаю, что HID на МК нужен лишь для эмуляции названных устройств. У меня старая версия велохронометра так и работала - эмулировала клавиатуру. Но было неудобно работать: приходилось вручную время вбивать с одного устройства в другое. Поэтому переделал на CDC.

Re: Не получается разобраться с usb

Вт окт 08, 2019 19:29:27

Eddy_Em писал(а):Для работы с HID на стадии отладки ПО невозможно просто взять, и сделать
Вы не умеете писать проги для компа производящие обмен по USB?

Eddy_Em писал(а):Это очень удобно с текстовым командным протоколом.
В большинстве случаев обмен компа с МК бинарный, т. к. перевод в текст это лишняя трата ресурсов.

Eddy_Em писал(а):А если нет полномочий суперпользователя
Ставьте винду. В ней работа с HID не требует прав админа. С COM портом тоже. Для того и другого есть API.
А в линуксе есть API для HID или только через libusb?

Re: Не получается разобраться с usb

Вт окт 08, 2019 19:34:51

Мурик писал(а):Вы не умеете писать проги для компа производящие обмен по USB?

Умею, но зачем мне лишние трудности на стадии отладки протокола и алгоритмов работы устройства? Я просто открываю терминал и работаю. А некоторые железяки у меня вообще так и запускаются из баш-скриптов: в порт пишутся команды и читаются оттуда обычными командами еchо и read.
Мурик писал(а):В большинстве случаев обмен компа с МК бинарный, т. к. перевод в текст это лишняя трата ресурсов.

Бинарный протокол нужен лишь если требуется гнать большие массивы данных. В остальных случаях сериализация удобней!
Мурик писал(а):Ставьте винду.

Зачем людям советовать есть фекалии?
Мурик писал(а):А в линуксе есть API для HID или только через libusb?

Два варианта: либо написать свой модуль ядра и работать через open/read/write/close и сисвызовы с устройством, либо в пространстве пользователя через libusb.
Да, с custom HID я связывался только один раз. И то - по нужде: нужно было для фотометра применить готовые турели. А производители, сволочи, никакого SDK в комплекте не давали. И протокол зажопили. Пришлось искать комп с мастдайкой и при помощи wireshark'а реверсить протокол. Получилось вот это.

Re: Не получается разобраться с usb

Вт окт 08, 2019 19:42:22

Eddy_Em писал(а):Бинарный протокол нужен лишь если требуется гнать большие массивы данных. В остальных случаях сериализация удобней!
Знаете как осуществляется сериализация бинарных данных? Берется структура и заполняется данными, включая ИД команды размером и контрольной суммой и отправляется. При приеме данные помещаются в структуру и считываются из нее.

Eddy_Em писал(а):Два варианта: либо написать свой модуль ядра и работать через open/read/write/close и сисвызовы с устройством, либо в пространстве пользователя через libusb.
Тогда понятно почему вы не понимаете преимуществ HID. В винде есть API позволяющее получить доступ к устройству без разработки и установки драйверов и прав администратора.

Re: Не получается разобраться с usb

Вт окт 08, 2019 19:45:29

Мурик, можно подумать, для функционала libusb нужны права суперпользователя...
Те же яйца!
Только удобней намного. В мастдайке вообще разработка железа - как выдирание гланд у себя самого при помощи раскаленного лома через задницу!

Re: Не получается разобраться с usb

Ср окт 09, 2019 07:01:53

Eddy_Em, уж кто бы говорил :)
Самому патчить st-flash уж очень неохота!
Иногда задаёшься вопросом, а красноглазики вообще работать между патченьем и пересборкой всего софта успевают?

Re: Не получается разобраться с usb

Ср окт 09, 2019 07:04:29

А я постоянно задаюсь вопросом: как геймеры успевают работать? Им же постоянно нужно сражаться с мышкой!
В операционных системах же все просто: нужен тебе софт, которого нет — напиши его сам. А вот пользователям игровых приставок, которые ничего не умеют, кроме как мышеблудием заниматься, приходится платить за ПО... Да еще и, бедняги, мучаются в совершенно неюзабельном интерфейсе. Но терпят — зонд не жмет!

Re: Не получается разобраться с usb

Ср окт 09, 2019 07:31:33

У тебя мусофобия? Хочешь об этом поговорить? :) Давно ты видел компьютер без мышки или тачпада?
Изображение

Написать самому софт под win Ктулху не разрешает?

Re: Не получается разобраться с usb

Ср окт 09, 2019 07:52:31

Ну вот, одни работают подходящими и эффективными инструментами, а другие демагогию о "мусофобии" разводят. И ничего полезного не делают, только руками водят. Руководители, блин!
P.S. Советую сравнить время, затраченное на написание софта для работы с железом под линукс и под игровые приставки. Разница во времени будет поразительная: то, что в линуксе делается за день, в прошивке потребует неделю корпеть над кодом! я уж не говорю об элементарных удобствах: отсутствие полноценной командной строки в прошивке делает ее абсолютно неюзабельной. Но крысолюбам это, похоже, нравится! Видимо, иметь переменную PATH длиной в несколько страниц — круто!

Re: Не получается разобраться с usb

Ср окт 09, 2019 07:55:13

Я просто открываю терминал и работаю.

Проблема только в том, что в РЕАЛЬНЫХ устройствах созданных как товар софт предназначен для юзера, а не для разработчика. Мало того, этот юзер сам определяет с какой ОС ему требуется работать. И в 99,99% случаев это Винда.
Подключение CDC в винде не обеспечивает автоматического коннекта типа воткнул и забыл. А юзерам именно так и надо. Они вообще ничего не понимают в ОС и программировании. Им нужен функционал купленного девайса. ФУНКЦИОНАЛ, а не внутренние фичи встроенной системы.
Мы уже давно отказались от CDC в пользу кастомного HID. Исключительно удобно. Скорости 64 кбайт/с хватает с большим запасом. Кстати, я так понимаю, что даже при изохронном USB с сотнями мегабайт в секунду трафика USB устройства делают как составные и коннект обеспечивается кастомным HID.

Re: Не получается разобраться с usb

Ср окт 09, 2019 11:26:22

Да плевать мне на вантузоидов! Пусть себе мучаются, как хотят! Если им хочется работать - пускай ставят операционную систему, а не геймерскую прошивку...
Насчет же оконечного управления устройствами, я последнее время делаю веб-морды: очень удобно! Можно даже с какого-нибудь ондроедофона выйти, авторизоваться и поуправлять железякой.
Учитывая то, что апач или хотя бы nginx на любой машине всегда есть, никаких сложностей с веб-мордой нет. В исключительных случаях можно вебсокет-сервер запустить из-под пользователя с доступом к 80-му порту и без вебсервера выдавать нужные веб-странички, картинки и жабоскрипт юзеру.
Ответить