Ошибка при записи загрузчика atmega328p

Tomasina аватар

Offline

Зарегистрирован: 09.03.2013

МК Atmega328p магазинные, куплены в Чип и Дипе, т.е. непрошитый.

Припаял МК на плату, кварц 16 МГц тоже припаял.
Пробую прошить загрузчик, в IDE выбираю Uno, в качестве программатора  «Arduino as ISP» (через другую ардуинку):

         Using Port                    : COM4
         Using Programmer              : stk500v1
         Overriding Baud Rate          : 19200
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x15
Ошибка при записи загрузчика.
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x15
         AVR Part                      : ATmega328P
         Chip Erase delay              : 9000 us
         PAGEL                         : PD7
         BS2                           : PC2
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom        65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
           flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
           lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

         Programmer Type : STK500
         Description     : Atmel STK500 Version 1.x firmware

avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x14

avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x02

avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x10
         Hardware Version: 4744608
         Firmware Version: 0.4611299
         Topcard         : STK502
         Vtarget         : 1.8 V
         Varef           : 0.0 V
         Oscillator      : Off
         SCK period      : 0.1 us

avrdude: stk500_initialize(): (b) protocol error, expect=0x10, resp=0x01
avrdude: initialization failed, rc=-1
         Double check connections and try again, or use -F to override
         this check.

avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x10

avrdude done.  Thank you.

Пробую через программатор USBasp (что с установленной перемычкой JP3, что без нее):

Using Port                    : usb
         Using Programmer              : usbasp
avrdude: Warning: cannot open USB device: Function not implemented
         AVR Part                      : ATmega328P
         Chip Erase delay              : 9000 us
         PAGEL                         : PD7
         BS2                           : PC2
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom        65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
           flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
           lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

         Programmer Type : usbasp
         Description     : USBasp, http://www.fischl.de/usbasp/

avrdude: auto set sck period (because given equals null)
avrdude: error: program enable: target doesn't answer. 1 
avrdude: initialization failed, rc=-1
         Double check connections and try again, or use -F to override
         this check.


avrdude done.  Thank you.

Ошибка при записи загрузчика.

Другие ардуинки, валявшиеся в столе, обеими способами прошиваются загрузчиком нормально, без ошибок.
А вот с новыми магазинными МК затык.

Где порыться?


VKimport

  • Ответить

  • Создать новую тему

Рекомендуемые сообщения

VKimport

Мастер

    • Поделиться

Купил новую atmega328p-pu, заливаю бутлоадер через Arduino IDE, пишет ошибка:
avrdude: Expected signature for ATmega328P is 1E 95 0F
Double check chip, or use -F to override this check.
Ошибка при записи загрузчика.
Подключаю через кварцевый резонатор + конденсаторы на 22пФ, по схеме(фотография #2).
Что делать, как быть? ))

Оригинал сообщения

  • Цитата

Ссылка на комментарий
Поделиться на другие сайты

Lila Lila

Знаток

    • Поделиться

для начала прочитать сигнатуру купленного контроллера, а дальше думать

  • Цитата

больше резинифератоксина, ещё больше резинифератоксина. где мой резинифератоксин и hp22b?

Ссылка на комментарий
Поделиться на другие сайты

Orzubek Rakhimov

Новичок

    • Поделиться

Lila, где мне прочитать сигнатуру, другие пишут, что надо поменять значение сигнатуры в
конфиге, 0x1e 0x95 0x14; на это. Поменял, пишет ту же самую ошибку, только с новым значением конфигурации:
avrdude: Expected signature for ATmega328P is 1E 95 14
Double check chip, or use -F to override this check.

  • Цитата

Ссылка на комментарий
Поделиться на другие сайты

Приглашаем на вебинар «Литиевые аккумуляторы EVE и решения для управления перезаряжаемыми источниками тока» (16.11.2023)

