Связь с компом (USB) на ATMEGAxxUx (AT90USBxxx)

Подключаем наши девайсы к компьютеру. Обсуждаются: порты, протоколы, драйвера, языки программирования и т.д.
Ответить
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Связь с компом (USB) на ATMEGAxxUx (AT90USBxxx)

Сообщение Gudd-Head »

В общем, из ДШ (ATmega16_32U4) не очень понятны возможности этого МК в плане USB — что конкретно может периферия, что придётся прописывать в коде.
Наверное, ещё накладывает отпечаток что я только начал курить USB.

Ну вот, например: изначально у устройства нулевой адрес, затем хост присваивает устройству адрес. Так? Вот это придётся делать в программе, или он аппаратно сменится?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: Связь с компом (USB) на ATMEGAxxUx (AT90USBxxx)

Сообщение Satyr »

Gudd-Head писал(а):Ну вот, например: изначально у устройства нулевой адрес, затем хост присваивает устройству адрес. Так? Вот это придётся делать в программе, или он аппаратно сменится?

В программе.
Но это все от тебя изолирует фреймворк. Раньше родной атмеловский был гавенный, рулила LUFA. последний атмеловский ASF, если судить по тому, что там для avr32 сделали, тоже имеет шанс на жизнь.

Если классически пользовать все тот же USB CDC, то для тебя, на пальцах говоря, будет только калбек "мы уже готовы работать" и три фунции "послать", "еситьчо?" и "принять".
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: Связь с компом (USB) на ATMEGAxxUx (AT90USBxxx)

Сообщение Satyr »

Вот пример я клал download/file.php?id=114337
там как раз At90usb162, LUFA, CDC класс.
там вроде все понятно. LUFA я для инита и сетап-сообщений только использую. Для скорости в CDC-ные ендпойнты непосредственно в регистры фигачу.
Все сообщения по CDC классу игнорирую, кроме брейка. Брейк использую для синхронизации.

там только косяк в виндовой части есть.
надо
sprintf(comname, "COM%d", comportnumber);
поменять на
sprintf(comname, "\\\\.\\COM%d", comportnumber);

или на портах выше 4 работать не будет.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Связь с компом (USB) на ATMEGAxxUx (AT90USBxxx)

Сообщение Gudd-Head »

Эээ... На АСМе этим вообще никто не заморачивается?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: Связь с компом (USB) на ATMEGAxxUx (AT90USBxxx)

Сообщение Satyr »

Gudd-Head писал(а):Эээ... На АСМе этим вообще никто не заморачивается?

Ну можешь попробовать, если время дофигища и стоит копейки :)))
Редко кому сейчас надо решить задачу столь неэффективно во ВСЕХ смыслах. полкилобайта-килобайт флеша так хочется съэкономить ?
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Связь с компом (USB) на ATMEGAxxUx (AT90USBxxx)

Сообщение Gudd-Head »

Satyr писал(а):полкилобайта-килобайт флеша так хочется съэкономить ?

Нет, конечно.
Если классически пользовать все тот же USB CDC, то для тебя, на пальцах говоря, будет только калбек "мы уже готовы работать" и три фунции "послать", "еситьчо?" и "принять".

Вот это уже интересней. Но, честно говоря, я ещё не знаю какой мне следует использовать тип USB-устройства. Задача — сбрасывать массив информации из памяти устройства на комп.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: Связь с компом (USB) на ATMEGAxxUx (AT90USBxxx)

Сообщение Satyr »

Gudd-Head писал(а):
Satyr писал(а):полкилобайта-килобайт флеша так хочется съэкономить ?

Нет, конечно.

Так сделай как я - инит, который кроме пары микросекунд на старте, вобще НИКАК на производительно не влияет в неизменном виде.
А передачу, которая критична к скорости, непосредственно тырканьем 3-4 регистров руками. По вкусу, можно на асме. Хотя если красиво написать на Си, после компилера будет тоже самое, что и на асме -)))

Вот это уже интересней. Но, честно говоря, я ещё не знаю какой мне следует использовать тип USB-устройства. Задача — сбрасывать массив информации из памяти устройства на комп.

Какого объема порций, как часто, критичная ли задержка и т.д. и т.п. ?
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Связь с компом (USB) на ATMEGAxxUx (AT90USBxxx)

Сообщение Gudd-Head »

Satyr писал(а):Так сделай как я - инит, который кроме пары микросекунд на старте, вобще НИКАК на производительно не влияет в неизменном виде.

Это если использовать фрэймворк? Где его взять?
Какого объема порций, как часто, критичная ли задержка и т.д. и т.п. ?

Требования минимальные: пару килобайт передать один раз. Задержка некритична.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: Связь с компом (USB) на ATMEGAxxUx (AT90USBxxx)

Сообщение Satyr »

Gudd-Head писал(а):Требования минимальные: пару килобайт передать один раз. Задержка некритична.

CDC шустра, инициатор посыла может быть и девайс, но свой девайс среди ком портов найти вобщем то нет способа. Т.е. конфигурация вручную.
Можно HID сделать. Там возможен непосредсвтенный и точный поиск именно своего девайса, но теоретическое ограничение скорости 64kb/s. Только ручной опрос девайса с компа.

Оба ставятся под штатный ОСовый драйвер
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Связь с компом (USB) на ATMEGAxxUx (AT90USBxxx)

Сообщение Gudd-Head »

Satyr писал(а):Только ручной опрос девайса с компа.

Это надо будет в программе нажать кнопку "Получить данные"?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: Связь с компом (USB) на ATMEGAxxUx (AT90USBxxx)

