Программирование AVR: работа с USB userial - мост USBI2C/SPI/GPIO/ADC на микроконтроллере AT90USB647 Fri, March 29 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

userial - мост USBI2C/SPI/GPIO/ADC на микроконтроллере AT90USB647 Печать
Добавил(а) microsin   

userial - открытый, свободный проект для выполнения моста USB <--> I2C/SPI/GPIO с применением микроконтроллера Atmel AT90USB647. Программное обеспечение и описание железа опубликовано под открытой (Open Source) лицензией.

userial_v1.0.jpg

Поддерживаются интерфейсы:

1 x интерфейс USB (виртуальный COM-порт)
1 x интерфейс JTAG
1 x I2C (TWI)
1 x SPI
8 x цифровых портов ввода/вывода (General purpose digital I/O, GPIO)
4 x аналого-цифровых преобразователя (АЦП, ADC)

userial-SCH.png userial-board.png

Плата связывается с компьютером с использованием класса CDC (USB communications device class), который создает на компьютере виртуальный COM-порт. Поэтому userial не требует установки драйверов или специальных библиотек. Интерфейс управления основывается на ASCII, и его очень просто использовать через программу-терминал (обычный терминальный клиент SecureCRT, putty, HyperTerminal, TerraTerm и т. д.).Таким образом, получение результатов может быть очень простым и быстрым. Конфигурирование устройств происходит также быстро и прозрачно для пользователя.

Схемы, документация и программное обеспечение доступны для свободного скачивания (см. ссылки). Программное обеспечение (firmware) поставляется под лицензией MIT, а железо (hardware) поставляется под лицензией Creative Commons Attribution-Share Alike 3.0 Unported License.

Программное обеспечение также портировано на чип AT90USB162 (проект Bumble-B), и может быть записано в макетную плату AVR-USB162 (см. ссылки). При этом не доступен ADC, так как микроконтроллер AT90USB162 лишен цифро-аналогового преобразователя.

[Чем программировать - USB bootloader Atmel, Flip DFU]

В микроконтроллер прошито заводское программное обеспечение (bootloader, называемое также DFU - Device Firmware Uploader или Device Firmware Upgrade), позволяющее загрузить программу пользователя в память микроконтроллера через интерфейс USB и запустить её на выполнение. Это позволяет писать и отлаживать программы, не имея вообще никакого отладчика и программатора. Конечно, не те удобства, что предоставляет аппаратный отладчик JTAGICE-mkII, но зато дешево и сердито, затраты для быстрого старта минимальные. Программа и технология, предоставляющая такие возможности, называется Flip (FLexible In-system Programmer), программа бесплатна и доступна для скачивания на сайте atmel.com. Подробная документация, как все это делается, также доступна, правда на английском языке.

После заливки firmware с помощью загрузчика Flip DFU сам загрузчик не стирается, поэтому Вы можете перепрошивать макетную плату через USB практически неограниченное количество раз. Это очень удобно использовать для обновления программного обеспечения в приборах, где используется макетная плата, потому что ISP-программатор оказывается не нужен. Для повторного запуска бутлоадера служит перемычка HWB JP4.

Прошивку-bootloader, записанную на фабрике Atmel (она обеспечивает работу Flip), нельзя считать ISP-программатором, поскольку она защищена lock-битами. Для того, чтобы можно было воспользоваться ISP-программатором или debugWIRE-отладчиком, чип придется стереть, что полностью уничтожит Flip-bootloader. Но особо печалиться по этому поводу не стОит, так как на сайте atmel.com доступен для свободного скачивания бинарник bootloader-a (его можно бесплатно скачать на сайте Atmel), и его всегда можно восстановить. Как я понял, использование Flip исключает применение для отладки обычного ISP-программатора и отладчика debugWIRE, и наоборот.

AT90USB162fuses.JPG AT90USB162lockbits.JPG

[Установка драйвера Flip, запись firmware userial]

Для того, чтобы записать прошивку (firmware) в плату userial, понадобится специальное программное обеспечение Atmel - программа Flip. Эту программу можно легко найти на сайте Atmel, свободно скачать и установить (программа Flip бесплатна). Эта программа позволяет записывать почти все чипы Atmel, имеющие интерфейс USB (кстати, и не только USB, но и CAN, и RS232, но нас сейчас это не интересует) через простое подключение шнуром USB к компьютеру. Для этого достаточно иметь программу Flip и установленный драйвер USB для Вашей платы с программируемым чипом (в нашем случае это плата userial, на которой стоит чип AT90USB647). Программирование через USB возможно, так как в большинство чипов Atmel с аппаратным интерфейсом USB еще на заводе прошит bootloader USB Flip (DFU). Сейчас мы как раз и рассмотрим нехитрый процесс установки программы Flip и драйвера для bootloader USB Flip. Пошаговый процесс описан ниже во врезке (много букв и картинок).

1. Скачайте и установите программу Flip. Последнюю версию можно легко найти на сайте Atmel, воспользовавшись поиском по слову Flip. Можете воспользоваться ссылкой [3]. В результате на компьютере появится папка с программой (например, C:\Program Files\Atmel\Flip 3.3.2\), а по кнопке Start будут доступны ярлыки для запуска. Если запустить программу через ярлык (например "Flip 3.3.2"), то получится что-то наподобие этого:

userial-flip-installed001.PNG

Теперь можно подключить плату userial к компьютеру по USB, и установить драйвер USB Flip.

2. При первом подключении только что собранной, непрошитой платы userial к компьютеру загорится на плате userial зеленый светодиод PWRLED,и система Windows обнаружит новое устройство USB bootloader-а Flip. Если это произошло, значит Ваша плата userial аппаратно исправна и собрана правильно (см. скриншоты).

userial-flip-driver-install001.PNG userial-flip-driver-install002.PNG userial-flip-driver-install004.PNG

Теперь нужно установить драйвер. На первый вопрос Мастера установки драйвера отвечаем, что не нужно в этот раз подключаться к Windows Update для поиска драйвера:

userial-flip-driver-install005.PNG

Указываем, что драйвер будет лежать в специально указанной папке:

userial-flip-driver-install006.PNG

Кнопкой Browse указываем папку usb в каталоге, куда установлена программа Flip:

userial-flip-driver-install007.PNG

Далее снова жмем Next и начинается установка драйвера:

userial-flip-driver-install008.PNG

В процессе установки может получиться так, что у Вас уже установлена на компьютере библиотека libusb, тогда Мастер запросит Вас - перезаписывать ли уже имеющиеся в каталоге драйверов Windows файлы? Если не знаете, что отвечать, можно нажать на кнопку Yes (файлы будут перезаписаны новыми версиями, как в моем примере):

userial-flip-driver-install009.PNG

И, наконец, процедура установки успешно завершится:

userial-flip-driver-install010.PNG

userial-flip-driver-install011.PNG

userial-flip-driver-install012.PNG

3.Теперь можно прошить плату прошивкой userial. Это совсем просто. Скачиваем прошивку (см. ссылки [1]). Скомпилированная прошивка на кварц 16 МГц находится в файле userial\userial-firmware-v1.9\userial.hex. Запускаем программу Flip, в меню выбираем тип программируемого устройства (Device -> Select...):

userial-upload-firmware001.PNG

Из списка выбираем чип AT90USB647:

userial-upload-firmware002.PNG

Выбираем тип подключения Settings -> Communication -> USB:

userial-upload-firmware003.PNG

Для подключения к плате userial жмем кнопку Open:

userial-upload-firmware004.PNG

В результате программа подключится через USB к бутлоадеру в чипе AT90USB647, и на экране отобразится информация о программируемом устройстве (тип чипа, размер доступной для записи памяти, сигнатура чипа и проч.):

userial-upload-firmware005.PNG

Укажем файл прошивки userial.hex, который будем загружать через меню File -> Load HEX File...:

userial-upload-firmware006.PNG

userial-upload-firmware007.PNG

