Новый загрузчик 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?
Как вы думаете, эта концепция может сработать?
Заранее спасибо. полилогический
@grpolylogic, 👍1
Обсуждение1 ответ
Лучший ответ:
Поскольку я не очень хорошо знаком с загрузчиками, я бы не стал писать свой собственный, поэтому я хотел бы использовать новейший загрузчик 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
- Не удается снова загрузиться после смены платы
- Путаница с ATmega328P и 3,3 В/8 МГц
- Что означает avrdude: Device signature = 0x000000? Неисправная проводка? Проблема с программным обеспечением? Неправильная инструкция?
- Не могу записать загрузчик на Atmega328P с помощью Arduino Uno
- Можем ли мы записать загрузчик Arduino в любой чип микроконтроллера?
- Atmega328p — переход на низкое энергопотребление 1,8 В с использованием генератора 4 МГц — прошивка загрузчика
- Переход к загрузчику из кода приложения в atmega328p
- Как правильно активировать контакт сброса ATMega328 с помощью ПО, чтобы загрузчик работал, а прошивка могла обновляться через контакты RX/TX?
ваш вопрос сводится к вопросу, можно ли собрать Arduino UNO, @jsotola
задавайте и обсуждайте вопросы по AVR на https://www.avrfreaks.net/forum, @Juraj