11.05.2022г. ВНИМАНИЕ! Если у вас не отображаются иллюстрации к статьям, для просмотра сайта используйте TOR браузер

ATmega8: прошивка загрузчика Arduino через Arduino IDE, знакомство c AVRDUDE

разделы: AVR , Arduino , Программаторы , дата: 3 марта 2014г.

Идея использовать младшее семейство AVR ATtiny для мелких проектов вместо Arduino — логична и красива, но приходиться учитывать реальное положение вещей. И если посмотреть цены на ebay.com, то получится, что ATmega8 будет лучше и дешевле многих ATtinyXX. Если вы не завод, и не имеете возможность закупаться оптом непосредственно у производителя, то для многих проектов будет проще использовать ATmega8 нежели изгаляться с программной эмуляцией TWI/I2C, UART и пр..

В качестве теории. На ATmega8 работал Arduino NG(next generation). Т.о. скетчи Arduino должны быть полностью совместимы с ATmega8. Вооружившись этим знанием попробуем что-нибудь прошить.

Распиновку и соответсвие выводам Arduino можно посмотреть здесь: http://arduino.cc/en/Hacking/PinMapping

Так же как в предыдущем посте соберите схему подцепив на 19-й пин микросхемы (digital pin 13 Arduino) резистор со сетодиодом. Должно получиться как-то так:



    В Arduino IDE меню-> сервис выберете опции:
  • Плата -> Arduino NG or older w/ ATmega8
  • Программатор -> Arduino as ISP

Далее откройте из примеров скетч "Blink". Здесь нужно будет исправить sleep(1000) на sleep(100). Профайл платы NG подразумевает работу с 16 Мгц резонатором, а у нас микроконтроллер работает от втроенного резонатора на 1 МГц, т.е. в 16 раз медленее.

Залейте скетч в микроконтроллер. Диод должен сразу начать мигать. У меня в перый раз прошивка прошла без единого варнинга, а потом начало выкидывать предупреждение:



что означает, что прошивка прошла успешна, но проверка закончилась ошибкой. Хотя у меня микроконтролер успешно прошивался и работал с таким варнингом, ситуация не хорошая. Вообще, если говорить об ошибках, то самое страшное, что можно получить на данном этапе это наверное:

1) контроллер не отвечает:

avrdude: AVR device not responding
avrdude: initialization failed, rc=-1

2) неверный тип микроконтроллера:

Раз речь пошла об ошибках и косяках пошивки, думаю настало время познакомиться с avrdude, утилитой c помощью которой Arduino IDE шьет микроконтроллеры.

В Arduino IDE: меню -> настройки отметье галочкой чекбокс: "показывать подробный вывод при загрузке" и загрузите скетч в микроконтроллер еще раз. Если Arduino IDE запущен был из командной строки, то в консоли должен появиться длинный лог, где нас будет интересовать первая строка:

/opt/arduino/hardware/tools/avrdude -C/opt/arduino/hardware/tools/avrdude.conf -v -v -v -v -patmega8 -carduino -P/dev/ttyUSB0 -b19200 -D -Uflash:w:/tmp/build4429286683533029884.tmp/Blink.cpp.hex:i
    где:
  • -С --конфигурационный файл
  • -p --модель микроконтроллера
  • -с --модель программатора
  • -P --порт
  • -b --скорость порта
  • -U --операции с памятью

Часто при ошибках выводится сообщение c предложеним запустить avrdude с опцией -F.

use -F to override this check

НИКОГДА не делайте этого! Если есть ошибка, постарайтесь разобраться в проблеме. Иначе можно заблокировать чип.

Наиболее интересная опция для нас "-U", операции с памятью. Формат опции: тип_памяти:операция:файл:формат_файла

для начала, можно попробовать считать прошивку микроконтроллера:

-U flash:r:my.hex:i
    где:
  • r - чтение прошивки
  • i - формат файла прошивки Intel

введите в консоли команду:

/opt/arduino/hardware/tools/avrdude -C/opt/arduino/hardware/tools/avrdude.conf -v  -patmega8 -carduino -P/dev/ttyUSB0 -b19200  -U flash:r:my.hex:i

на выходе будем иметь лог:

/opt/arduino/hardware/tools/avrdude -C/opt/arduino/hardware/tools/avrdude.conf -v  -patmega8 -carduino -P/dev/ttyUSB0 -b19200  -U flash:r:my.hex:i

avrdude: Version 5.11, compiled on Sep  9 2011 at 16:00:41
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2009 Joerg Wunsch

         System wide configuration file is "/opt/arduino/hardware/tools/avrdude.conf"
         User configuration file is "/home/flanker/.avrduderc"
         User configuration file does not exist or is not a regular file, skipping

         Using Port                    : /dev/ttyUSB0
         Using Programmer              : arduino
         Overriding Baud Rate          : 19200
         AVR Part                      : ATMEGA8
         Chip Erase delay              : 10000 us
         PAGEL                         : PD7
         BS2                           : PC2
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom         4    20   128    0 no        512    4      0  9000  9000 0xff 0xff
           flash         33    10    64    0 yes      8192   64    128  4500  4500 0xff 0x00
           lfuse          0     0     0    0 no          1    0      0  2000  2000 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  2000  2000 0x00 0x00
           lock           0     0     0    0 no          1    0      0  2000  2000 0x00 0x00
           calibration    0     0     0    0 no          4    0      0     0     0 0x00 0x00
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

         Programmer Type : Arduino
         Description     : Arduino
         Hardware Version: 2
         Firmware Version: 1.18
         Topcard         : Unknown
         Vtarget         : 0.0 V
         Varef           : 0.0 V
         Oscillator      : Off
         SCK period      : 0.1 us

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x1e9307
avrdude: safemode: lfuse reads as DF
avrdude: safemode: hfuse reads as CA
avrdude: reading flash memory:

Reading | ################################################## | 100% 7.43s

avrdude: writing output file "my.hex"

avrdude: safemode: lfuse reads as DF
avrdude: safemode: hfuse reads as CA
avrdude: safemode: Fuses OK

avrdude done.  Thank you.

Итак, получив, в итоге, сообщение об успешном завершении: "avrdude done. Thank you", мы получаем файл с копией прошивки микроконтроллера. Пара слов о фьюзах. Это биты конфигурации микроконтроллера. Если запись фьюзов пройдет с ошибкой, микроконтроллер скорее всего заблокируется. Если сконфигурировать их неправильно, микроконтроллер скорее всего тоже заблокируется. Пока не будем их трогать, но есть одна возможность. Часта микроконтроллера по умолчанию 1МГц. Можно переключить его на работу внешним резонатором прошив загрузчик arduino. Меню -> Сервис -> Записать загрузчик.

Загрузчик состоит из flash-прошивки и фьюз-битов конфигурации, которые предусматривают работу от внешнего резонатора. Т.е. прошивая загрузчик, мы конфигурируем микроконтроллер на работу с внешним резонатором. Ну, а что касается самого загрузчика, то он потом затрется новой прошивкой, фьюзы останутся.



Перед прошивкой загрузчика, установите резонатор с частотой 1-16 МГц на 9 и 10 pin микросхемы. Там еще "по уму" должны быть керамические конденсаторы, но работать будет и без них. Для проверки сойдет. Схема:



После прошивки частоту можно будет менять заменой кварца. Так же у меня пропал варнинг при проверке после прошивки: "verification error". В целом, микроконтроллер с кварцом работает стабильнее.