Avrdude. Запись *.hex в микроконтроллеры Atmega

Наш телеграмм канал

Здравствуйте! Встала острая необходимость записать прошивку в МК atmega16. Программатор я буду использовать вот этот, программатор “Громова”.

А вообще программа avrdude может работать с очень многими программаторами. Список программаторов и контроллеров которые поддерживает программа avrdude, а так же инструкция по использованию программы можно скачать тут. Так как мои постоянные читатели знают что я перешёл на ос linux то и решение мне нужно искать именно для linux. Ну как вы уже поняли об этом решении я и напишу. В этой статье я расскажу о всех шагах которые необходимо вам сделать для достижения результата. И так начинаем без лишних отступлений.

Для начала установите следующие дистрибутивы:

Ниже привожу все опции программы по порядку:

  • -p <partno> – является обязательной опцией, здесь мы в качестве <partno> указываем краткий псевдоним AVR микроконтроллера;
  • -b <baudrate> – позволяет переопределить указанную для программатора в конфигурации программы скорость подключения по интерфейсу RS-232;
  • -B <bitclock> – указываем Bit Clock Period для интерфейса отладки JTAG или ISP Clock (только для JTAG ICE). Значение <bitclock> указывается в микросекундах, для JTAG ICE по умолчанию оно установлено в 1 микросекунду и подходит для МК работающих на частотах 4МГц и выше;
  • -C <config-file> – в качестве <config-file> указываем полный путь к файлу конфигурации с необходимыми нам настройками программы. По умолчанию используется файл /etc/avrdude.conf (Linux);
  • -c <programmer> – в качестве <programmer> указываем псевдоним используемого программатора, например “usbasp”.
  • -D – опция запрещает автоматическое стирание Flash-памяти. Автоматическое стирание не используется в микроконтроллерах семейства ATxmega;
  • -i <delay> – установка паузы перед каждой отправкой каждого бита для bitbang-программаторов. В качестве <delay> указывается значение в микросекундах. Это бывает необходимо если для программирования используется компьютер с очень быстрым процессором или же микроконтроллер с низкой тактовой частотой (32КГц, 128КГц), позволяет соблюдать условие: частота ISP < 1/4 частоты процессора;
  • -P <port> – в качестве значения <port> указываем используемый программатором порт. По умолчанию используются /dev/ppi0 (параллельный порт) и /dev/cuaa0 (последовательный порт) в зависимости от программатора;
  • -F – опция для отключения проверки сигнатуры микроконтроллера. По умолчанию перед программированием avrdude проверяет сигнатуру микроконтроллера, которая в некоторых случаях может быть повреждена, при этом микроконтроллер может продолжать нормально функционировать;
  • -e – стирает содержимое FLASH и EEPROM памяти (заполнение значениями 0xFF), очищаются fuse-bits (биты защиты). Исключением являются микроконтроллеры семейства ATxmega в которых используется постраничная запись;
  • -O – опция для калибровки RC-генератора в соответствии с примечанием AVR053 от Atmel. Поддерживается только на программаторах STK500v2, AVRISP mkII, и JTAG ICE mkII. Результат будет сохранен в EEPROM памяти в ячейке с адресом 0;
  • -U <memtype>:r|w|v:<filename>[:format] – комплексная опция для указания производимой с памятью операции (чтение. запись, проверка);
  • -n – запрет на запись в микроконтроллер, используется для отладки avrdude;
  • -V – отключение автоматической проверки записанной информации;
  • -u – отключить режим безопасной (safe mode) проверки и сопоставления ячеек конфигурации (fuse bits) до и по завершению программирования. Данная опция необходима если нужно изменить значения фьюзов (fuse bits), в противном случае avrdude в качестве меры безопасности изменит их значения на те которые были прочитаны перед программированием;
  • -s – запрет вывода запросов в безопасном режиме при работе с фьюзами;
  • -t – переводит avrdude в режим терминала (terminal mode);
  • -E <exitspec>[,<exitspec>] – изменение состояния линий параллельного порта после программирования на указанные в аргументах опции. По умолчанию устанавливаются те состояния линий что были до начала работы;
  • -x <extended_param> – позволяет указать дополнительный специальный параметр для используемого программатора;
  • -y – опция что включает сохранение количества стираний МК в последних 4-х байтах памяти EEPROM;
  • -Y <number> – указанное значение <number> будет сохранено в качестве числа циклов-стираний микроконтроллера в памяти EEPROM;
  • -v – расширенный вывод информации о работе программы (verbose);
  • -q – отключает отображение полоски прогресса при операциях с микроконтроллером. Для еще большого уменьшения отображаемой информации опцию следует указать дважды;
  • -l <logfile> – перенаправление всего вывода для отладки в указанный файл, где <logfile> – полный путь к файлу для сохранения данных;
  • ? – отображение справки.

Настройка программатора Громова (COM-порт) в Linux

Первым делом нужно добавить программатор Громова с его идентификатором и настройками в конфигурацию программы avrdude. Для этого я немного подправил конфигурационный файл “avrdude.conf” который находится по этому пути /etc/avrdude.conf Скорее всего вы не сможете сохранить файл из-за отсутствующих прав доступа. Для добавления вашего пользователя в группу root необходимо выполнить вот такую команду:

вместо “user” впишите своего пользователя. А вообще тему групп и пользователей я описал вот по этой ссылке. Продолжаем настройку программы. Нам необходимо открыть файл avrdude.conf:

Вносим в этот файл вот этот код:

примерно в это место:

Выходим из редактора и сохраняем файл (CTL+X и Y).

Для корректной работы программатора Громова в ОС Linux нужно предварительно сконфигурировать последовательный порт (Serial Port, RS-232 Port), поскольку на данный момент при запуске программа avrdude сама не производит конфигурации порта. Если при записи прошивки в МК avrdude выводит сообщение о проблеме с верификацией то очень вероятно что нужно произвести реконфигурацию COM-порта: Для выполнения конфигурации воспользуемся программой stty. Gодробные параметры работы которой хорошо расписаны в MAN-страничке.

Для вывода на экран текущих настроек порта /dev/ttyS0 (первый COM-порт) выполним команду:

А теперь выполним конфигурацию порта командой:

Примечание: примите к вниманию что если у вас в компьютере несколько COM-портов то путь к файлу порта /dev/ttyS0 нужно изменить в соответствии с номером используемого порта, например /dev/ttyS2 – это третий COM-порт.

После выполнения команды конфигурации полезно посмотреть изменилась ли конфигурация порта и как, для этого нужно выполнить предыдущую команду.

Содержимое вывода команды должно быть примерно вот в таком виде:

Настройки, которые мы задали командой, действуют до перезагрузки ОС. Команду для конфигурации порта можно добавить в автозагрузку вашей операционной системы Linux или же запускать один раз перед работой с программой avrdude.

Тестирование и работа с программаторами

После выполнения приведенных выше подготовок все готово к работе, приступим к тестированию нашей связки программатор + микроконтроллер.

Первым делом давайте проверим все ли правильно связано и сможет ли программа avrdude “увидеть” микроконтроллер, никакой записи и изменений вносить в AVR чип мы не будем, только тест.

Если все подключено и настроено как нужно то то вывод программы будет выглядеть вот таким образом:

Для получения более подробной информации о подключенном микроконтроллере можно добавить к команде ключ “-v”.

А теперь давайте считаем прошивку и фьюзы микроконтроллера что хранится во Flash-памяти и сохраним ее в файл.

После выполнения команды во временной директории /tmp должен появиться файл m16chip_flash_dump.hex что будет содержать данные из флешь-памяти микроконтроллера. там же будут лежать два файла с фьзами.

Ниже представлены команды для записи:

результат выполнения комманды будет примерно таким:

На этом всё. В написании данной статьи были использованы данные вот с этих сайтов. За что им огромная благодарность!

1) ссылка 1

2) ссылка 2

3) ссылка 3

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