Приглашаем всех желающих принять участие в вебинаре, посвященном разработке узла питания в автономных устройствах, что является сложной задачей, т.к. необходимо не только выбрать надежный и качественный аккумулятор, но и правильно спроектировать схему управления и контроля. На вебинаре мы расскажем о линейке аккумуляторной продукции EVE, а также как выбрать правильную модель аккумулятора, режимы его работы, сформулировать требования для проектирования узла управления. Рассмотрим основные функциональные блоки работы аккумуляторного узла и компоненты для их реализации. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Alexey Kroptovsky

Профи

    • Поделиться

Орзубек, убил как-то лоадер в Ардуине уно залив хекс от нано. Причём и до этого он не прошивался родным IDE. Перепрошил, используя нано как ISP программатор, через тот же IDE. Там даже готовый скетч есть для этого и много описаний в инете.
Рс. А вот нано, до всего этого, вполне успешно пережевала хекс от уно…

  • Цитата

Ссылка на комментарий
Поделиться на другие сайты

Параметры подтвердились? Тестируем аккумуляторы EVE Energy типа 18650

Выбирая продукцию того или иного производителя, важно быть уверенным в надежности продукции. Компэл в качестве официального дистрибьютора представляет различные надежные литиевые аккумуляторы и батарейки от мирового лидера EVE Energy, в том числе популярного типа 18650.

Для оказания помощи в подборе аккумуляторов этого типа, сочетающих оптимальные технические параметры и приемлемую цену, инженер Компэл провел  собственное тестирование. Аккумуляторы типа 18650 изготавливаются по двум имеющимся электрохимическим системам – ICR и INR – с различной емкостью. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Mikhail Sviridov

Экспериментатор

    • Поделиться

Все хотел спросить по этому поводу, проблема точно такая же. Микрухи новые 328 не шьются ни программатором ни ардуиной. С кварцем и без кварца. Прошивка читается (нули)

  • Цитата

Ссылка на комментарий
Поделиться на другие сайты

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Mikhail Sviridov

Экспериментатор

    • Поделиться

Даже загрузчик не записывается

  • Цитата

Ссылка на комментарий
Поделиться на другие сайты

Viktor Savelyev

Энтузиаст

    • Поделиться

Михаил, Каким программатором не шьется? Какие программы используешь?

  • Цитата

Ссылка на комментарий
Поделиться на другие сайты

Lila Lila

Знаток

    • Поделиться

Михаил, а какую ошибку пишет?

  • Цитата

больше резинифератоксина, ещё больше резинифератоксина. где мой резинифератоксин и hp22b?

Ссылка на комментарий
Поделиться на другие сайты

Mikhail Sviridov

Экспериментатор

    • Поделиться

Виктор, usbasp. То что в интернете на форумах не помогает. Не снижение частоты, ничего

  • Цитата

Ссылка на комментарий
Поделиться на другие сайты

Mikhail Sviridov

Экспериментатор

    • Поделиться

Lila, та же ошибка, что и у автора поста. И сигнатура та же

  • Цитата

Ссылка на комментарий
Поделиться на другие сайты

Mikhail Sviridov

Экспериментатор

    • Поделиться

Виктор, много пробовал, в том числе Ардуино иде. Везде та же ошибка

  • Цитата

Ссылка на комментарий
Поделиться на другие сайты

Lila Lila

Знаток

    • Поделиться

Михаил, я ж говорил уже, нужно прочитать сигнатуру и думать дальше

  • Цитата

больше резинифератоксина, ещё больше резинифератоксина. где мой резинифератоксин и hp22b?

Ссылка на комментарий
Поделиться на другие сайты

Orzubek Rakhimov

Новичок

    • Поделиться

ХЗ как, но все заработало, странно то, что бутлоадер прошился в атмегу за секунду, неоднократно перешивал, прошивается все равно меньше 3сек, не знаю, радоватся, или как

  • Цитата

Ссылка на комментарий
Поделиться на другие сайты

Orzubek Rakhimov

Новичок

    • Поделиться

Решился после того, переустановил Arduino IDE

  • Цитата

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже.

Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

  • Последние посетители

      0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Сообщения

    • Aliens444

    • READART

      Автор

      READART · Опубликовано

      Вдруг кому пригодится.

      У гивера есть программатор «на коленке» (в чем его несомненная польза!): 

      https://community.alexgyver.ru/threads/arduino-programmator-pic-ov.4279/

      который можно сотворить минут за 10, и в котором есть желаемый pic16f628.

      Из-за длинных проводов на монтажке пользоваться этим программатором не очень удобно,

      но в данном случае достаточно всего лишь одной операции — Erase.

      После которой pic16f628 очищается, читается и пишется на TL866II как pic16f628А.

    • Dӧppelganger_857

      Автор

      Dӧppelganger_857 · Опубликовано

      Как-то пропустил этот очевидный момент, но накину. Автор поставил цепь VT13 VD17 R71 R110 как цепь для ускоренного закрывания полевиков. Однако после неё стоит конденсатор 47мкФ, а затворы прицеплены аж через 1кОм. Какой в этом смысл? Большое сопротивление R71 так же имеет маловато смысла, полевики будут довольно медленно открываться. Надо либо выкинуть C43 R72 и занизить R71 (эдак до сотни ом максимум), либо выкинуть «закрывашку» и занизить C43.

      И после опыта тыкания палочкой в REF102C, могу порекомендовать выбросить C31 C30, C33 зашунтировать танталом минимум 1мкф на ногах микры (это в дш рекомендуют), а еще лучше — выбросить REF102 и купить у китайцев дешевую какую-нить REF01/02 (брал недавно 02 за сотку, остался доволен в пределах пяти разрядов), потому что при использовании LM833 сама суть REF102 теряет смысл, а вот цена на неё высока.

      C24 C25 с точки зрения банальной схемотехники ОУ являются ошибкой, т.к. перегружают выход ОУ емкостью — надо ставить резисторы с выхода ОУ для отвязки емкости (хотя после такого фильтра толку от них опять таки ноль).

      На фильтры тоже хочу накинуть коричневого — в чем их смысл, если ИОН имеет шум ниже, чем ОУ, в фильтре используемые?

    • Andrewwww

    • Aliens444

      Автор

      Aliens444 · Опубликовано

      Сижу гадаю, хороший продукт или нет.      Смотри, что есть на AliExpress! Новый оригинальный чип LM4562 LM4562MAX 8-SOP за 14 834,72 ₽
      https://sl.aliexpress.ru/p?key=TxGTUHZ

      Opa 1642 уже слишком дорогой стал, настоящие почти 3к.

    • bigmanlav

    • Lexter

      Автор

      Lexter · Опубликовано

      Ага. А пичок напряжения под 200 кВ там где фронт 100 нс переходит в «полочку» — это прям правомерно-правомерно. Прям во всех ИИП именно так и происходит.

      Лучше бы подсказали, как модель к реальности приблизить.

Introduction: How to Fix «Expected Signature for ATMEGA328P Is 1E 95 0F Double Check Chip, or Use -F to Override This»

If you are like me and you bought the slightly cheaper ATMEGA328-PU instead of the ATMEGA328P-PU, without understanding the difference, then you may encounter some issues when burning the bootloader. I was stuck with this myself for some time and decided to share my learnings. Hope it helps some others out there!

Step 1: Editing the Avrdude.CONF File

There are countless forums with advice on how to deal with the following two errors you may encounter when burning the bootloader of an Atmega328P:

  1. «avrdude: Yikes! Invalid device signature.” or
  2. «avrdude: Expected signature for ATMEGA328P is 1E 95 0F»

As other forums will tell you, the solution is to modify the avrdude.conf file. This is located in C:\Program Files (x86)\Arduino\hardware\tools\avr\etc.******

Open the file and search for «0x1e 0x95 0x0F». Replace this with «0x1e 0x95 0x14«.

Restart the Arduino IDE and burn the bootloader on your chip/s.

After completing this, revert the changes in the avrdude.conf file and restart the Arduino IDE once more. Now you can upload code as per usual.

****** IF THIS DOES NOT WORK, READ THE BELOW PARAGRAPH ******

If like me you followed the above instructions and still met the same error message, do not fear! This simply means that the avrdude.conf file that your system is using is actually somewhere else. To find the location of the avrdude.conf that your system is using, upload any sketch to your arduino board and search the output for «avrdude». From here you will see the folder it is located within. Copy this path into a windows explorer and edit the avrdude.conf file here instead.

For me this was:

C:\Users\YOUR_USER_NAME\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17\etc

I hope this helps somebody else out there struggling with this issue!

Have a great day :)

Arduino Forum

Loading

Загрузка прошивки


В этом уроке мы рассмотрим загрузку прошивки в ардуино через внешние “программаторы”. Давайте вспомним, о чем уже говорили в одном из первых уроков: загрузка прошивки в Arduino возможна двумя способами:

  • “Напрямую” во flash память микроконтроллера при помощи ISP (In System Programming) внутрисистемного программатора.
  • При помощи загрузчика (bootloader), который живёт в конце Flash памяти МК, принимает программный код по протоколу TTL (UART) и записывает его во Flash память.

Загрузчик (bootloader)


Загрузчик живёт в самом конце Flash памяти МК и позволяет записывать прошивку, отправляемую через UART. Загрузчик стартует при подаче питания на МК, ждёт некоторое время (вдруг кто-то начнёт слать код прошивки по UART), затем передаёт управление основной программе. И так происходит каждый каждый раз при старте МК.

  • Загрузчик позволяет прошивать МК через UART;
  • Загрузчик замедляет запуск МК, т.к. при каждом запуске ждёт некоторое время для потенциальной загрузки прошивки;
  • Загрузчик занимает место во Flash памяти. Стандартный старый для Arduino NANO занимает около 2 кБ, что весьма существенно!
  • Именно загрузчик мигает светодиодом на 13 пине при включении, как индикация работы.

Программатор


Помимо записи прошивки во flash память, программатор позволяет:

  • Считывать содержимое Flash памяти (скачать прошивку на компьютер)
  • Полностью очищать чип от всех данных и настроек
  • Записывать и читать загрузчик
  • Считывать/записывать EEPROM память
  • Читать и настраивать фьюзы (fuses, fuse-bits) и лок биты.

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

USB-TTL (UART)


Этот способ реализован прямо на платах Arduino при помощи USB-TTL (USB-UART) преобразователя, именно поэтому мы можем подключить плату к компьютеру и загрузить код. USB-TTL позволяет только загрузку данных во flash, остальные возможности (как у ISP программатора) ему недоступны. В то же время он ограничен только возможностями загрузчика, но в этом уроке мы рассматриваем только стандартные. Также USB-TTL мост позволяет микроконтроллеру общаться с компьютером по последовательному соединению (тот самый Serial и монитор com порта). Есть платы без бортового USB-TTL, например Arduino Pro Mini. Для работы с ними нужно купить внешний USB-TTL преобразователь. Также загрузка прошивки через UART возможна и в “голый” микроконтроллер при условии наличия там загрузчика, который запишет принятый код во flash. Про запись загрузчика мы поговорим ниже. UART “загружатор” подключается к пинам RX и TX Ардуино (или микроконтроллера), RX->TX и TX->RX, также обязательно подключается земля GND. Если у прошиваемой платы нет своего питания, то подключается и питание. Загрузчик отрабатывает при запуске МК, поэтому непосредственно перед загрузкой прошивки МК должен быть сброшен (перезагружен), и для этого на платах USB-UART есть вывод DTR (Data Terminal Ready), который подключается к пину RST Reset и собственно выполняет сброс перед перед загрузкой прошивки. На платах Pro Mini есть отдельный пин DTR.

