SinaProg + ATmega328P исправляем прошивку фьюзов

Статья не очень интересная, но может кто-то столкнётся с такой проблемой.

В моём арсенале «приборчиков радиолюбителя» имеется программатор UsbTiny. В качестве программы для прошивки микроконтроллеров (МК) я использую SinaProg.

SinaProg – это графическая оболочка для программы AVRDude – очень мощной, но консольной программы для прошивки МК. И чтобы не мучиться с прописыванием параметров как во времена доброго MS-DOSа, придумали такую программку-оболочку.

До недавнего времени меня всё устраивало. Но вот приехала партия микроконтроллеров ATmega328P (на них работают Arduino Uno), и тут началось… В списке поддерживаемых программой микроконтроллеров ATmega328P имеется, прошивка шьется, читается, всё бы ничего, но не работает функция установки фьюзов. При входе в «калькулятор фьюзов», программа не даёт изменять значения (см.скриншот):

Непорядок. Я решил разобраться в чём дело. Первым делом я поискал новую версию SinaProg. Нашел какую то другую версию, обновил, но всё осталось по прежнему. Сайт разработчиков, как выяснилось, уже давно не работает. Ну что ж, придётся разбираться самому. Заходим в папку с программой. Видим там файлы:

В файле «Device.txt» содержится список поддерживаемых МК. Можно добавлять новые МК если их нет в списке. ATmega328P в этом списке есть (левый столбец). Также в файле содержатся сигнатуры (типа уникального ID номера) всех МК (в правом столбце). Смотрим скриншот, поехали дальше.

Проблема в том, что не меняются фьюзы, обратим внимание на файлы Calc_xx.cal. Они нам и нужны, и отвечают за калькулятор фьюзов. Очевидно, что где-то в них что-то не дописано, либо написано неверно. Открываем файлы при помощи «Блокнота», потому что внутри они содержат обычный текст. Содержание у всех файлов похожее, и я не буду рассматривать каждый из них. Коротко расскажу какой файл за что отвечает:

-«Calc_EF.cal» – отвечает за фьюзы группы «Extended Fuses», или расширенные настройки
-«Calc_HF.cal» – отвечает за фьюзы группы «High Fuses»
-«Calc_LB.cal» – отвечает за фьюзы группы «Lock Bits», проще говоря – блокировки, защита.
-«Calc_LF.cal» – отвечает за фьюзы группы «Low Fuses»

Для примера откроем в «блокноте» файл «Calc_LB.cal». Вот что мы увидим:

Как мы видим, сразу после ATmega3250 идёт ATmega329, а нашей атмеги328 здесь нету. А это значит, что её нужно добавить. Как нам это сделать? В принципе не сложно. Для этого взглянем на даташит ATmega328P:

Как видно из даташита, МК ATmega328P совместим по своему устройству с МК ATmega48PA/88PA/168PA, отличие лишь в количестве памяти программ, памяти данных, и размере загрузчика. Потому попробуем найти например ATmega168 в нашем файле:

ATmega168 в файле имеется, выделяем и копируем все строки, относящиеся к ATmega168. Затем добавляем пустую строку между ATmega3250 и ATmega329, и вставляем туда то, что мы скопировали. Во всех строках заменяем ATmega168 на ATmega328P. Должно получиться что-то вроде этого:

Закрываем файл, сохранив внесённые изменения. Такую же операцию проделываем и над файлами «Calc_HF.cal» и «Calc_LF.cal».Остаётся изменить содержимое файла «Calc_EF.cal», всё делается по тому же принципу, но с небольшой поправкой. В этом файле прописаны фьюзы, отвечающие в основном за размер загрузчика. А так, как ATmega48PA/88PA/168PA/328P отличаются обьёмом памяти на борту, то и размеры загрузчиков у них разные. Потому внесём поправки. ATmega168 имеет 16кб памяти программ, а ATmega328P соответственно 32 кб памяти. И размер загрузчика у них отличается ровно в 2 раза. Потому открываем файл, находим ATmega168, копируем все строки, вставляем, меняем название МК на ATmega328P, и смотрим на скриншот:

Нужно размеры загрузчиков увеличить в 2 раза, потому что размер памяти стал больше в 2 раза. Увеличили, закрываем и сохраняем файл. Теперь запускаем SinaProg, заходим в калькулятор фьюзов, и видим:

Кнопочки стали активны, и фьюзы можно изменять. Таким же образом можно добавлять и другие МК, а значения необязательно копировать от другого МК. Если хорошенько почитать даташит, то все эти значения там имеются, и можно просто написать строки самому, по аналогии с любым другим МК.

Так как SinaProg работает на основе AVRDUDE, то напоследок скачаем и обновим AVRDUDE в папке с SinaProg. Последнюю версию AVRDUDE можно взять с официального сайта, либо скачать внизу страницы, я приложил последнюю версию на момент написания статьи. Из архива нам потребуется собственно, сама программа «AVRDUDE.exe» и конфигурационный файл «avrdude.conf». Так было:

Так стало после замены старых файлов AVRDUDE на новые:

В консоль теперь стали выводиться байты фьюзов.

В файлах прилагаю архив с моей «доделанной» версией SinaProg (с поддержкой фьюзов ATmega328P и обновлённым AVRDUDE).

Прикрепленные файлы:

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

Ваш адрес email не будет опубликован.