Останется нажать на кнопку Run, и начнется процесс записи чипа. Сначала стирание (стоит галка Erase), потом запись прошивки userial.hex в память flash чипа AT90USB647 (стоит галка Program), а затем будет произведена проверка того, что записалось (стоит галка Verify). Итак, жмем кнопку Run:

userial-upload-firmware008.PNG

После окончания процесса нажмем на кнопку Start Application, и запустится firmware userial в чипе AT90USB647. При этом на плате userial один за другим загорятся желтые светодиоды - сначала LED1 (он слева на фото), а затем LED2 (он справа на фото). Windows обнаружит новое устройство, и запросит драйвер.

userial1_0-IMG_0941.JPG

userial-upload-firmware009.PNG

Драйвер userial - это просто информационный файл виртуального COM-порта userial.inf, который находится в папке userial-firmware-v1.9 архива по ссылке [1] (там же, где и прошивка userial.hex). На скриншотах проиллюстрирована процедура инсталляции драйвера.

userial-upload-firmware010.PNG

userial-upload-firmware011.PNG

userial-upload-firmware012.PNG

Может случиться так, что обнаружится несколько inf-файлов, подходящих для платы userial. В этом случае выбираем именно наш файл userial.inf:

userial-upload-firmware013.PNG

В ответ на предупреждение о том, что драйвер не прошел тест на совместимость с Windows XP, нажимаем кнопку Continue Anyway (установить все равно):

userial-upload-firmware014.PNG

userial-upload-firmware015.PNG

userial-upload-firmware016.PNG

После непродолжительной процедуры установки в системе появится новый виртуальный COM-порт (в моем примере COM15):

userial-upload-firmware017.PNG

userial-upload-firmware018.PNG

Плата userial готова к работе.

После того, как программа firmware прошита, драйвер COM-порта, который эмулирует плата userial, будет установлен после переподключения (сброса) платы. Теперь осталось проверить, как работает интерфейс команд userial. Для этого нужно подключиться к появившемуся COM-порту (в моем примере COM15) любым терминальным клиентом. Мне больше всего нравится в этом качестве программа SecureCRT. Параметры подключения - стандартные.

userial-connect-terminal001.PNG

После подключения можно вводить команды. Например, чтобы прочитать напряжение со входа канала 0 аналого-цифрового преобразователя (ADC), нужно ввести команду AV0 и нажать Enter, в результате получим:

userial-connect-terminal002.PNG

Полный список команд userial приведен в руководстве пользователя userial, см. [4].

[Ссылки]

1. 100909userial-bumble-B.zip - схемы (формат Eagle), документация и программное обеспечение userial и Bumble-B.
2. Макетная плата AVR-USB162.
3. FLIP Programmer site:atmel.com - программа Atmel, с помощью которой Вы можете прошить плату через USB без программатора (используется USB DFU Bootloader, встроенный в микросхему AT90USB647). По этой же ссылке доступно для закачки firmware бутлоадеров DFU Flip. Старая версия Flip 3.3.2 здесь: AvrFlip.rar.
4. Userial USB to I2C/SPI/GPIO Bridge User Manual site:tty1.net - руководство пользователя userial.

 

Комментарии  

 
0 #11 Максим 27.10.2011 16:18
Интересует userial - мост USBI2C/SPI/GPIO/ADC на микроконтроллер е AT90USB647, возникло несколько вопросов. Сначала обрисую задачу: есть устройство, взаимодействующ ее с
окружающим миром по i2c шине, необходимо скормить ему несколько команд. Пример команды в HEX:
S 36 04 00 00 00 00 P

Здесь:
"S" и "P" - старт, стоп
36 - байт адрес
04 - байт суб адрес
00 00 00 00 - 4 байта данные.

Нужно также обеспечить частоту 100 КГц шины i2c. Есть также вопросы:
1. Какая рабочая частота I2C моста userial?
2. Какое ПО с ним работает? Простые портовые терминалы вряд ли устроят...

У нас была попытка реализовать передачу по средствам этой поделки:
http://nauchebe.net/2010/09/adapter-i2s-som-port-kompyutera/#more-11346

Однако это ПО способно передать только 3 байта данных, и частота, задаваемая в настройках COM-порта, не совсем то что надо... Учитывая все вышеизложенное - возможно решить задачу по средствам предлагаемого Вами моста userial? Прошу по возможности ответить подробнее.

microsin: по умолчанию с userial работает ЛЮБОЕ ПО, которое понимает, что такое COM-порт. Если такие программы почему-то Вас не устраивают, Вы можете написать собственное ПО, так как работать с COM-портом для программиста довольно легко. Подробнее, чем рассказано в доке на userial (раздел [Ссылки], см. ссылку 4) - я ни за что не расскажу, потому что у меня все равно другой информации нет, только оригинальная дока. Могу сказать одно - проект userail полностью открыт - и исходный код, и схема, и печатная плата, и документация на userial, и даташит на применяемый чип AT90USB647 - все в свободном доступе. Поэтому, если Вас вдруг что-то не устраивает, то Вы можете допилить это неустраивающее под свои нужды. Например, доделать firmware так, чтобы частота работы I2C была строго как Вам надо, 100 кГц, не меньше и не больше.

Поэтому изучите даташит на чип AT90USB647, доку userial, изучите его исходный код, изучите Ваше техзадание и Ваши возможности. Тогда станет ясно, пригодится Вам userial, или не пригодится. Извините, если ничем не помог, я наверное еще бОльший чайник, чем Вы.
Цитировать
 
 
-1 #10 newstep 02.05.2011 13:39
У меня программатор STK200. Прошивальщик avrdude. Попытался им считать flash, ничего не получилось - получил файл нулевой длины. Подумал, что это защита от копирования. Сделал chip erase и попробовал записать USB бутлоадер. Бутлоадер не записался. Соответственно Flip для записи уже использовать нельзя. Можете ли ли что нибудь посоветовать сделать?

microsin: напишите в почту (см. Контакты) - так проще общаться, и я не хотел бы загромождать статью комментариями.
Цитировать
 
 
0 #9 newstep 02.05.2011 01:44
1. В winavr 20100110 нет h файла с описанием регистров AT90USB647.
2. Чем можно программировать этот микроконтроллер ?

microsin:
1. В моем WinAVR версии 20080610 есть такой заголовок - iousb647.h, и наверняка он есть и у Вас, так как мой WinAVR старее Вашего. Имейте в виду, что этот заголовочный файл нельзя напрямую включать оператором include, а только через диспетчер заголовков avrio.h.
2. Запрограммирова ть AT90USB647 можно легко всеми возможными стандартными средствами, начиная с бутлоадера DFU/Flip, см. даташит на микроконтроллер .
Цитировать
 
 
0 #8 Lexa 19.03.2011 22:40
АЦП: при вводе команд AV0, AV1, AV2, AV3 всё исправно показывает. А вот при вводе после AV4 пишет что "E: invalid channel". В даташите на at90usb647 выводы АЦП с битами 4-7 заняты ещё Jtagом. Fuse jtage выключил. результат такой же. Получается там другие команды?

microsin: похоже на искусственное программное ограничение. Посмотрите, может в документации на userial что-то есть по Вашему вопросу, я не знаю ответ. Если не найдете, то смотрите исходники userial.
Цитировать
 
 
0 #7 фед 07.03.2011 13:54
Я их ранее программировал, по этому не знаю их заводское состояние. Подскажите пожалуйста какие биты должны быть запрограммирова ны, а какие нет... Заранее благодарен.

microsin: заводское состояние я Вам только что указал. Если надо состояние битов по их именам, то откройте даташит на чип AT90USB647, там все подробно разжевано. Здесь больше на Ваши комментарии отвечать не буду, пишите на почту.
Цитировать
 
 
0 #6 фед 07.03.2011 12:20
Подскажите пожалуйста, как должны быть запрограммирова ны FUSES?

