Статья не очень интересная, но может кто-то столкнётся с такой проблемой.
В моём арсенале «приборчиков радиолюбителя» имеется программатор 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).
- avrdude-6_0_1-mingw32.zip (505 Кб)
- SinaProg_part01.rar (2930 Кб)
- SinaProg_part02.rar (2930 Кб)
- SinaProg_part03.rar (2874 Кб)
Комментарии (14) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация
[Автор]
- скачали все 3 части и они лежат по одинаковому пути
- архиватор поддерживает разбитые на части архивы
- открываете часть 01
Также для винды7 необходим пакет lvrte и запуск в режиме совместимости с XP
Действительно, в файлах фузы для 328 Brown-out detector ВРУТ
Откройте даташит и посмотрите внимательно. Выясняем, что EXT FUSE для 168 и 328 разные! А народ, кто повнимательней, сидит и чешет репу. Я - же упал духом, Честно сказать сам давно хотел освоить ATmega328P, но видно не судьба. Ребята а кто в железе проверял данную версию SinaProg напишите в личку или в коментах заранее спасибо!
ATmega328P 0x07 0x06 Brown-out detection level at VCC=1.8 V; [BODLEVEL=110]
ATmega328P 0x07 0x05 Brown-out detection level at VCC=2.7 V; [BODLEVEL=101]
ATmega328P 0x07 0x04 Brown-out detection level at VCC=4.3 V; [BODLEVEL=100]
В файле "Calc_HF.cal" должно быть:
ATmega328P 0x80 0x00 Reset Disabled (Enable PC6 as i/o pin); [RSTDISBL=0]
ATmega328P 0x40 0x00 Debug Wire enable; [DWEN=0]
ATmega328P 0x20 0x00 Serial program downloading (SPI) enabled; [SPIEN=0]
ATmega328P 0x10 0x00 Watch-dog Timer always on; [WDTON=0]
ATmega328P 0x08 0x00 Preserve EEPROM memory through the Chip Erase cycle; [EESAVE=0]
ATmega328P 0x06 0x06 Boot Flash section size=256 words Boot start address=$3F00; [BOOTSZ=11]
ATmega328P 0x06 0x04 Boot Flash section size=512 words Boot start address=$3E00; [BOOTSZ=10]
ATmega328P 0x06 0x02 Boot Flash section size=1024 words Boot start address=$3C00; [BOOTSZ=01]
ATmega328P 0x06 0x00 Boot Flash section size=2048 words Boot start address=$3800; [BOOTSZ=00] ; default value
ATmega328P 0x01 0x00 Boot Reset vector Enabled (default address=$0000); [BOOTRST=0]
Повторные прошивки с разными вариантами не дали результата. Что-то с загрузчиком.
Даже с совместимостью с WIN.XP.