LINUX.ORG.RU

V-USB доработка интерфейса

 , , ,


1

2

добрый день

проект v-usb

выкус из спецификации/инета/форумов:
- реализация не полностью соответствует стандарту
- работа на 100% не гарантируется
- питание по USB / с компа может провалиться до 4-4.5В (а F_CPU идет в «притирочку» ...) :o)

у всех рекомендованных схем подключения (3 шт) имеются те или иные очевидные минусы.

https://img.radiokot.ru/files/28650/2g6l5osisx.png
https://img.radiokot.ru/files/28650/2g6l5o7m5h.png
https://img.radiokot.ru/files/28650/2g6l5ngk3q.png

как следствие стабильно может работать только при «определенных условиях»

в планах поработать с библиотекой.
для начало решил «набросать» альтернативный вариант. (так сказать, попытаться закрыть все возможные дыры в подключении)
https://img.radiokot.ru/files/28650/2g7asnvkb7.png

достаем помидоры, баркова, мысли, высказываемся (заранее благодарен)

tag: v-usb, usb, avr, avr-gcc, atmega328p, linux, mac-osx

NO atmega32u4, NO arduino pro micro etc...

###!!! UPDATE !!!###

нашел в распайке cypress usb module
как думаем, в данном случае может пригодиться?!

//
// CY7C63723C usb module 
//

Feb 28 03:59:32 book kernel: [409827.421055] usb 2-2: new low-speed USB device number 6 using uhci_hcd
Feb 28 03:59:32 book kernel: [409827.586124] usb 2-2: New USB device found, idVendor=0665, idProduct=5161
Feb 28 03:59:32 book kernel: [409827.586135] usb 2-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
Feb 28 03:59:32 book kernel: [409827.586143] usb 2-2: Product: USB to Serial
Feb 28 03:59:32 book kernel: [409827.586149] usb 2-2: Manufacturer: Cypress Semiconductor
Feb 28 03:59:32 book kernel: [409827.628281] hid-generic 0003:0665:5161.0002: hiddev0,hidraw0: USB HID v1.00 Device [Cypress Semiconductor USB to Serial] on usb-0000:00:1d.0-2/input0
Feb 28 03:59:32 book mtp-probe: checking bus 2, device 6: "/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-2"
Feb 28 03:59:32 book mtp-probe: bus: 2, device: 6 was not an MTP device
★★★★

Последнее исправление: sunjob (всего исправлений: 4)

Ответ на: комментарий от Stack77

Такой скорости с v-usb нереально достичь.

Ну что значит нереально. INT0 ловит начало пакета данных с USB, который контроллеру придется обрабатывать бит за битом вручную (аппаратного модуля-то нет). И это еще хорошо что сначала идет синхробайт, который можно частично пропустить.

Те 2,7 мкс (32-53 такта) это скорость реакции на прерывание, сами пакеты посылаются реже. То есть если хост что-то от нас хочет, надо все бросить и за 32 такта подхватить обмен и начать обработку. В vusb кстати, при входе в прерывание на стек пушатся только YL (r28) и SREG. Все остальные туда засовываются в промежутках между чтением битов с шины - экономия тактов даже на этом.

Скорость скорее ограничивается собственно быстродействием контроллера - успеет он подготовить ответ между запросами или придется NAK слать и ждать следующего. 50 - 100 кб/с это не так уж мало. У меня в качестве программатора avrdoper-hid, там вряд ли больше 8 кБ/с.

P.S. Кстати, можно sei() вызывать в начале низкоприоритетных обработчиков. Таким образом, можно обеспечить некоторое подобие программному диспетчеру приоритетов.

Либо ручками опрашивать флаги прерываний. Все же это безопаснее вложенных прерываний на ручном управлении. Хотя если сделать аккуратно и внутри прерывания еще сбрасывать флаг разрешения, может и ничего.

COKPOWEHEU
()
Ответ на: комментарий от COKPOWEHEU

Ну, я большей скорости на своих девайсах с v-usb не мог достичь (и не старался, для моих нужд больше и не требовалось). 50-100 кб/с по памяти написал, этот программатор до сих пор лежит, но давно им не пользовался. Так что, возможно, загнул по скорости. Помню, флешка BIOS точно больше 5 минут писалась.

Stack77
()
Ответ на: комментарий от ilovewindows

Было какое-то решение, которое генерит сертификат, подписывает ним драйвер, и закидывает его в store как доверяемый. Zadig, вроде, этим и пользуется.

upd: libwdi. Но надо самому собрать, чтобы использовать собственный драйвер.
Так же, можно воспользоваться штатными средствами от МС: https://docs.microsoft.com/en-us/windows-hardware/drivers/install/how-to-test-sign-a-driver-package

А сокрошенеи писал про то, что стандартные устройства на V-USB, например HID, успешно работают со штатными драйверами. Если поведение прошивки соответствует поведению какого-нибудь существующего устройства (в том числе сферический HID в вакууме) - можно передать хосту его VID:PID, и не потребуется ручная установка драйверов.

token_polyak ★★★★
()
Последнее исправление: token_polyak (всего исправлений: 7)
Ответ на: комментарий от sunjob

и вам спасибо!

Обращайтесь! Мы с @Stack77 всегда рады помочь новичкам.

Владимир 123

anonymous
()
Ответ на: комментарий от Stack77

Ну, я большей скорости на своих девайсах с v-usb не мог достичь

Да ты у меня гонщик ;)

Владимир 123

anonymous
()
Ответ на: комментарий от anonymous

Да ты у меня гонщик ;)

Не знаю о чем ты, друг. Хотя, с твоими «замашками» - догадываюсь. Оставь это дело, я тебе не Шульман :D

Так-то человек здесь V-USB доработка интерфейса (комментарий) все хорошо описал. И явно со стандартом USB получше меня знаком. Я описал свой опыт работы с v-usb. Просто, знаю как лучше по схемотехнике (из приведенных примеров) и как делать не стоит по программному коду. Ну, а если где недопонял или некорректно написал - прошу простить, я же не «железячник» по профессии.

Stack77
()
Ответ на: комментарий от token_polyak

Если штатный драйвер подходит то понятно, про подпись вроде как надо купить у MS, голоса в голове называют 8 баксов (за год?) и вроде как и затевалась «безопасность пользователя» ради этого, не компилял драйвера со времен DDK 2000, что-то и не тянет.

ilovewindows ★★★★★
()
Последнее исправление: ilovewindows (всего исправлений: 1)
Ответ на: комментарий от token_polyak

А зачем нужен собственный драйвер, когда есть libusb? Всё равно с V-USB не будет таких скоростей, где будет заметна разница между kernel-space и user-space драйвером. А с libusb можно использовать готовый подписанный драйвер и самому не думать о сертификате.

KivApple ★★★★★
()
Ответ на: комментарий от KivApple

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

token_polyak ★★★★
()
Ответ на: комментарий от token_polyak

Конкретно с клавиатурами устройство просто реализует USB HID и работает без всяких драйверов (а если хочется доп. функции типа настраиваемой подсветки, то USB HID позволяет их реализовать опять же без драйвера).

KivApple ★★★★★
()
Ответ на: комментарий от KivApple

Так-то, «без всяких драйверов» = со штатным драйвером. Конкретный пример, который привел ilovewindows - AVR-CDC - почему-то не работает со стандартными драйверами USB CDC (usbser.sys), видимо нарушает стандарт из-за ограниченных возможностей МК.

token_polyak ★★★★
()
Последнее исправление: token_polyak (всего исправлений: 1)
Ответ на: комментарий от KivApple

А зачем нужен собственный драйвер, когда есть libusb?

Очевидно: чтобы конечный пользователь пользовался устройством привычными ему способами, без необходимости устанавливать странные драйвера и утилиты.

Согласитесь, было бы странно для флешки или usb-COM переходника устанавливать сторонний драйвер, да еще с необходимостью ручного подписывания

COKPOWEHEU
()
Ответ на: комментарий от Stack77

Так-то человек здесь V-USB доработка интерфейса (комментарий) все хорошо описал

Все равно ты для меня самый умный ;) Все по сути пишешь всегда.

Владимир 123

anonymous
()
Ответ на: комментарий от token_polyak

