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)

но зачем?

берем камень на 3,3, берем лдо на 3,3. если с хвоста приходит меньше 4,7 нафиг такой хвост. согласовалку или на полевиках, а лучше на толерашках, если они есть в камне

Morin ★★★★
()
Последнее исправление: Morin (всего исправлений: 1)
Ответ на: комментарий от I-Love-Microsoft

Да, там выверенная до такта ассемблерная лапша и отсутствие проверки контрольных сумм, чтобы уложиться в тайминги. Есть версия с проверками, но она требует 20МГц, что допустимо только для некоторых AVR'ок и только при питании 5v (схемы 1 и 2 используют 3.3v).
Алсо, первую схему рисовал аутист, не делайте так.

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

а внимательно ... ?! :о)

берем камень на 3,3,
а лучше на толерашках, если они есть в камне

->

atmega328p
NO atmega32u4, NO arduino pro micro
etc...

+

берем лдо на 3,3

->

F_CPU идет в «притирочку» ...)

+

нафиг такой хвост

-> молодец, конфетка на холодильнике...

согласовалку или на полевиках

а в схеме на чем?! подробнее, можно ссылки, схемы, рисунки итд

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

первую схему ... не делайте так

->

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

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

ничего страшного

просто запоминается обычно последняя фраза :о) а «там» как раз идет разговор об «20 МГЦ» ... :о)

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

Мне третья нравится. Стабилитроны вполне успевают отработать, а что напряжение чутка не 3.3 - ну что поделать, бывает.

izzholtik ★★★
()
Ответ на: а внимательно ... ?! :о) от sunjob

Про нафиг хвост я серьезно, загляни в спецуху юсб. не я понимаю, хочется побаловаться софтварно, но физлэй должен остаться тем же, иначе это уже не юсб и может и извращаться не нужно

ну и раз начали обкручивать схему микрахами вместо дешманских пары диодов, то може дифпару хардварно развесить на rx tx, глядишь освободится масса времени

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

Стабилитроны

это еще тот гемморой... во первых их придется подбирать буквально к каждой схеме, во вторых «их емкости», много-немного, но судя по всему будуn «гадить», да и на форумах не однократно поднимался этот «вопрос непонимания», у кого «вася» у кого «не вася» ... :о) поэтому и в «тапки» написал :о)

напряжение чутка не 3.3

да не дело-же это :о) для того и хочу немного подрихтовать схемку... там смд-деталькоф-то добавить, совсем чуть-чуть...

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

Мя просто не знает, как среагирует шина на резисторы в преобразователе уровней. Там же по 1.5К резистору тип девайса определяется, а у тебя на обеих линиях подтяжка вверх стоит.

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

загляни в спецуху юсб

а спецуха сама принудительно контролирует всех производителей железа?!!! у USB «по питанию» такой, блин, разбег ... слоны позовидуют :о)

ну и раз начали

топик для чего и создан?! я ж не только в нее ем и говорю из нее... нет, еще смотрю еЮ и читаююю в нее... :о)

сначало обдумывались все варианты, пришел к тому, что самое оптимальное будет доработать «таким образом», теперь хочу «пообщаться» по поводу критики, подводных камней применительно ДАННОЙ СХЕМЫ

если считаете, что есть резон в ином подходе

... може дифпару хардварно развесить на rx tx, глядишь освободится масса времени ...

то давайте с конкретики:

хардварно развесить на rx tx

какая схема, ссылки, пруфы, даташиты, плюсы, минусы, взвешанная оценка, так сказать

освободится масса времени

у меня или у процессора?! если у проца - то весьма маловероятно :о)

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

на обеих линиях подтяжка вверх стоит.

ну... проблем от подтяжек-то всяко меньше должно быть, нет?! думаю 10-25к будет достаточно (понятно дело, все надо тюнить, но на порядок точно будет больше, чем «определялка я тут»)

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

Ну не, как по мне, это выглядит хуже, чем 3.5v вместо 3.3. И у тебя по одной линии шина будет запитываться через 1.5К, а по другой - через 10К, там фронта сигналов вообще разные будут. Понятно, что USB не вполне как диффпара работает, но всё же.

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

а, подожди, это я тупой и не так посмотрел. Тогда ок, вероятно. Хм.

izzholtik ★★★
()

Планирую осваивать USB на Миландр (там USB такое же), лучше наверное МК с аппаратным USB. Пока читаю книгу от Mindshare чтобы прочистить знания по USB как таковому

Мысль: взять аппаратный USB и МК с таковым. Сразу получаем 12 мегабит а не low speed, даже если надо всего 100 килобит

I-Love-Microsoft ★★★★★
()
Последнее исправление: I-Love-Microsoft (всего исправлений: 2)
Ответ на: комментарий от I-Love-Microsoft

лучше наверное МК с аппаратным USB

не наверное, а однозначно лучше!

та-же самая, Arduino Pro Micro

