Связь с компом (USB) на ATMEGAxxUx (AT90USBxxx)
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Связь с компом (USB) на ATMEGAxxUx (AT90USBxxx)
В общем, из ДШ (ATmega16_32U4) не очень понятны возможности этого МК в плане USB — что конкретно может периферия, что придётся прописывать в коде.
Наверное, ещё накладывает отпечаток что я только начал курить USB.
Ну вот, например: изначально у устройства нулевой адрес, затем хост присваивает устройству адрес. Так? Вот это придётся делать в программе, или он аппаратно сменится?
Наверное, ещё накладывает отпечаток что я только начал курить USB.
Ну вот, например: изначально у устройства нулевой адрес, затем хост присваивает устройству адрес. Так? Вот это придётся делать в программе, или он аппаратно сменится?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: Связь с компом (USB) на ATMEGAxxUx (AT90USBxxx)
Gudd-Head писал(а):Ну вот, например: изначально у устройства нулевой адрес, затем хост присваивает устройству адрес. Так? Вот это придётся делать в программе, или он аппаратно сменится?
В программе.
Но это все от тебя изолирует фреймворк. Раньше родной атмеловский был гавенный, рулила LUFA. последний атмеловский ASF, если судить по тому, что там для avr32 сделали, тоже имеет шанс на жизнь.
Если классически пользовать все тот же USB CDC, то для тебя, на пальцах говоря, будет только калбек "мы уже готовы работать" и три фунции "послать", "еситьчо?" и "принять".
Re: Связь с компом (USB) на ATMEGAxxUx (AT90USBxxx)
Вот пример я клал download/file.php?id=114337
там как раз At90usb162, LUFA, CDC класс.
там вроде все понятно. LUFA я для инита и сетап-сообщений только использую. Для скорости в CDC-ные ендпойнты непосредственно в регистры фигачу.
Все сообщения по CDC классу игнорирую, кроме брейка. Брейк использую для синхронизации.
там только косяк в виндовой части есть.
надо
sprintf(comname, "COM%d", comportnumber);
поменять на
sprintf(comname, "\\\\.\\COM%d", comportnumber);
или на портах выше 4 работать не будет.
там как раз 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)
Эээ... На АСМе этим вообще никто не заморачивается?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: Связь с компом (USB) на ATMEGAxxUx (AT90USBxxx)
Gudd-Head писал(а):Эээ... На АСМе этим вообще никто не заморачивается?
Ну можешь попробовать, если время дофигища и стоит копейки
Редко кому сейчас надо решить задачу столь неэффективно во ВСЕХ смыслах. полкилобайта-килобайт флеша так хочется съэкономить ?
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Связь с компом (USB) на ATMEGAxxUx (AT90USBxxx)
Satyr писал(а):полкилобайта-килобайт флеша так хочется съэкономить ?
Нет, конечно.
Если классически пользовать все тот же USB CDC, то для тебя, на пальцах говоря, будет только калбек "мы уже готовы работать" и три фунции "послать", "еситьчо?" и "принять".
Вот это уже интересней. Но, честно говоря, я ещё не знаю какой мне следует использовать тип USB-устройства. Задача — сбрасывать массив информации из памяти устройства на комп.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: Связь с компом (USB) на ATMEGAxxUx (AT90USBxxx)
Gudd-Head писал(а):Satyr писал(а):полкилобайта-килобайт флеша так хочется съэкономить ?
Нет, конечно.
Так сделай как я - инит, который кроме пары микросекунд на старте, вобще НИКАК на производительно не влияет в неизменном виде.
А передачу, которая критична к скорости, непосредственно тырканьем 3-4 регистров руками. По вкусу, можно на асме. Хотя если красиво написать на Си, после компилера будет тоже самое, что и на асме -)))
Вот это уже интересней. Но, честно говоря, я ещё не знаю какой мне следует использовать тип USB-устройства. Задача — сбрасывать массив информации из памяти устройства на комп.
Какого объема порций, как часто, критичная ли задержка и т.д. и т.п. ?
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Связь с компом (USB) на ATMEGAxxUx (AT90USBxxx)
Satyr писал(а):Так сделай как я - инит, который кроме пары микросекунд на старте, вобще НИКАК на производительно не влияет в неизменном виде.
Это если использовать фрэймворк? Где его взять?
Какого объема порций, как часто, критичная ли задержка и т.д. и т.п. ?
Требования минимальные: пару килобайт передать один раз. Задержка некритична.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: Связь с компом (USB) на ATMEGAxxUx (AT90USBxxx)
Gudd-Head писал(а):Требования минимальные: пару килобайт передать один раз. Задержка некритична.
CDC шустра, инициатор посыла может быть и девайс, но свой девайс среди ком портов найти вобщем то нет способа. Т.е. конфигурация вручную.
Можно HID сделать. Там возможен непосредсвтенный и точный поиск именно своего девайса, но теоретическое ограничение скорости 64kb/s. Только ручной опрос девайса с компа.
Оба ставятся под штатный ОСовый драйвер
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Связь с компом (USB) на ATMEGAxxUx (AT90USBxxx)
Satyr писал(а):Только ручной опрос девайса с компа.
Это надо будет в программе нажать кнопку "Получить данные"?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: Связь с компом (USB) на ATMEGAxxUx (AT90USBxxx)
Gudd-Head писал(а):Это надо будет в программе нажать кнопку "Получить данные"?
можно поставить таймер, который сам будет жать кнопку
Вобщем если задержка с получением данных порядка пары сотен миллисекунд не критична, получать надо, на пальцах, менее ~10кб/c, то целесообразнее сделать HID.
Сливаешь это http://www.fourwalledcubicle.com/LUFA.php
смотришь пример generic HID device
Только внимание - для коммерческого применения не бесплатно. Но там неограниченная лицензия за дешево.
Последний раз редактировалось Satyr Пт окт 26, 2012 11:29:28, всего редактировалось 3 раза.
Re: Связь с компом (USB) на ATMEGAxxUx (AT90USBxxx)
есть еще интересные классы RNDIS и CCID 
- zhelezyaka
- Родился
- Сообщения: 13
- Зарегистрирован: Ср май 25, 2011 14:26:54
Re: Связь с компом (USB) на ATMEGAxxUx (AT90USBxxx)
А чем они интересные?
CCID - Smart Card Class(Usbccid.sys) - mini-class driver to manage USB smart card readers
CCID - Smart Card Class(Usbccid.sys) - mini-class driver to manage USB smart card readers
Re: Связь с компом (USB) на ATMEGAxxUx (AT90USBxxx)
интересные неограниченной ничем, кроме интерфейса, скоростью и 'плаг-энд-плейностью'
Один при минимальной обвязке открывается по имени устройства, а дальше что угодно туда-сюда гоняется виндовой SCardTransmit ()
при втором у тебя в компе новая сетевая карта вылезает. можешь в девайсе хоть целую сеть изображать и по IP общаться.
Один при минимальной обвязке открывается по имени устройства, а дальше что угодно туда-сюда гоняется виндовой SCardTransmit ()
при втором у тебя в компе новая сетевая карта вылезает. можешь в девайсе хоть целую сеть изображать и по IP общаться.
Re: Связь с компом (USB) на ATMEGAxxUx (AT90USBxxx)
Здравствуйте, на AT90USB162 собрал пример GenericHID из библиотеки LUFA. Мне нужно каждую секунду кидать в сторону компа 1 байт информации, и от компа 12 байт. Понять не могу почему но почему-то данные идут касячно. Для проверки я от контроллера кидаю число от 0 до 255, причем при каждой последующей передаче это число увеличиваю на единицу. На комп мне приходят к примеру вот такое:
...
123
124
126
127
...
из чего я делаю вывод что не всегда МК успевает передать по USB. Подскажите прав ли я?
Попробовал еще из библиотеки LUFA собрать пример SerialPort, при подключении ПК нашел его, установил дрова, но в терминалке вообще ничего не приходит
...
123
124
126
127
...
из чего я делаю вывод что не всегда МК успевает передать по USB. Подскажите прав ли я?
Попробовал еще из библиотеки LUFA собрать пример SerialPort, при подключении ПК нашел его, установил дрова, но в терминалке вообще ничего не приходит
Re: Связь с компом (USB) на ATMEGAxxUx (AT90USBxxx)
перед тем как новое в буфер положить, проверяешь вообще, ушло ли старое ? -))
Да, лучше посл. порт пользуй.
У HID ограничение 64kb/s при фуллспиде. И считывание считай только поллингом из программы на PC
У CDC-COM таких ограничений нет и работать приятней и проще через выделенные ендпойнты
Да, лучше посл. порт пользуй.
У HID ограничение 64kb/s при фуллспиде. И считывание считай только поллингом из программы на PC
У CDC-COM таких ограничений нет и работать приятней и проще через выделенные ендпойнты
Re: Связь с компом (USB) на ATMEGAxxUx (AT90USBxxx)
Пасибо за ответ.
вообще никак не проверяю)) там специальные регистры смотреть надо?
что значит " поллингом "?
Satyr писал(а):перед тем как новое в буфер положить, проверяешь вообще, ушло ли старое ? -))
вообще никак не проверяю)) там специальные регистры смотреть надо?
Satyr писал(а):И считывание считай только поллингом из программы на PC
что значит " поллингом "?
Re: Связь с компом (USB) на ATMEGAxxUx (AT90USBxxx)
Alex2014 писал(а):Пасибо за ответ.Satyr писал(а):перед тем как новое в буфер положить, проверяешь вообще, ушло ли старое ? -))
вообще никак не проверяю)) там специальные регистры смотреть надо?
Естественно смотреть надо. Через АПИ, которое, естественно, вдеет к регистрам -))
Satyr писал(а):И считывание считай только поллингом из программы на PC
что значит " поллингом "?
Опрос PCшной программой. 'Сами' данные из девайса в приемный буфер контроллера, считай, не заскочат.
Re: Связь с компом (USB) на ATMEGAxxUx (AT90USBxxx)
У меня реализованы конечные точки типа Interrupt, у них стоит параметр частоты опроса 1милисек. Т.е. на сколько я понял ПК каждую милисекунду опрашивает МК на наличие данных. В программе на ПК у меня приходят данные от МК и, если пришли данные которые говорят что ошибок нет, то в ответ я посылаю контроллеру порцию данных. И такая конетель постоянно должна быть. Потом посмотрю в даташите что там за регистры.
Но сейчас решил попробовать вариант CDC устройства. Видел вы выше кидали
но при открытии документа пишет что не найдены некоторые файлы, при нажатии Build пишет нет makefile
Но сейчас решил попробовать вариант CDC устройства. Видел вы выше кидали
Satyr писал(а):Вот пример я клал download/file.php?id=114337
но при открытии документа пишет что не найдены некоторые файлы, при нажатии Build пишет нет makefile
Re: Связь с компом (USB) на ATMEGAxxUx (AT90USBxxx)
нужна библиотека LUFA
а вобще рекомендую бросить ковыряться с этим ископаемым гавном, что лет 5 как устарело и взять чтото из нынеживущего.
Хоть те же популярные на форуме stm32f или, если так хочется атмела, atsam3/4. есть и в корпусе для пайки на кухне, как at90usb82/162
интеррапт в хиде, если правильно помню, дает кидаться только коротенькими фиксированной длины репортами
а вобще рекомендую бросить ковыряться с этим ископаемым гавном, что лет 5 как устарело и взять чтото из нынеживущего.
Хоть те же популярные на форуме stm32f или, если так хочется атмела, atsam3/4. есть и в корпусе для пайки на кухне, как at90usb82/162
интеррапт в хиде, если правильно помню, дает кидаться только коротенькими фиксированной длины репортами