microsin: фьюзы никак не должны быть запрограммирова ны, их трогать не надо, у них должно быть заводское состояние по умолчанию - 0x5E LOW FUSE BYTE, 0x9B HIGH FUSE BYTE, 0xF3 EXTENDED FUSE BYTE.
Цитировать
 
 
0 #5 DD 14.01.2011 21:17
Здравствуйте. Да, к сожалению, я перепутал D- и D+! :oops:
ПК обнаружил устройство, драйвер установлен. Я прошил устройство прошивкой userial.hex, и нажал "Start Application", - но ПК ничего не нашел.! :sad:
У меня кварц на 12 МГц (к сожалению, на 16 у меня нет, и в магазине тоже нет!). Подскажите пожалуйста: в папке userial-firmware-v1.9 - есть исходники? если да, то с помощью какой программы можно открыть их и откомпилировать проект под 12 МГц?

microsin: не уверен, что можно поменять настройки интерфейса USB под кварц 12 МГц - изучите предварительно даташит на чип AT90USB647. Компилировать исходники из папки userial-firmware-v1.9 нужно с помощью утилит make и gcc (входят в пакет WinAVR).
Цитировать
 
 
0 #4 DD 08.01.2011 16:24
Только что всё прошил. - не работает! ПК определяет как "USB Device", "Неизвестное устройство" :sad: :cry:

microsin: либо драйвер не подсунули, либо ножки микроконтроллер а USB D+ и D- перепутали.
Цитировать
 
 
0 #3 DD 08.01.2011 15:12
Простите. Я нашел на сайте Atmel только файл с расширением .a90 - если это он (series6-use_bootloader_ api-2_0_1.a90), то как прошить чип, у меня программатор AVR910 и программирует только .hex, .bin, .rom.

microsin: не прощу. Файл с расширением .a90 обычно и есть hex - откройте этот файл и посмотрите, что внутри. А вообще-то Вы похоже не тот файл скачали. Нужно было скачать другой файл, 64X-usb-boot-1-0-0.a90. Процесс по шагим:
1. Вбиваете в Google название чипа AT90USB647, и по первой же ссылке попадаете на сайт Atmel с описанием чипа.
2. На странице с описанием чипа ищите AT90USB64x USB Bootloader v1.0.0, там указана ссылка для закачки - http://www.atmel.com/dyn/resources/prod_documents/64X-usb-boot-1-0-0.zip.
3. Закачиваете, распаковываете. В архиве лежит один-единственный файл 64X-usb-boot-1-0-0.a90, это и есть бинарник бутлоадера (в формате HEX), который надо прошить Вашим любимым программатором. Если не можете подсунуть программатору файл с расшиоением .a90, просто переименуйте расширение на .hex - и прошейте.

Как альтернативу можно использовать также бутлоадер LUFA, он доступен в двух вариантах - DFU и CDC. Бенефит этих бутлоадеров в том, что на них есть исходники, поэтому их можно коцать и калечить как угодно в свое удовольствие.
Цитировать
 
 
0 #2 DD 02.01.2011 19:58
Здравствуйте. У меня есть AT90USB647 (ранее программировал через программатор, но после того, как прочитал эту статью - МК стёр, fuse BOOTRST=0, HWBE=0) - подключил 2 кнопки (RESET и HWB) и на "землю". Подключаю к USB, нажимаю RESET и держу (1-3 сек.), HWB, потом отпускаю RESET, после HWB. В результате у меня компьютер определяет устройство как: "USB Device", "Неизвестное устройство" и всё! Пожалуйста помогите, может быть я что-то забыл или не так делаю.

microsin: убедитесь, что у Вас в AT90USB647 цел USB-бутлоадер. Для этого перепрошейте его с помощью Вашего программатора. Бинарник бутлоадера для чипа AT90USB647 можно найти на сайте Atmel. Далее действуйте, как написано в статье. После процедуры инициализации бутлоадера установите для него драйвер, и затем используйте вместе с программой Flip. В принципе, если у Вас есть программатор, то бутлоадер Вам не нужен, хотя его использование может оказаться удобным в случае отсутствия под рукой программатора.
Цитировать
 

Добавить комментарий


Защитный код
Обновить

Top of Page