USB-TTL Arduino
DTR DTR
RX TX
TX RX
GND GND
VCC/5V/3.3V VCC

blank   Китайцы выпускают USB-TTL модули в широком ассортименте, но в целом они все одинаковые по своей сути. Ссылка на результат поиска на aliexpress, и ссылка на все USB-TTL в моём любимом магазине WAVGAT. Что использую я? В основном платку на CP2102. Перед заказом модуля обязательно убедитесь в том, что у него есть выход DTR, иначе этот модуль можно будет использовать только для “общения” с контроллером через COM порт.   Для работы с таким преобразователем нужно установить драйвер для чипа, на базе которого собран модуль, это может быть CP2102, CH340/341, FT232, PL2303 и другие. Прошивка загружается как обычно: выбираем порт, на котором сидит преобразователь, версию загрузчика и жмём загрузить, всё! Важный момент: на некоторых китайских версиях плат Arduino Pro Mini не распаян пин DTR, т.е. он не идёт на RST и автоматический сброс перед загрузкой прошивки не выполняется. В этом случае сброс нужно производить вручную, кнопкой RST, непосредственно перед загрузкой прошивки… Загрузка прошивки посредством загрузчика (bootloader) возможна с любого UART устройства, даже через Bluetooth. Но об этом мы поговорим в отдельном уроке.

ISP программатор

USBasp


Дешёвые ISP программаторы также есть в ассортименте у китайцев, рекомендую брать USBasp как самый распространенный. Поискать на алиэкспресс, мне нравится версия в корпусе. USBasp имеет не очень удобный выход 10-пин на шлейфе, поэтому рекомендуется купить также переходник 10-пин на 6-пин, который позволяет сразу подключаться к ISP header’у, который есть на большинстве плат Arduino. Внимание! Очень часто встречается брак в виде непропая контактов, поэтому во избежание проблем рекомендуется пропаять переходник и отмыть флюс (зубная щётка + бензин калоша).

Быстрый старт:

  • Подключить usbasp к компьютеру
  • Скачать и установить драйвера на usbasp (скачать с моего сайта, скачать с Яндекс диска, ещё есть тут и тут)
  • Открыть диспетчер устройств и убедиться, что программатор определился системой
  • Открыть Arduino IDE
  • Выбрать usbasp в Инструменты > Программатор

Решение проблем


Решение большинства проблем с загрузкой через программатор (независимо от того, что написано в логе ошибки):

  • Вытащить и обратно вставить usbasp в usb порт
  • Вставить в другой usb порт
  • Переустановить драйвер на usbasp
  • Проверить качество соединения USBasp с МК
  • Перепаять переходник и отмыть флюс

Для прошивки микроконтроллера, тактирующегося низкой частотой (менее 1 МГц внутренний клок):

  • USBasp: на плате есть перемычка JP3, которая включает режим низкой скорости загрузки. В новых версиях прошивки для USBasp скорость выбирается автоматически, но китайцы продают старую версию. Как прошить новую – ищите в интернете.

Основные ошибки в логе Arduino IDE


avrdude: error: could not find USB device with vid=0x16c0 pid=0x5dc vendor='www.fischl.de' product='USBasp' Причина – компьютер не видит USB ASP

  • Проверить и сменить USB порт
  • Попытаться переустановить драйвер
  • Проверить пайку USB разъема на плате программатора
  • Проверить наличие и целостность элементов вблизи usb разъема программатора, кварцевый резонатор
  • Возможно программатор криво прошит – при возможности попытаться перепрошить
  • Возможно микроконтроллер на плате программатора – брак или же мертв, попытаться заменить и прошить

avrdude: error: program enable: target doesn't answer. Причина – usbasp не видит подключаемый микроконтроллер

  • Проверить правильность и целостность соединения с МК
  • Попытаться снизить частоту прошивки, джампером или же указав более низкую скорость в среде программирования
  • Проверить пайку разъема 10 pin и переходника 10 pin – 6 pin
  • Возможно прошиваемый микроконтроллер попался с браком, или же мертв.

