Optiboot на arduino nano 3.
Feb. 16th, 2021 10:59 amВ интернетах много рецептов по установке optiboot, но они все очень сложные или не рабочие.
Мой способ намного проще.
1. Загрузить последнюю версию optiboot.


2. Создать в каталоге "arduino\hardware\arduino\avr\bootloaders\" папку "optiboot-8.0". Arduino - это путь к файлам arduino, например "c:\Program Files (x86)\arduino-1.8.13".
3. Из скаченного архива скопировать содержимое каталога "Optiboot-8.0\bootloaders\optiboot\" в папку arduino\hardware\arduino\avr\bootloaders\optiboot-8.0.
4. Добавить в файл arduino\hardware\arduino\avr\boards.txt следующий текст.
## Arduino Nano (OptiBoot 8.0) w/ ATmega328P
## --------------------------
nano.menu.cpu.atmega328opti=ATmega328P (optiboot 8.0)
nano.menu.cpu.atmega328opti.upload.maximum_size=32256
nano.menu.cpu.atmega328opti.upload.maximum_data_size=2048
nano.menu.cpu.atmega328opti.upload.speed=115200
nano.menu.cpu.atmega328opti.bootloader.low_fuses=0xFF
nano.menu.cpu.atmega328opti.bootloader.high_fuses=0xDE
nano.menu.cpu.atmega328opti.bootloader.extended_fuses=0xfd
nano.menu.cpu.atmega328opti.bootloader.file=optiboot-8.0/optiboot_atmega328.hex
nano.menu.cpu.atmega328opti.build.mcu=atmega328p
5. Запустить arduino и прошить загрузчик обычным образом. Только перед этим необходимо выбрать плату "arduino nano" и процессор "ATmega328P (optiboot 8.0)".



Зачем это надо.
Пример реализации доступа к регистру MCUSR.
#include <AVR\WDT.H>
#include <ARDUINO.H>
uint8_t mcusr_mirror __attribute__ ((section (".noinit")));
void get_mcusr(void) __attribute__ ((naked, used, section(".init3")));
void get_mcusr(void)
{
mcusr_mirror = MCUSR;
MCUSR = 0;
wdt_disable();
}
void setup() {
Serial.begin(9600);
if(bitRead(mcusr_mirror,WDRF))
Serial.println("Зависание");
else if(bitRead(mcusr_mirror,BORF))
Serial.println("Просадка напряжения");
else if(bitRead(mcusr_mirror,EXTRF))
Serial.println("Сигнал сброса");
else if(bitRead(mcusr_mirror,PORF))
Serial.println("Подача питания");
else
Serial.println("Неизвестно");
Замечания.
1. Если arduino установлена в program files, то нужны права администратора для записи туда файлов.
2. Arduino может отказаться прошивать программатором USBasp. Для исправления этого необходимо скачать avrdude с сайта "http://download.savannah.gnu.org/releases/avrdude/". Сыылка для скачивания файла avrdude-6.3-mingw32.zip. Содержимое этого архива (файлы avrdude.conf и avrdude.exe) скопировать в каталог arduino\hardware\tools\avr\bin.