Новый загрузчик Optiboot для Arduino на специальной плате ATMega328p, ATMEL Studio и AVRdude

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

Прежде всего, у меня есть небольшой опыт работы с Arduino Nano и профессиональный опыт программирования микроконтроллеров на языке C.

Я хотел бы создать собственную плату ATMega328p, которая что-то делает и сможет обновлять любую прошивку, работающую на ней, через порт UART.

1) Обновление прошивки

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

2) Компиляция собственной программы

Чего я определенно НЕ хочу, так это использовать Arduino Sketch IDE для компиляции любого кода приложения. До сих пор я использую Atmel Studio для любых приложений без загрузчика, которые создавал, и хотел бы продолжать использовать ее в своем собственном проекте и структуре кода. Вопрос здесь в том, нужно ли мне вносить какие-либо изменения в компоновщик или в код проектов Atmel Studio, чтобы иметь возможность «преобразовать» мой код в код приложения, чтобы он мог сосуществовать с загрузчиком?

3) Обновление прошивки

После того, как плата окажется в поле, работая с загрузчиком Optiboot и устаревшей прошивкой, я хотел бы использовать стороннее программное обеспечение для связи с загрузчиком и обновления кода приложения. Поскольку загрузчик optiboot, используемый Arduino, использует протокол связи и функциональные возможности STK500, могу ли я использовать AVRdude для связи с загрузчиком и прошивки кода приложений только через UART?

Как вы думаете, эта концепция может сработать?

Заранее спасибо. полилогический

, 👍1

Обсуждение

ваш вопрос сводится к вопросу, можно ли собрать Arduino UNO, @jsotola

задавайте и обсуждайте вопросы по AVR на https://www.avrfreaks.net/forum, @Juraj


1 ответ


Лучший ответ:

0

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

Даже люди, которые знают о загрузчиках, редко удосуживаются написать свои собственные, если есть вполне хороший, с хорошей поддержкой и хорошими кроссплатформенными инструментами. Зачем?

Вопрос здесь заключается в том, нужно ли мне вносить какие-либо изменения в компоновщик или в код проектов Atmel Studio, чтобы иметь возможность «преобразовать» мой код в код приложения, чтобы он мог сосуществовать с загрузчиком?

>

Нет. Загрузчик находится по старшему адресу памяти, а ваш код — по адресу 0x0000, как обычно. Предохранитель настроен на «Загрузка по адресу загрузчика», а другой позволяет вам установить размер области загрузчика (и, следовательно, адрес загрузчика).

Поскольку загрузчик optiboot, используемый Arduino, использует протокол связи и функциональные возможности STK500, могу ли я использовать AVRdude для связи с загрузчиком и прошивки кода приложения только через UART?

Да. Это то, что делает Arduino IDE. Он просто запускает avrdude для связи с загрузчиком. Если вы включите подробный режим в настройках, вы сможете увидеть, какую именно команду она запускает, чтобы вы могли воспроизвести ее в своей собственной программе или скрипте.

,

Я бы добавил, что единственное назначение загрузчика - прошивка по UART., @Juraj

@Юрай Конечно, если хочешь констатировать очевидное., @Majenko

Маженко! Огромное спасибо за ответ! Кажется, это довольно стандартно, поскольку мне удалось скомпилировать собственную программу в Atmel Studio и загрузить ее в УК через cmd avrdude. Я не уверен, нужно ли мне публиковать другой вопрос, но мне было интересно следующее; в целях повышения безопасности: Я мог бы изменить код optiboot, чтобы он сначала получал заранее определенный набор символов через UART, прежде чем он перейдет в режим STK500. Возможно ли это? Помимо холодного сброса, я хотел бы иметь возможность вызывать загрузчик из кода приложения. Как я могу его вызвать и нужно ли сбрасывать некоторые регистры перед вызовом?, @grpolylogic

Это будет новый вопрос. Я не смогу ответить на вопросы в комментариях., @Majenko