Режимы программирования Arduino, загрузчик, Arduino как провайдер
В настоящее время я работаю над проектом, использующим плату Arduino Uno (rev3). В конце концов я мог позволить ему работать независимо от Arduino, и это заставило меня задуматься о том, как работает весь процесс программирования и загрузчика.
Вот что я знаю / предполагаю до сих пор:
На плате есть две микросхемы: ATmega328 (основная микросхема) и ATmega16u2 (используется в качестве ставки USB-to-serial).
Микропрограмму ATmega16u2 можно изменить, активировав режим DFU и используя, например, DFU-Programmer. Arduino может быть распознан как устройство HDI / Midi, но больше не программируется.
При программировании ATmega328 микросхема перезагружается и при перезапуске загрузчик загрузит и запишет новую программу через последовательное соединение и мост ATmega16u2. ISP-интерфейс чипа не используется для загрузки новой программы. Кто инициирует сброс в первую очередь?
Arduino можно использовать в качестве ISP-программатора для программирования других внешних чипов. Для этого на AATmega328 загружается какая-то прошивка, а контакты ISP программируемой микросхемы подключаются к одной на плате Arduino. Затем Arduino-IDE конфигурируется для использования Atmega328 в качестве программиста, а не для его перепрограммирования.
Я надеюсь, что по крайней мере большинство из того, что я написал, правильно. Мои вопросы тогда:
Если я установлю новый / пустой AVR на мою плату, как загрузчик попадет на этот чип? Как работает команда "Burn Bootloader"?
Можно ли загрузить шестнадцатеричный файл в ATmega328 БЕЗ загрузки загрузчика первым? Можно ли это сделать с помощью прошивки speciaf на ATmega16u2?
Спасибо!
Johannes
1 ответ
Программист ISP (ArduinoISP или дискретный программатор, такой как USBasp) может использоваться для программирования флэш-памяти, EEPROM, битов предохранителей и битов блокировки AVR без необходимости в предварительно существующем загрузчике. Он использует контакты SPI на устройстве для отправки на устройство команд для управления содержимым энергонезависимой памяти.
ATmega16U2 имеет только соединения UART с '328; нет способа запрограммировать использование UART без загрузчика на '328.