AVR-CDC - почему-то не работает со стандартными драйверами USB CDC (usbser.sys), видимо нарушает стандарт из-за ограниченных возможностей МК

Скорее из-за ограничений стандарта. low-speed устройствам прямо запрещено эмулировать COM-порт.

Хотя Линуксу на это традиционно плевать, что само по себе забавно.

Ковыряюсь сейчас с аппаратным usb на stm32. Малейшее несоответствие стандарту вводит Винду в ступор, а Линуксу хоть бы хны. «Ну подумаешь, вместо BCD-строки подсунули текстовую, с кем не бывает» «Ну подумаешь, вместо 9 байт в дескрипторте передали 8 - всем же понятно что устройство сказать хотело». Тогда как реакция Винды: «Что вы мне подсовываете?! Я с индусскими поделками работать отказываюсь! Ну-ка ребутну его пару раз, вдруг одумается… Нет? Ну, значит, устройство безнадежно»

COKPOWEHEU
()
Ответ на: комментарий от anonymous

а на фронте стало быть контузию получил жсом и стал инвалидом веб-труда?

anonymous
()

Если нужен простой железный USB то или stm32 младших серий (все подорожали как видеокарты) или ch552g (набирает популярность, паябельный корпус, крайне дешев)

bga_ ★★★★
()
Ответ на: комментарий от bga_

Некоторые клоны STM32 соответствуют характеристикам и поведению оригинала, например CS32.
Ну и есть МК на RISC-V, немного дешевле аналогичных STM32.

token_polyak ★★★★
()
Последнее исправление: token_polyak (всего исправлений: 1)
Ответ на: комментарий от bga_

ch552g (набирает популярность, паябельный корпус, крайне дешев)

Я так понял это 8051 + USB? Надо заказать на пробу. Буквально вчера нашел у себя дома книгу 2004 года Каспера Эрни «Ассемблер для семейства i8051». Интересное совпадение :)

Stack77
()
Ответ на: комментарий от Stack77

Только ассемблер там не нужен. Есть прости господи какая дрянь sdcc и iar (поддержка крестов но ограничение на размер кода)

bga_ ★★★★
()
Ответ на: комментарий от Stack77

Я так и не понял как там надо всё настраивать ((( Тестовые примеры тупо не работают.

anonymous
()

cypress usb module

###!!! UPDATE !!!###

нашел в распайке cypress usb module
как думаем, в данном случае может пригодиться?!

//
// CY7C63723C usb module 
//

Feb 28 03:59:32 book kernel: [409827.421055] usb 2-2: new low-speed USB device number 6 using uhci_hcd
Feb 28 03:59:32 book kernel: [409827.586124] usb 2-2: New USB device found, idVendor=0665, idProduct=5161
Feb 28 03:59:32 book kernel: [409827.586135] usb 2-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
Feb 28 03:59:32 book kernel: [409827.586143] usb 2-2: Product: USB to Serial
Feb 28 03:59:32 book kernel: [409827.586149] usb 2-2: Manufacturer: Cypress Semiconductor
Feb 28 03:59:32 book kernel: [409827.628281] hid-generic 0003:0665:5161.0002: hiddev0,hidraw0: USB HID v1.00 Device [Cypress Semiconductor USB to Serial] on usb-0000:00:1d.0-2/input0
Feb 28 03:59:32 book mtp-probe: checking bus 2, device 6: "/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-2"
Feb 28 03:59:32 book mtp-probe: bus: 2, device: 6 was not an MTP device
sunjob ★★★★
() автор топика
18 мая 2022 г.
Ответ на: комментарий от LINUX-ORG-RU

ого, братан... как давно это было!!! столько проектов уже запущено и в прямом и переносном смымсле...

да, что-то делали, потом переделывали, потом еще раз переделывали и, по моему, ни чего хорошего из этого «огорода» не вышло...

спасибо :о)

sunjob ★★★★
() автор топика
Ответ на: комментарий от sunjob

Я не знаю, что там нужно подбирать, на Ali продается пачками программатор USBAsp, который построен как раз по схеме со стабилитронами и массовых жалоб на работу я не слышал. Вряд ли китайцы что-то подбирают, а не фигачат стандартные компоненты.

KivApple ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.