В момента работя върху проект, използващ платка Arduino Uno (rev3). В крайна сметка може да го оставя да работи независимо от Arduino и това ме накара да се замисля как работи цялото програмиране и зареждане на системата.
Ето какво знам/предполагам досега:
Платката има два чипа: ATmega328 (основен чип) и ATmega16u2 (използван като USB-към-сериен бидж).
Фърмуерът на ATmega16u2 може да бъде променен чрез активиране на DFU-режим и използване на напр. DFU-програмист. След това Arduino може да бъде разпознат като HDI / Midi устройство, но вече не е програмируем.
Когато програмирате ATmega328, чипът се нулира и при рестартиране буутлоудърът ще зареди и запише новата програма чрез своята серийна връзка и моста ATmega16u2. ISP-интерфейсът на чипа не се използва за качване на новата програма. Кой инициира нулирането на първо място?
Arduino може да се използва като ISP-програматор за програмиране на други външни чипове. За тази цел някакъв фърмуер се зарежда на AATmega328 и ISP-пиновете на чипа, който ще се програмира, са свързани към този на платката Arduino. Тогава Arduino-IDE е конфигуриран да използва Atmega328 като програмист, вместо да го препрограмира.
Надявам се поне повечето от написаното от мен да е вярно. Въпросите ми тогава са:
Ако сложа нов/празен AVR на моята платка, как буутлоудърът ще влезе в този чип? Как работи командата "Burn Bootloader"?
Възможно ли е да качите шестнадесетичен файл в ATmega328 БЕЗ първо да качите буутлоудър? Може ли това да стане с помощта на специален фърмуер на ATmega16u2?
Благодаря!
Йоханес