Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: USB + новичек.
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Интерфейсы
av-master
Доброго времени суток товарищи.

Вопрос такого плана. как работать с USB/
т.е где почитать просам принцип.

воткнули разьем. что должно происходить?

т.е. что меня спросит хост? или что мне ему сказать?

в какой момент времени...?

нужно ли постоянно просматривать буфер или по прерыванию работает?

вообщем азы.

вот с как с ком портом например: воткнул передал. забыл ))
Если кому не трудно. опишите процесс. заранее благодарен.
rezident
Лучше RTFM в оригинале. Без сказок и пересказов. Брать там -> www.usb.org
aaarrr
Добавалю только, что когда-то давно работа с USB была хорошо и доходчиво расписана в доках на контроллеры фирмы Cypress. Можно начать с них, а затем плавно перейти к изучению родной документации.
av-master
спасибо . а на русском нигде ничего?
aaarrr
На русском разве что довольно сомнительной полезности книжка Агурова.
Xenia
Хуже, чем описание работы USB, ничего на свете нету smile.gif. Купила обе книги Агурова - "Интерфейс USB" и "Практика программирования USB", пыталась это читать. Но разве это читать можно? smile.gif Жуть сплошная. Чем дальше читаешь, тем непонятнее становиться smile.gif. А когда дошла до описания протоколов и форматов структур, мне и вовсе поплохело smile.gif.

Поэтому я пошла другим путем, близким к тому, что рекомендовал здесь aaarrr - взяла документацию на свой "родной" AT90USB647 (это МК архитектуры AVR со встроенным USB) и принялась разбираться в демонстрационной программе USB-COM конвертора, попутно разбираясь в назначениях USB-регистров по даташиту. Через некоторое время я сократила эту программу от всего того, что мне не было нужно (например от HOST-режима, обслуживания других задач и пр.), оставив три функции: 1) инициализацию USB, т.е. те действия, которые необходимо провести всего однажды, чтобы USB заработало. 2) функцию отправления байта по USB (тут на самом деле они сначала кладутся в буфер, а отправляются группой) и 3) функцию, которая вызывается по прерыванию, когда по USB приходит передача. Вообще-то ничего кроме этого мне не было нужно. Помимо этих необходимых мне функций пришлось оставить механизм обработки USB-прерываний, в котором приходится отвечать на всякие каверзные запросы хоста, т.к. без этого с моим USB-устройством никто бы не захотел разговаривать.

В процессе такого разбирательства мне неоднократно приходилось обращаться к книге Агурова "Практика программирования USB", но лишь затем, чтобы выяснить назначения тех или иных констант, записанных в структурах, которые передаются в ответ на запросы. Т.е. тут я уже дошла до того, что некоторые поля подправила под себя - увеличила длину буфера на передачу, убрала "лишнюю" endpoint, запросила больше тока питания, придумала своему устройству красивое имя и т.п.

После всего этого сотворила двойную (или уже тройную?) буферизацию, организовав кольцевой буфер размером 256 байт в памяти, откуда данные отсылаются по USB-прерываниям. Тут дело в том, что USB мне нужно, чтобы отсылать данные от "говорливых" АЦП. И здесь у меня нет времени, чтобы ждать, когда USB отправит данные. А я просто кидаю байты в свой буфер, не заботясь об их отправке, а "голодные" прерывания от USB сами черпают из буфера, если там еще что-то неотправленное осталось. После этого моя программа перестала быть понятной другим smile.gif, зато оставалась понятна мне.

И вот, странное дело! - Открываю я снова книги Агурова, читаю и вдруг обнаруживаю, что всё (или почти всё) мне в ней стало понятно smile.gif. Такова участь большинства инструкций, которые обладают хитрой особенностью сохранять непонятность тогда, когда мы остро нуждаемся в понимании, и быть абсолютно ясными, когда понимание уже за плечами.
mustelus
Госпада, вот просвятите, есть куча примеров реализации USB на микроконтролеры PIC... Но все почемуто реализованы стандартным CDC класом и, используються как виртуальный COM на хосте....
Так вот вопрос: А ВСТРЕЧАЛ КТО В НЕТЕ ПРИМЕР НАСТОЯЩЕГО USB КАК USB (именно на PIC), так что б драйверок свой нужно было склепать на хост, свое приложенице (т.е. что б действительно ето был USB а ни чeрти какой COM)....
aaarrr
Просто отломайте от примера CDC-часть, в чем проблема?
manul78
Цитата(mustelus @ Nov 11 2009, 18:30) *
Так вот вопрос: А ВСТРЕЧАЛ КТО В НЕТЕ ПРИМЕР НАСТОЯЩЕГО USB КАК USB (именно на PIC), так что б драйверок свой нужно было склепать на хост, свое приложенице (т.е. что б действительно ето был USB а ни чeрти какой COM)....


А что свет клином сошелся именно на PIC ?

Берем AT90USB162 за 120 рупий. Берем даташит на атмеловский кит STK526 и на основе его схем "ваяем" более упрощен-
ную модель... Монтируем всё это хозяйство на "нулевке" . И можно начинать.
Прелесть атмеловских USB-контроллеров, что в них с завода зашит бутлоадер который позволяет программировать МК пря-
мо через USB. Бесплатная программа FLIP. Правда до фьюз не добраться, но на первых порах хватит.
Примеры + библиотеки с атмеловского сайта просты и понятны.
Т.е. за 200-300 рублей можно начинать изучать USB без особых заморочек. Кстати Агурова, как ни ругают, но почитать
тоже не помешает. smile.gif

P.S. Для начала рекомендую начать с HID, винда сама устройство определяет и драйвер стандартный. 60 кб/с для начала
вполне достаточно...
BrotherRabbit
Xenia, очень понравился твой методичный подход. Но расскажи поподробнее, как организован обмен данными со стороны хоста? Драйвер был тоже демонстрационный? А библиотеки какие использовала? smile.gif

У меня есть демо-firmware с HID устройством - мышью (макет для с8051 с usb фирмы SiLabs).
Пока без надобности выкидывать ничего из прошивки не стану, просто направлю необходимые данные в буфер "мыши".
Со стороны хоста-компа тогда нужно написать некое оконное приложение, выводящее данные, полученные от устройства.
У мыши тип передачи interrupt, но для небольших объемов данных ( с тех же АЦП) это вполне приемлемо.
Как сказал manul78, и драйвер стандартный, только бы научиться как его использовать. Ещё я нашел библиотеку libusb-win32..
Вообщем, приступаю к работе, надеясь на Вашу поддержку.
Student Pupkin
Цитата(av-master @ Oct 15 2009, 00:35) *
спасибо . а на русском нигде ничего?

USB in a NutShell - путеводитель по стандарту USB

off top: Аватар прикольный - работаете с PSoC Cypress? smile.gif
domowoj
Xenia молодец!

И свои пять копеек
esaulenka
Кстати.
Какие бы VID / PID подделать, чтобы WinXP (и WinVista / Win7 хорошо б) самостоятельно установила драйвера на стандартный CDC ?

Сейчас приходится пользователям ещё и inf - файл давать.

Вроде б и нет таких, но вот тут активно рекламируется прошивка, к которой драйвер уже готов.
http://microsin.ru/content/view/1178/44/
Попытка украсть оттуда идентификаторы VID_16C0/PID_05E1 результата не дала (вроде б и не надо больше ничего?..).
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.