ATMega32u4

прямо находка для любителей :о)

p.s. но тут мы обсуджаем «доработку интерфейса» для «обычных» контроллеров :о)

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

драйверов под 10-ку.

на форуме про linux ... (простите за кривой почерк, свалился под стол...)

sunjob ★★★★
() автор топика

Cи я изучал немного, но потом меня на фронт забрали и больше уже не подходил к нему …

Владимир 123

anonymous
()

Философский вопрос. Даже риторический, потому что я вижу что алекватного ответа не получу.

Зачем улучшать фуфло на букву Г если 2010 год закончился 11 лет назад? Нормальные контроллеры чем не угодили, что понадобилось это овно откапывать в 2021 году?

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

больше уже не подходил к нему …

ну и че, он все так же стоИт? ...

p.s. вы бы ему хоть стульчик предложили бы?!

sunjob ★★★★
() автор топика

Очевидно, идея изначальной схемы, чтобы всё работало на дешёвых МК с минимумом обвязки (не по стандарту, но в 99% случаев пользователь ничего не заметит). А если всё делать по стандарту, то проще взять МК с аппатным USB. Скорее всего выйдет дешевле даже, чем доп. детали покупать и монтировать.

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

бинго!

адекватный коммент! но рассматривается «тупая схема» и ее доработка :о)

что бы рекомендовали на замену преобразователя лог. уровней?

спасибо

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

Читай между строк, для linux есть восклицательный знак. Как бы с интересом почитал, но реально из недостатков отсутствие драйвера, устройства рабочие, по крайней мере для домашнего пользования.

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

дак нету у вас там восклицательных знаков... вот и не прочитал :о)

ну а реализация действительно интересная :о) немного корявинькая, но для себя вполне ...

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

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

sunjob ★★★★
() автор топика

Третий вариант со стабилитронами. Сколько раз собирал, по данной принципиальной схеме HID low-speed устройства, ни разу не сталкивался (хотя не отрицаю, что такое возможно), чтобы оно не завелось или отвалилось. Кварц 12 или 16 МГц, а лучше 18 (если кристалл позволяет). Точно так же устроены все китайские копеечные программаторы а-ля USBasp.

Прямо сейчас по такой же схеме работают часы/индикатор температуры CPU (и прочих данных) подключенный к домашнему мини-серверу, который выключался последний раз более полугода назад. Кстати, используется ATmega8L - прекрасно работает на 16 МГц (по сути в «эльках» тот же кристалл не прошедший «тест качества»).

При большой длине провода и возможных высокочастотных наводках можно параллельно D+/D- ставить по кондеру на 100пф (лучше, конечно, разъем USB прям на плате, если возможно).

Как по мне, ничего там дорабатывать не нужно - схема и так прекрасно работает (проверено на десятках, если не сотне, устройств). Сталкивался с кривым кодом, когда прерывание устанавливают с приоритетом выше, чем внешнее прерывание для нужд V-USB. Естественно, тогда устройство отваливается или вообще не подключается. В остальных случаях (лично у меня), всё заводилось с первой попытки.

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

Еще, вместо R3 на 1,5K лучше использовать на 2,2К и желательно поставить один на 4,7К в качестве делителя напряжения. Иначе, будет перекос по току на «холостом ходе». Может ухудшиться стабильность работы при длинных проводах. В том же китайском USBasp стоит на 2,2К.

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

Делитель даст напряжении около 3,4В. Без этого у тебя откроется стабилитрон D1. Таким образом, D2 будет не нагружен, а через D1 течет ток. Получается перекос, ухудшается стабильность.

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

вы сами какой кварц использовали?!

p.s. вопрос к тому, что 18 и 20МГц - в притирочку (с учетом очень вероятного «ухода в минус» от 5В, отсюда и «вытяжка» питания :о)

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

Обычно 12 и 16, может один или два раза на 18. Разницы не заметил. У меня не получалось так чтобы с v-usb устройство не работало. Может, конечно, как-то зависит от железа хоста и где-то может не завестись. Но я не сталкивался с подобным. На мини-сервере на 16 кварц + ATmega8L (другой тогда не нашлось под рукой) - полгода беспрерывной работы. Другие устройства обычно так долго не использовались, но чтобы не подключалось с первого раза такого тоже не случалось.

Stack77
()

Только мега8 - ван лав!

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

Я написал «лучше 18», потому что в теории v-usb с этой частотой по реализации должен гораздо стабильнее работать. Устройства которые делал: программаторы, разные датчики, обмен/запись данных, менеджер паролей, джойстики, клавиатуры, etc - все хорошо работали c кварцем на 12 или 16. Была как-то ситуация, что девайс то ли не хотел подключаться, то ли отваливался (и я, действительно, грешил на железо, долго не мог понять в чем проблема) не помню уже точно, но потом выяснилось, что все дело в криво написанном коде.

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