Сообщение Satyr »

Gudd-Head писал(а):Это надо будет в программе нажать кнопку "Получить данные"?

:)))
можно поставить таймер, который сам будет жать кнопку

Вобщем если задержка с получением данных порядка пары сотен миллисекунд не критична, получать надо, на пальцах, менее ~10кб/c, то целесообразнее сделать HID.

Сливаешь это http://www.fourwalledcubicle.com/LUFA.php
смотришь пример generic HID device

Только внимание - для коммерческого применения не бесплатно. Но там неограниченная лицензия за дешево.
Последний раз редактировалось Satyr Пт окт 26, 2012 11:29:28, всего редактировалось 3 раза.
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: Связь с компом (USB) на ATMEGAxxUx (AT90USBxxx)

Сообщение Satyr »

есть еще интересные классы RNDIS и CCID :idea:
Аватара пользователя
zhelezyaka
Родился
Сообщения: 13
Зарегистрирован: Ср май 25, 2011 14:26:54

Re: Связь с компом (USB) на ATMEGAxxUx (AT90USBxxx)

Сообщение zhelezyaka »

А чем они интересные?
CCID - Smart Card Class(Usbccid.sys) - mini-class driver to manage USB smart card readers
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: Связь с компом (USB) на ATMEGAxxUx (AT90USBxxx)

Сообщение Satyr »

интересные неограниченной ничем, кроме интерфейса, скоростью и 'плаг-энд-плейностью' :))
Один при минимальной обвязке открывается по имени устройства, а дальше что угодно туда-сюда гоняется виндовой SCardTransmit ()

при втором у тебя в компе новая сетевая карта вылезает. можешь в девайсе хоть целую сеть изображать и по IP общаться.
Alex2014
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Сб янв 11, 2014 17:13:19

Re: Связь с компом (USB) на ATMEGAxxUx (AT90USBxxx)

Сообщение Alex2014 »

Здравствуйте, на AT90USB162 собрал пример GenericHID из библиотеки LUFA. Мне нужно каждую секунду кидать в сторону компа 1 байт информации, и от компа 12 байт. Понять не могу почему но почему-то данные идут касячно. Для проверки я от контроллера кидаю число от 0 до 255, причем при каждой последующей передаче это число увеличиваю на единицу. На комп мне приходят к примеру вот такое:
...
123
124
126
127
...
из чего я делаю вывод что не всегда МК успевает передать по USB. Подскажите прав ли я?
Попробовал еще из библиотеки LUFA собрать пример SerialPort, при подключении ПК нашел его, установил дрова, но в терминалке вообще ничего не приходит
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: Связь с компом (USB) на ATMEGAxxUx (AT90USBxxx)

Сообщение Satyr »

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

У HID ограничение 64kb/s при фуллспиде. И считывание считай только поллингом из программы на PC

У CDC-COM таких ограничений нет и работать приятней и проще через выделенные ендпойнты
Alex2014
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Сб янв 11, 2014 17:13:19

Re: Связь с компом (USB) на ATMEGAxxUx (AT90USBxxx)

Сообщение Alex2014 »

Пасибо за ответ.
Satyr писал(а):перед тем как новое в буфер положить, проверяешь вообще, ушло ли старое ? -))

вообще никак не проверяю)) там специальные регистры смотреть надо?
Satyr писал(а):И считывание считай только поллингом из программы на PC

что значит " поллингом "?
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: Связь с компом (USB) на ATMEGAxxUx (AT90USBxxx)

Сообщение Satyr »

Alex2014 писал(а):Пасибо за ответ.
Satyr писал(а):перед тем как новое в буфер положить, проверяешь вообще, ушло ли старое ? -))

вообще никак не проверяю)) там специальные регистры смотреть надо?

Естественно смотреть надо. Через АПИ, которое, естественно, вдеет к регистрам -))

Satyr писал(а):И считывание считай только поллингом из программы на PC

что значит " поллингом "?

Опрос PCшной программой. 'Сами' данные из девайса в приемный буфер контроллера, считай, не заскочат.
Alex2014
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Сб янв 11, 2014 17:13:19

Re: Связь с компом (USB) на ATMEGAxxUx (AT90USBxxx)

Сообщение Alex2014 »

У меня реализованы конечные точки типа Interrupt, у них стоит параметр частоты опроса 1милисек. Т.е. на сколько я понял ПК каждую милисекунду опрашивает МК на наличие данных. В программе на ПК у меня приходят данные от МК и, если пришли данные которые говорят что ошибок нет, то в ответ я посылаю контроллеру порцию данных. И такая конетель постоянно должна быть. Потом посмотрю в даташите что там за регистры.
Но сейчас решил попробовать вариант CDC устройства. Видел вы выше кидали
Satyr писал(а):Вот пример я клал download/file.php?id=114337

но при открытии документа пишет что не найдены некоторые файлы, при нажатии Build пишет нет makefile
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: Связь с компом (USB) на ATMEGAxxUx (AT90USBxxx)

Сообщение Satyr »

нужна библиотека LUFA

а вобще рекомендую бросить ковыряться с этим ископаемым гавном, что лет 5 как устарело и взять чтото из нынеживущего.
Хоть те же популярные на форуме stm32f или, если так хочется атмела, atsam3/4. есть и в корпусе для пайки на кухне, как at90usb82/162

интеррапт в хиде, если правильно помню, дает кидаться только коротенькими фиксированной длины репортами
Ответить

Вернуться в «Интеграция с ПК»