Прошивка бутлодера в atmega8

Задача:

Записать загрузчик в атмега8.

История:

После attiny13 появилось желание поработать с контроллером, помощнее, чем attiny13, но дешевле и чуть проще чем atmega328, которая используется на ардуино. Выбор пал на atmega8, это один из самых ходовых котроллеров. Покупая микросхему можно с ней работать и без загрузчика, прошивать через программатор, и все будет хорошо, даже памяти под программу будет чуть больше.

Зачем тогда пытаться туда залить загрузчик?)

  1. Для того, чтобы иметь возможность загружать программу скажем по воздуху, есть приемо-передатчики образующие прозрачный RS232 мост. Если зашить загрузчик, и подключить передатчик, а на второй стороне в передатчик слать команды на прошивку, то модуль прошьется удаленно. Это очень удобно для обновления прошивки, если устройство не просто снять и принести к компьютеру.
  2. Так же, можно сделать сеть по RS232 или RS485 и прошивать МК удаленно по сети.

Загрузчиков, он же бутлодер, их много, один из лучших optiboot.

Бутлодер optiboot не компилировал, а взял уже готовый из ардуиновского пакета MiniCore. Этот же загрузчик можно прошить из ArduinoIDE, но вспомнил, что в инете писали, фьюзы для некоторых режимов atmega8 там стоят не верные, для Atmega328 вроде как все должно быть ок. Надежнее как всегда, понять как с этим работать напрямую, поэтому нужно углубиться в теорию.

Полезные ссылки по бутлодерам

Про Arduino IDE, загрузчики (bootloader), программаторы (avrdude.exe), фьюзы, HEX-файлы. В одном флаконе. Не претендуя на оригинальность.
https://www.radiokot.ru/artfiles/6391/

Bootloader для AVR - RADIOSOFT
https://www.youtube.com/watch?v=FgYwAayu-LI&feature=youtu.be

Khazama AVR Programmer часть 2 ФЬЮЗЫ
https://www.youtube.com/watch?v=uClxsTMe0es

ПЕРЕПРОШИВКА БУТЛОАДЕРА В ARDUINO НА OPTIBOOT
https://blog.instalator.ru/archives/798

http://homes-smart.ru/index.php/oborudovanie/arduino/avr-zagruzchik

Установка MiniCore

После установки дополнения к ArduinoIDE по адресу выше, можно найти скомпилированные загрузчики.

Путь к MiniCore библиотеке, у вас будет похожий. По нему можно будет увидеть много папок, каждый из которых соответствует частоте МК. Когда с частотой определились, то заходим в папку, там будут файлы для разных скоростей бутлодера.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
c:\Users\admin\AppData\Local\Arduino15\packages\MiniCore\hardware\avr\2.0.3\bootloaders\optiboot_flash\bootloaders\atmega8\

1000000L\
11059200L\
12000000L\
14745600L\
16000000L\
18432000L\
1843200L\
20000000L\
2000000L\
24000000L\
3686400L\
4000000L\
7372800L\
8000000L\

Прошивка бутлодера в atmega8

Для конфигурация без внешнего кварца, на 1 мгц, берем соответсвующий файл optiboot_flash_atmega8_UART0_9600_1000000L.hex

Чтобы бутлодер успешно работал, нужно выставить фьюзы, соответсвующие размеру бутлодера для того, чтобы контроллер знал откуда его грузить. Фьюзы можно прошить до и после прошивки бутлодера.

Фьюзы прошиты в Khazama AVR Programmer программе, удобна она тем, что можно выставить как флажками, так и в ней имеется подобие калькулятора фьюз, можно не запоминать биты, а просто выставить, то что должно быть по итогу.

Чтобы программатор USBasp работал в этой программе пришлось его прошить.

https://tsibrov.blogspot.com/2018/10/usbasp-firmware-update.html

После прошивки программатора, он стал работать в этой программе и перестал работать в avrdudeprog33.

В обновленной версии USBasp с avrdudeprog33 программой не читается

Так как это можно все сделать и без Khazama, то скорей всего ее не буду использовать, когда avrdude, через командную строку, позволяет это все сделать за один раз.

1
2
3
4
5
6
7
8
9
10
11
Cформированная командная строка: 
avrdude.exe -p m8 -c usbasp -P usb -U calibration:r:calibration.hex:r
avrdude.exe: warning: cannot set sck period. please check for usbasp firmware update.
avrdude.exe: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.02s
avrdude.exe: Device signature = 0x1e9307
avrdude.exe: reading calibration memory:
Reading | ################################################## | 100% 0.03s
avrdude.exe: writing output file "calibration.hex"
avrdude.exe: safemode: Fuses OK (E:FF, H:DC, L:E1)
avrdude.exe done. Thank you.

Соответсвие фьюзов в разных программах

Бутлодер был загружен тоже этой программой. После прошивки бутлодера можно будет загружать программу по UART.

Прошивка программы с помощью установленного ранее бутлодера

Для получения полезной информации, стоит включить эти настройки в ArduinoIDE.

Нужен скомпилированный файл прошивки, путь к нему можно подсмотреть в ArduinoIDE после компиляции, либо сделать экспорт этого файла через пункт меню в той же ArduinoIDE.

В моем случае путь такой: c:\Users\admin\AppData\Local\Temp\arduino_build_138604\

Весь путь с настройками должен быть в одну строку

c:\arduino-1.8.8\hardware\tools\avr\bin\avrdude -Cc:\arduino-1.8.8\hardware\tools\avr\etc\avrdude.conf -v -patmega8 -carduino -b9600 -cstk500v2 -P\.\COM15 -D -Uflash:w:C:\DigitalReadSerialAtmega8Test.ino.hex:i

C:\Users\admin\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino9/bin/avrdude -CC:\Users\admin\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino9/etc/avrdude.conf -v -patmega8 -carduino -PCOM15 -b9600 -D -Uflash:w:C:\Users\admin\AppData\Local\Temp\arduino_build_138604/DigitalReadSerialAtmega8Test.ino.hex:i

c:\arduino-1.8.8\hardware\tools\avr\bin\avrdude -Cc:\arduino-1.8.8\hardware\tools\avr\etc\avrdude.conf -v -patmega8 -carduino -b9600 -P\.\COM15 -D -Uflash:w:C:\DigitalReadSerialAtmega8Test.ino.hex:i

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

Если поставить дополнительные пакеты в ArduinoIDE, то можно прошить Atmega8 прямо из нее, скорость загрузки заданная в настройках 9600

Оставшиеся вопросы для последующего изучения:

  1. Как уйти от строки Cc:\arduino-1.8.8\hardware\tools\avr\etc\avrdude.conf в параметрах avrdude?
  2. Как скомпилировать бутлодер руками, и на любую скорость + частоту?

Полезные ссылки

https://github.com/euphy/polargraph/wiki/Uploading-precompiled-binary-hex-files

Share