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, а нашої ATmega328 тут немає. А це означає, що її потрібно додати. Як нам це зробити? В принципі, не складно. Для цього поглянемо на даташит 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).
- avrdude-6_0_1-mingw32.zip (505 Кб)
- SinaProg_part01.rar (2930 Кб)
- SinaProg_part02.rar (2930 Кб)
- SinaProg_part03.rar (2874 Кб)