Arduino as ISP


Почти любая другая плата Arduino может стать ISP программатором, для этого нужно просто загрузить в неё скетч ArduinoISP:

  • Открыть скетч Файл > Примеры > 11. ArduinoISP > ArduinoISP
  • Всё! Ваша Arduino теперь стала ISP программатором
  • Подключаем к ней другую Arduino или голый чип по схеме ниже
  • Выбираем Arduino as ISP в Инструменты > Программатор
  • И можем писать загрузчики, фьюзы или загружать прошивку напрямую во Flash

ISP программатор подключается к четырем пинам микроконтроллера, не считая питания: один из пинов передает сброс, остальные – для передачи данных. Чтобы плата-программатор не сбрасывалась при загрузке, на неё нужно:

  • Либо поставить поставить конденсатор ёмкостью ~10 мкФ между RST и GND (рекомендуется)
  • Либо просто закоротить пины RST и 5V проводом

По использованию других плат Arduino в качестве программатора читай на официальном сайте.

Решение проблем


Для прошивки микроконтроллера, тактирующегося низкой частотой (менее 1 МГц внутренний клок):

  • Arduino ISP: нужно изменить частоту загрузки прошивки в скетче Arduino ISP и снова прошить его в ардуино-программатор (см. строку в скетче 45 и ниже);

Работа в Arduino IDE

Прошивка загрузчика


Из Arduino IDE при помощи ISP программатора мы можем записать другой загрузчик (по факту загрузчик + фьюзы) и загрузить скетч, а также настроить/прошить фьюзы и лок-биты, но не очень удобным способом. Когда мы выбираем плату в Инструменты > Плата и загрузчик в Инструменты > Плата (загрузчик, bootloader), Arduino IDE автоматически делает “активным” нужный загрузчик. Нажимая Инструменты > Записать загрузчик мы прошиваем загрузчик, соответствующий выбранной плате и её настройкам. Также одновременно с загрузчиком прошиваются фьюзы и лок-биты, соответствующие выбранной плате в Arduino IDE. Как и где их поменять, смотрите чуть ниже. Рассмотрим на примере записи загрузчика для atmega328, стоящей на китайской плате Arduino NANO. На данный момент китайцы прошивают в МК старую версию загрузчика, которая называется old bootloader в меню платы. Оригинальные платы идут с более современным загрузчиком, поэтому при работе с китайскими платами нам приходится выбирать old bootloader для загрузки прошивки через бортовой usb порт. Подключим usbasp по схеме выше, выберем его как программатор в Инструменты > Программатор, выберем плату Arduino NANO, загрузчик для atmega328 (первый в списке). Нажмём записать загрузчик. Всё! Теперь плату можно шить через бортовой usb порт, выбирая первый загрузчик. Он кстати легче, быстрее “прошивает” и сама прошивка быстрее “запускается”.

Как убрать загрузчик?


В стандартном “ядре” Arduino не предусмотрен вариант “без загрузчика”. Для того, чтобы вручную убрать поддержку загрузчика, нужно уметь работать с boards.txt и фьюзами: нужно будет изменить фьюз BOOTRST и подправить максимальный размер скетча. Есть более простой вариант – найти и установить ядро, в котором реализован выбор загрузчика с вариантом “без загрузчика”, например для ATmega328 это miniCore и наше GyverCore. Нужно установить поддержку ядра по рассмотренной ранее инструкции, выбрать плату, указать вариант “без загрузчика” и нажать “Записать загрузчик”. В МК будут прошиты соответствующие фьюзы.

Загрузка скетча


В Arduino IDE можно зашить скетч через программатор, для этого надо нажать Скетч > Загрузить через программатор. Это очень удобно в том случае, когда МК используется без загрузчика, или просто голый МК.

