Найти в Дзене
Электроника и жизнь

Копируем содержимое одного микроконтроллера AVR в память другого микроконтроллера

Оглавление

Здравствуйте, уважаемые читатели! Сегодня поговорим о том, как можно полностью скопировать прошивку одного микроконтроллера в другой . Я буду показывать пример на ATtiny13. Но данный пример будет актуален для других микроконтроллеров AVR. Для работы будет использоваться ISP программатор на базе Arduino UNO (Создаем удобный модуль для программирования микроконтроллеров ATtiny).

Копируем содержимое одного микроконтроллера AVR в память другого микроконтроллера
Копируем содержимое одного микроконтроллера AVR в память другого микроконтроллера

Подобная задача может возникнуть, если у нас нет исходного скетча, который загружен в микроконтроллер. Более того, кроме копирования скетча, который хранится во F lash памяти мы скопируем еще и данные, хранящиеся в EEPROM памяти микроконтроллера.

Возьмем 2 одинаковых микроконтроллера ATtiny13 . Один я отмечу красной изолентой, другой синей . Красный – это тот, с которого буду копировать, а синий тот, на который буду копировать.

-2

Второй (синий) микроконтроллер пуст, вернее в него загружен скетч BareMinimum (Файл – Примеры – Basic - BareMinimum ).

Копирование памяти микроконтроллера в HEX файл

Начнем с красного микроконтроллера. Вначале, запишем в его энергонезависимую память EEPROM значение, которое мы в дальнейшем тоже перекопируем на другой микроконтроллер. Подробно о том, что такое E EPROM память и как с ней работать я рассказывал в статье "Работа с внутренней и внешней EEPROM на микроконтроллерах семейства ATtiny".

Из примеров для ATtiny13 возьмем скетч eeprom _put и используем только одну строку, которая запишет в нулевой байт EEPROM памяти число 5. Это то количество миганий светодиода, которое будет осуществлять микроконтроллер после подачи на него питания. Потом он сделает паузу в 5 секунд и снова мигнет 5 раз.

-3

Т.е. сколько раз мигать светодиоду будет записано в EEPROM памяти. Соответственно, если информация в памяти будет отсутствовать, вернее будет записан 0, светодиод ни мигнет, ни разу. А будет просто гореть. Таким образом, скопировав только флэш-память, мы не получим полного функционала. Нам понадобится скопировать и EEPROM память.

После того, как осуществили запись в EEPROM память, запишем в память того же красного микроконтроллера скетч, который будет считывать данные из EEPROM памяти и мигать светодиодом, подключенным к 5 пину (PB0).

-4

Загружаем скетч в ATtiny13. Можно не вынимая из программатора установить светодиод (с припаянным резистором на 220 Ом). И видим, что он мигает 5 раз.

-5

Перейдем к решению задачи, как сделать полную копию записанной информации в памяти красного микроконтроллера и записать ее в память синего. Для этого я использую самописную утилиту, которая работает со стандартной программой для прошивки микроконтроллеров AVR avrdude. exe . Я уже использовал похожую утилиту для изменения фьюзов микроконтроллера - "Что такое фьюзы? Как работать с фьюзами на микроконтроллерах AVR".

Данная утилита представляет из себя обычный bat файл, который упрощает работу с файлом avrdude.exe . Эти же команды, можно вводить в командную строку, результат будет такой же.

-6

Как и в случае с изменение фьюзов, вначале выбираем микроконтроллер. У нас это ATtiny13. В дальнейшем в этот список я буду добавлять другие популярные микроконтроллеры. Далее выбираем COM порт, к которому у нас подключен программатор. В данном случае это COM3. И выбираем, что мы хотим сделать с подключенным микроконтроллером: прочитать данные F lash памяти, прочитать данные EEPROM памяти, прочитать всю память. Либо записать данные в микроконтроллер.

-7

Т.к. прежде, чем загрузить данные во второй микроконтроллер, нам нужно прочитать их из памяти первого и нам нужна информация и из флэш-памяти, где хранится наш скетч и из EEPROM памяти, где хранится настройка режима работы скетча, то выбираем пункт 3 .

В папке с программой создается 2 фала с расширением hex . Где в 16-ричном представлении хранится информация, записанная во F lash и EEPROM память. Файлы всегда имеют одинаковые имена и при следующем запуске опции чтения памяти они будут перезаписаны.

-8

Можно открыть их через текстовый редактор, перейти в шестнадцатиричный режим просмотра и посмотреть, что из себя представляют файлы внутри. В файле eeprom.hex можно увидеть ту самою нашу записанную 5-ку.

-9

Прошивка микроконтроллера HEX файлом

Теперь заменяем микроконтроллер, на тот, куда будем копировать информацию, т.е. отмеченный синей изолентой. Светодиод можем оставить. Нажимаем 1 , чтобы вернуться к меню выбора действий. И выбираем 6, чтобы записать данные из hex файлов в память второго синего микроконтроллера.

-10

А если мы нажмем 4, то только обновим прошивку и не затронем данные записанные в EEPROM памяти. Это может понадобиться, когда просто нужно загрузить обновленный код скетча, но не затронуть данные, которые возможно установил пользователь, либо вычислило устройство во время своей работы. И мы их записали в EEPROM память.

Кстати, этот же способ, можно использовать, если Вы где-то достали hex файл с прошивкой и вам нужно загрузить его в микроконтроллер.

Подтверждаем свой выбор. Происходит загрузка информации в микроконтроллер.

-11

И видим, что светодиод мигает 5 раз подряд. Значит, мы успешно скопировали все данные с одного микроконтроллера на другой. Можно вставить еще один ATtiny13 и загрузить данные и в него. И так можем ставить производство на поток. Ниже можно посмотреть видео по материалам статьи.

Ссылка на скетч из статьи - https://disk.yandex.ru/d/o44wXmWfBiyPvA

Видео по материалам статьи:

_________________________________________________________

Спасибо, что дочитали до конца! Если статья понравилась, нажмите, пожалуйста, соответствующую кнопку. Если интересна тематика электроники и различных электронных самоделок, подписывайтесь на канал. До встречи в новых статьях!

Другие публикации по теме: