AVR-USB-MEGA16: USB bootloader USBasp для микроконтроллера ATmega32
Добавил(а) microsin
В статье описывается USB bootloader USBasp, который хорошо подходит для ATmega32. Он удобен тем, что эмулирует поведение популярного программатора USBasp, и для него подходят программы под этот программатор.
Этот бутлоадер я записываю во все макетные платы AVR-USB-MEGA16, оснащенные микроконтроллерами ATmega32, благодаря чему пользователь получает возможность заливать свою программу прямо через подключение по USB, и не нужен никакой дополнительный программатор. Внимание - USBasp bootloader не умеет работать с фьюзами (fuses) и EEPROM, несмотря на то, что в сервисных программах, обслуживающих USBasp (например, Khazama AVR Programmer) такая возможность имеется.
Значения фьюзов по умолчанию, которые прошиты в платы с usbasploader - LOW FUSE BYTE: 0xCF, HIGH FUSE BYTE: 0x98, LOCKOPT BYTE: 0xEF.
[Как встроить в Ваш проект usbasploader]
Процесс подробно описан в статье на Хабре, статья называется "USB bootloader для микроконтроллеров AVR" и находится в разделе "DIY или Сделай Сам". Воспользуйтесь поиском и легко её найдете. Исходники можете скачать по ссылке в этой статье (см. Ссылки [4]). Само собой, загрузчик USBasp легко встраивается и в другие чипы ATmega, объем секции bootloader у которых равен или превышает 4096 байт (например, в ATmega128).
Процесс встраивания заключается в записи firmware бутлоадера в соответствующую секцию памяти и правильной установке фьюзов. Внимание: в макетную плату AVR-USB-MEGA16 уже встроен бутлоадер USBasp (и уже правильно настроены фьюзы микроконтроллера), поэтому записывать бутлоадер туда не надо.
[Как работать с загрузчиком usbasploader на примере макетной платы AVR-USB-MEGA16 и Khazama AVR Programmer]
Для работы с бутлоадером USBasp подходит множество программ (см. Ссылки [3]), но мне больше всего по душе программа Khazama AVR Programmer [10].
Внимание! При первом подключении платы с бутлоадером к компьютеру по USB операционная система Windows запросит драйвер программатора USBasp (для Linux драйвер не нужен). Драйвер можно взять в архиве по ссылке [4] (папка USBasp архива), или скачать с сайта автора программатора USBasp, см. ссылку [6]. Также драйвер есть в папке, в которую установлена программа Khazama.
Итак, процесс по шагам - как залить свою прошивку firmware (пользовательскую программу) в макетную плату AVR-USB-MEGA16, используя бутлоадер USBasp.
1. Поставьте перемычку между ножками 4 и 6 коннектора U1 ISP.
Рис. 1. Положение перемычки, которая активирует запуск загрузчика USBasm макетной платы AVR-USB-MEGA16.
2. Подключите макетную плату к компьютеру по USB. На макетной плате загорится красный светодиод, и в системе Windows обнаружится программатор USBasp. Если Вы подключили в таком режиме макетную плату в первый раз, то Windows обнаружит новое устройство USBasp и запросит для него драйвер. Драйвер для Windows см. по ссылке [6], скачайте архив с драйвером, распакуйте во временную папку и предложите мастеру оборудования взять драйвер их этой папки. Также драйвер есть в папке, в которую установлена программа Khazama. После успешной установки драйвера у Вас в системе появится новое устройство - Atmel USB Devices -> USBasp (можно увидеть в Диспетчере Устройств).
3. Запустите программу Khazama AVR Programmer. В настройках уберите опцию очистки памяти кристалла (Command -> Program Options -> снимите галку Erase Chip). Это нужно для того, чтобы Khazama не конфликтовала с упрощенным протоколом загрузчика USBasp. Примерный вид опций показан на скриншоте:
Рис. 2. Опции программы Khazama.
Выберите из выпадающего списка Ваш чип. Загрузите hex-файл прошивки (через меню File -> Load FLASH file to Buffer). Нажмите большую кнопку Auto Program, запускающую программирование. Программируется кристалл очень быстро, за несколько секунд.
Рис. 3. Процесс перепрошивки памяти FLASH загрузчиком USBasp.
После завершения программирования выведется примерно такое сообщение:
Рис. 4. Сообщение об успешном окончании программирования памяти FLASH.
Светодиод на плате погаснет, и сразу начнет выполняться Ваша программа с адреса 0 (которую Вы только что записали).
4. Снимите перемычку между ножками 4 и 6 коннектора U1 ISP.
Рис. 5. Рабочее состояние платы - перемычка снята, при подаче питания загрузчик сразу запустит программу пользователя.
Очень похоже работает другой бутлоадер - BootloadHID (см. Ссылки [5]). Отличается тем, что просто нужна другая сервисная программа на компьютере, но зато легче встраивается в младшие чипы (начиная с ATmega8), т. к. снижены требования к размеру bootloader-секции.
[Правила работы с бутлоадером USBasp]
1. Не забывайте устанавливать и снимать перемычку активизации бутлоадера. 2. Применяйте для программирования утилиту Khazama версии 1.6.2 (см. [3, 10]). 3. Применяйте драйвер USBasp, максимально подходящий к Вашей операционной системе (см. [6]). 4. Не пытайтесь программировать фьюзы и EEPROM - бутлоадер USBasp этого не умеет. Для программирования фьюзов используйте внешний программатор ISP. Однако будьте осторожны - если неправильно установите фьюзы, то бутлоадер может перестать работать. 5. Не пытайтесь перезаписать бутлоадером самого себя - это может привести к непредсказуемым результатам.
1. Программа Khazama не видит стройство USB загрузчика. Если устройство USB бутлоадера нормально определяется в системе Windows (видно в Диспетчере Устройств как устройство USBasp), но отказывается работать с USB устройством USBasp (could not find USB device "USBasp" with vid=0x16c0 pid=0x5dc), то скорее всего у Вас не установлена библиотека libusb или не установлен драйвер USBasp. Сообщение системы выглядит примерно так:
Подобное сообщение в среде Arduino IDE:
Драйвер USBasp можно скачать по ссылке [6], ищите заголовок Drivers и ссылку на файл наподобие usbasp-windriver.2011-05-28.zip. Библиотеку libusb можно скачать по ссылке [7]. Качайте и устанавливайте самый свежий релиз библиотеки libusb.
2. Ошибка 'could not find SSB device "USBasp" with vid=0x16c0 pid=0x5dc', которая появляется после программирования платы через загрузчик USBasp.
На самом деле это не ошибка - плата нормально запрограммировалась через загрузчик. Причина этого сообщения в том, что в настройках Program Options программы Khazama стоят лишние галочки (Verify Flash, Verify Eeeprom и т. п.). Поэтому программа Khazama пытается обратиться к программатору после завершения программирования - устройство USBasp больше не присутствует в системе (бутлоадер завершил работу и передал управление в код пользователя), это и служит причиной "ошибки".
Снимите лишние галочки в диалоге Program Options, как это показано на рис. 2, и ошибка исчезнет.
[Ссылки]
1. Загрузчики (bootloader) для микроконтроллеров AVR. 2. USBaspLoader USB boot loader for AVR microcontrollers site:obdev.at - домашняя страничка usbasploader. 3. Программы для работы с программатором USBasp — AVRDUDE site:download.savannah.gnu.org, BASCOM-AVR site:mcselec.com, Khazama AVR Programmer site:khazama.com, eXtreme Burner-AVR site:extremeelectronics.co.in. 4. 100705usbasploader.zip - мой вариант usbasploader, заточенный под макетную плату AVR-USB-MEGA16 с микроконтроллером ATmega32 (проект для AVR Studio с исходниками и скомпилированными вариантами для кварцев 12 МГц, 16 МГц). Именно его я и записываю в макетные платы AVR-USB-MEGA16 с микроконтроллером ATmega32. 5. AVR-USB-MEGA16: USB bootloader BootloadHID для микроконтроллера ATmega16. 6. USBasp - USB programmer for Atmel AVR controllers site:fischl.de - сайт программатора USBasp (там можно скачать драйвер для USBasp под операционную систему Windows). 7. libusb-win32 site:sourceforge.net - ссылки на закачку релизов библиотеки libusb. 8. Как отключить проверку цифровой подписи драйвера в Windows 7 site:winitpro.ru. 9. Как самостоятельно подписать драйвер для Windows 7 site:winitpro.ru. 10. 141122Khazama162.zip - утилита Khazama162, драйвер программатора USBasp для Windows XP, Windows Vista, Windows 7, Windows 8, прошивки загрузчика USBasp для различных микроконтроллеров.
А если устройство видит, но не опознает, драйвер подсунуть никак не получается? Схему сам паял.
microsin: накосячили где-то. Очень много мест, где можно накосячить, так что точно нельзя сказать, что у Вас. Просто кратко перечислю самые частые причины:
1. Прошивка скомпилирована не на тот кварц, или не на тот процессор. 2. Неправильно стоят фьюзы. 3. Ошибка в схеме - она либо вообще неработоспособна, либо не подходит под скомпилированную прошивку. 4. Проблема с кварцевым резонатором.
См. также вот это: http://microsin.net/programming/avr-working-with-usb/v-usb-troubleshooting.html .
Что можно сделать - это последовательно исключать одну возможную причину ошибки за другой возможной причиной. Тупо и методично. В результате все заработает. Поверьте, у меня поначалу тоже были проблемы на каждом шагу. Это совершенно нормально.
С перемычкой 4-6 устройство видится как USBasp (pid_05DC) Шью Khazama'ой файл main.hex из примеров. Результат: 1) светодиод гаснет, что нормально 2) системное сообщение "USB устройство не опознано" 3) Error ... sending controll message failed... Присоединенное к системе устройство не работает. и > FLASH verify MISMACH. После снятия перемычки и переподключения устройство не опознается.
microsin: устройство у Вас не опознается потому, что Вы записываете в память чипа нерабочую прошивку (скорее всего не для той частоты кварца, которая у Вас). Если хотите, чтобы я отвечал на другие Ваши вопросы, то задавайте их не сюда, а в почту.
Загрузчик может прописывать фьюзы микроконтроллера?
microsin: однозначно не может. Технология самопрограммирования AVR этого не позволяет в принципе. Для изменения фьюзов нужен внешний программатор (ISP, JTAG, HVSP, HVPP).
При подключении к компу с перемкнутой 4 и 6 ножкой определяется как устройство USBasp, ищет драйвер и не находит. Скачал драйвер отсюда http://easyelectronics.ru/files/AVR/USBASP.ZIP. Установил. Но khazama AVR Programmer не читает фьюзы. То есть как бы начинает читать - и вылезает ошибка. Разная. То target doesn't answer. То устройство не опознаёт команду. То ещё чего... Светодиод гаснет. С чем это связано?
microsin: а кто Вам обещал чтение фьюзов?.. Статью, наверное, по диагонали читали?
Комментарии
microsin: накосячили где-то. Очень много мест, где можно накосячить, так что точно нельзя сказать, что у Вас. Просто кратко перечислю самые частые причины:
1. Прошивка скомпилирована не на тот кварц, или не на тот процессор.
2. Неправильно стоят фьюзы.
3. Ошибка в схеме - она либо вообще неработоспособн а, либо не подходит под скомпилированну ю прошивку.
4. Проблема с кварцевым резонатором.
См. также вот это: http://microsin.net/programming/avr-working-with-usb/v-usb-troubleshooting.html .
Что можно сделать - это последовательно исключать одну возможную причину ошибки за другой возможной причиной. Тупо и методично. В результате все заработает. Поверьте, у меня поначалу тоже были проблемы на каждом шагу. Это совершенно нормально.
Шью Khazama'ой файл main.hex из примеров. Результат:
1) светодиод гаснет, что нормально
2) системное сообщение "USB устройство не опознано"
3) Error ... sending controll message failed...
Присоединенное к системе устройство не работает. и > FLASH verify MISMACH. После снятия перемычки и переподключения устройство не опознается.
microsin: устройство у Вас не опознается потому, что Вы записываете в память чипа нерабочую прошивку (скорее всего не для той частоты кварца, которая у Вас). Если хотите, чтобы я отвечал на другие Ваши вопросы, то задавайте их не сюда, а в почту.
microsin: однозначно не может. Технология самопрограммиро вания AVR этого не позволяет в принципе. Для изменения фьюзов нужен внешний программатор (ISP, JTAG, HVSP, HVPP).
microsin: а кто Вам обещал чтение фьюзов?.. Статью, наверное, по диагонали читали?
RSS лента комментариев этой записи