Ну сколько уже можно лохматить этот кактус с его

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

когда в 2021 на рынке полно МК с полноценным аппаратным USB, причем стоимостью < 1/3 от упомянутой атмеги? Если нет AVR/Arduino головного мозга, конечно.

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

тебе нарисовать как на оу дифпару свести? полный гугл примеров таких приемников. с передатчиком все куда интересней, берем транзюки не совсем ширпотребные используем ненасыщенный режим (пара диодов к транзистору спасут отца советской демократии)

время проца как раз освободится не надо будет туда сюда переконфигурировать ноги

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

тебе нарисовать...

как доработать код тоже нарисуешь?! или на словах :о) уж извини, что на ТЫ... сам начал :о)))

зю про дифпару в курсе, в код/спецификакцию зарываться нет времени ... и желания :о)

sunjob ★★★★
() автор топика
Последнее исправление: sunjob (всего исправлений: 6)
Ответ на: тебе нарисовать... от sunjob

ну если не собирался лезть в код, тогда зачем вопросы про как доработать, то что в доработке не нуждается, задачу дешман юсб уже выполнили :)

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

Ну сколько уже можно лохматить этот кактус

абсолютно с Вами согласен, Вам разрешается лохматить Всё, что Вам пожелается, Все что под руку попадется...

Если нет AVR/Arduino головного мозга, конечно.

надеюсь, у Вас тоже нет мозга... точнее, мандарины ... головного мозга...

спасибо что заглянули к нам и высказались! Вам уже полегчало?! :о)

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

смотрели «криминальное чтиво», помните там момент про плакат и склад мертвых негров?!!!

где в топике написано, что, де, мы тут дорабатываем код библиотеки?!

ух звиняйте, что ваш ответ не стыкуется с вопросом :о)

p.s. давайте вашу зачетку... попытка засчитана :о) спасибо

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

Накинь еще отсутствие подписанных драйверов под 10-ку.

Драйвера ж не под преобразователь уровней пишутся, а под дескрипторы. То есть никто вам не мешает прикинуться, скажем, майкрософтовской клавиатурой и пользоваться существующими дровами. Для HID какие-то особые дрова вообще не нужны.

А для чего-то посложнее наступают проблемы со стандартом: low-speed устройствам запрещено пользоваться bulk и isochronous конечными точками, то есть ни usb-cdc, ни usb-msd делать нельзя.

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

Третий вариант со стабилитронами. Сколько раз собирал, по данной принципиальной схеме HID low-speed устройства, ни разу не сталкивался (хотя не отрицаю, что такое возможно), чтобы оно не завелось или отвалилось

Поддерживаю! Если без разницы напряжение питания, лучше стабилитроны, если нужно именно 3.3 В, то придется стабилизатор ставить. Ни разу с этим проблем не было.

Сталкивался с кривым кодом, когда прерывание устанавливают с приоритетом выше, чем внешнее прерывание для нужд V-USB.

Но ведь у AVR нет приоритета прерываний. Наверное, имелось в виду что говнокод слишком долго держит прерывания заблокированными. Например, висит в другом прерывании.

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

Но ведь у AVR нет приоритета прерываний. Наверное, имелось в виду что говнокод слишком долго держит прерывания заблокированными. Например, висит в другом прерывании.

Подразумевал, что USB повесили на INT1, а на INT0 что-то крутилось (конечно тут не только программная проблема, некорректно выразился). По таблице векторов INT0 имеет более высокий приоритет (т.е. отложенные прерывания будут выполнятся первыми), чем INT1. По той конкретной проблеме, возможно, я и путаю. Может, просто, долгий запрет на прерывания висел или какой-то ресурсоемкий код крутился. Где-то с github’а «стянул» проект, в чем конкретно «затык» был - трудно вспомнить, много времени прошло.

Stack77
()
Последнее исправление: Stack77 (всего исправлений: 2)
Ответ на: комментарий от Stack77

У USB довольно маленький запас между появлением прерывания и обработчиком. Первым байтом там идет синхронизация 0b01010100, из которой можно пропустить половину. пол-байта на скорости 1.5 Мб/с это 2,7 мкс, то есть 32 - 53 такта.

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

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

пол-байта на скорости 1.5 Мб/с это 2,7 мкс

Такой скорости с v-usb нереально достичь. В принципе, достаточно нескольких миллисекунд для стабильной работы, просто скорость будет очень низкой. Тот же программатор для прошивки FLASH 24/25 серии собирал - скорость килобит 50-100 максимум. V-USB он для обмена очень небольшими данными.

Но, например, множество одновременных прерываний на INT0 и INT1 (где приоритет будет отдан INT0, а USB на INT1) или масса отложенных прерываний могут сыграть плохую роль. По крайней мере теоретически, в чем там у меня «затык» тогда был, действительно, не помню.

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

Stack77
()
Последнее исправление: Stack77 (всего исправлений: 4)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.