Внимание! Загрузчик будет стёрт!

Фьюзы


Конфигуратор платы в Arduino IDE устроен следующим образом: каждой плате в Инструменты > Плата соответствует свой набор настроек, включая фьюзы, которые прошиваются вместе с загрузчиком. Некоторые из них:

  • Загрузчик (путь к файлу)
  • Скорость загрузки (через загрузчик)
  • Объем доступной flash и sram памяти
  • Весь набор фьюзов и лок-биты

Файл конфигурации называется boards.txt и найти его можно в папке с ядром Arduino: C:\Program Files (x86)\Arduino\hardware\arduino\avr\boards.txt. Документацию на boards.txt можно почитать здесь. При желании можно вывести нужные фьюзы через калькулятор (читайте выше), изменить их в boards.txt (главное не запутаться, для какой выбранной конфигурации платы делается изменение) и прошить в МК, нажав Инструменты > Записать загрузчик.

  • Фьюзы подписаны как low/high/extended fuses, можно вставлять полученное в калькуляторе значение.
  • Локбиты работают следующим образом: unlock_bits это локбиты, которые прошьются до записи загрузчика (при нажатии на кнопку Записать загрузчик). А вот после прошивки загрузчика будут автоматически прошиты lock_bits, которые и определят доступ к памяти контроллера во время его работы. Чтобы защитить прошивку от чтения – ставим lock_bits 0x3C.

Такая работа с фьюзами максимально неудобна, но есть и другие варианты:

  • Ядро GyverCore для atmega328, в нем мы сделали кучу готовых настроек фьюзов прямо в настройках платы, читайте в уроке про GyverCore. Несколько загрузчиков, включая вариант без загрузчика, выбор источника тактирования и другие настройки в один клик мышкой.
  • Программа AVRdudeprog, про нее поговорим ниже

Фьюзы (Pro)


Фьюзы (фьюз-биты) являются низкоуровневыми настройками микроконтроллера, которые хранятся в специальном месте в памяти и могут быть изменены только при помощи ISP программатора. Это такие настройки как выбор источника тактирования, размер области памяти под загрузчик, настройка отсечки по напряжению и прочее. Фьюз-биты собраны по 8 штук в байты (т.н. байты конфигурации), как типичный регистр микроконтроллера AVR. Таких байтов может быть несколько, они называются low fuses, high fuses, extended fuses. Для конфигурации байтов рекомендуется использовать калькулятор фьюзов (например, вот такой), в котором просто ставятся галочки на нужных битах, и на выходе получается готовый байт в hex виде. Рассмотрим на примере ATmega328p:

Важный момент: в AVR биты у нас инверсные, то есть 1 это выкл, 0 это вкл. Расставляя галочки в калькуляторе, мы формируем байт, галочка стоит – бит включен, но в результирующем байте включенные биты являются нулями. Об этом стоит задумываться при ручном составлении фьюз-байта, при использовании калькулятора можете об этом даже не вспоминать. Что позволяют настроить биты?

  • CKSEL0CKSEL3 – выбор источника и частоты тактирования (уточняй в даташите на свой МК, какая конфигурация за что отвечает)
  • SUT0SUT1 – задержка старта МК после перезагрузки
  • CKOUT – дублирование тактирования на один из пинов (см. в даташите на какой)
  • CKDIV8 – делит тактовую частоту на 8
  • BOOTRST – если включен, МК запускается с загрузчика
  • BOOTSZ0BOOTSZ1 – задаёт размер сектора загрузчика
  • EESAVE – защита EEPROM от стирания во время выполнения полной очистки чипа
  • WDTON – если включить, то Watchdog будет принудительно включен без возможности отключения
  • SPIENопасный бит, при его отключении пропадает возможность прошивки через ISP, и возможность выключить этот бит в том числе*
  • DWEN – вкл/выкл отладочный интерфейс DebugWire. На других моделях бывает и JTAG, и его бит – JTAGEN
  • RSTDISBLопасный бит, при его включении можно использовать ногу RST как обычный цифровой пин, но пропадает возможность прошивки через ISP и выключить этот бит как следствие*
  • BODLEVEL0BODLEVEL3 – настройка контроля напряжения (МК сбросится при падении ниже установленного напряжения)

* – прошивка возможна при помощи высоковольтного программатора

Лок-биты (Pro)


Лок-биты (lock-bits) позволяют управлять доступом к памяти микроконтроллера, что обычно используется для защиты устройства от копирования. Лок-биты собраны опять же в конфигурационный лок-байт, который содержит: BOOTLOCK01, BOOTLOCK02, BOOTLOCK11, BOOTLOCK12, LOCKBIT1, LOCKBIT2 (для ATmega328). Калькулятор лок-битов можно использовать этот. BOOTLOCK биты позволяют запретить самому МК запись (самопрограммирование) во flash память (область программы и область загрузчика)

А вот локбиты LOCKBIT позволяют запретить запись и чтение flash и EEPROM памяти извне, при помощи программатора, т.е. полностью защитить прошивку от скачивания и копирования:

Таким образом включив LOCKBIT1 (лок-байт будет 0x3E) мы запретим внешнюю запись во Flash и EEPROM память, т.е. при помощи ISP программатора, а включив LOCKBIT1 и LOCKBIT2 (лок-байт: 0x3C) полностью заблокируем заодно и чтение данных из памяти микроконтроллера. Повторюсь, всё описанное выше относится к ATmega328p, для других моделей МК читайте в соответствующих даташитах.

Avrdudeprog


Avrdudeprog – утилита от русского программиста, являющаяся удобной оболочкой для avrdudue. Скачать AVRDUDE_PROG можно с официального сайта (прямая ссылка на загрузку, на всякий случай зеркало на моём ЯД и FTP этого сайта). В рамках этого урока, программа умеет следующее:

  • Чтение/запись/очистка flash памяти
  • Чтение/запись/очистка eeprom памяти
  • Полная очистка чипа
  • Калькулятор фьюзов и локбитов (чтение/запись)

Более подробный обзор на avrdudeprog можно посмотреть здесь. Давайте посмотрим на калькулятор фьюзов. Выбираем свой микроконтроллер и программатор (можно добавить другие модели микроконтроллеров и программаторов, читай тут). Переходим во вкладку Fuses, нажимаем прочитать. При успешном чтении увидим текущий набор настроек своего чипа. Можно их поменять и загрузить. Важно! Галку инверсные биты не трогаем! Лок-биты и отключение RST заблокирует микроконтроллер, не трогайте их, если такой цели нет! Можно загружать прошивку или загрузчик из .hex файла, указав путь к ней на первой вкладке в окне Flash. Очень удобная утилита для низкоуровневой работы с МК.

Видео


Полезные страницы


  • Набор GyverKIT – большой стартовый набор Arduino моей разработки, продаётся в России
  • Каталог ссылок на дешёвые Ардуины, датчики, модули и прочие железки с AliExpress у проверенных продавцов
  • Подборка библиотек для Arduino, самых интересных и полезных, официальных и не очень
  • Полная документация по языку Ардуино, все встроенные функции и макросы, все доступные типы данных
  • Сборник полезных алгоритмов для написания скетчей: структура кода, таймеры, фильтры, парсинг данных
  • Видео уроки по программированию Arduino с канала “Заметки Ардуинщика” – одни из самых подробных в рунете
  • Поддержать автора за работу над уроками
  • Обратная связь – сообщить об ошибке в уроке или предложить дополнение по тексту ([email protected])

  • Ошибка при загрузке фейсит
  • Ошибка при закрытии месяца деление на 0
  • Ошибка при записи загрузчика arduino usbasp
  • Ошибка при закачке файла
  • Ошибка при загрузке фото в инстаграмм