Превратите ESP8266 в «загрузчик скетчей» типа Arduino IDE (через аппаратный последовательный порт)

У меня есть модуль ESP8266, который загрузил шестнадцатеричный файл для Arduino Mega2560. Этот шестнадцатеричный файл (назовём его mega2560.hex) находится в файловой системе SPIFFS ESP. Я хочу эмулировать поведение среды разработки Arduino при нажатии кнопки загрузки скетча (только в моём случае скетч уже скомпилирован и готов к загрузке). Мне нужна какая-нибудь библиотека или небольшой пример кода, которые помогут мне в этом. На стороне Mega процессор перезапустится, а загрузчик дождётся шестнадцатеричного файла, получит его от ESP и запишет в память приложения.

Вот базовая структура:

// Код для ESP8266
 
SoftwareSerial mega(D1, D2); // поскольку аппаратный последовательный порт занят для последовательного монитора
// Mega будет использовать свой аппаратный последовательный порт (Tx1, Rx1)

void setup()
{
    Serial.begin(115200); // используем аппаратный последовательный порт
    mega.begin(115200); // подключиться к mega
    
    SPIFFS.begin();
    File hexfile = SPIFFS.open("mega2560.hex", "r");
    
    // "загрузка" в стиле IDE
    upload(mega, hexfile);
    Serial.println("Done uploading.");

    hexfile.close();
}

// эмулировать поведение загрузки, подобное Arduino IDE
void upload(SoftwareSerial& mega, File& hexfile)
{
    // перезагрузите Mega, чтобы запустить загрузчик, который сначала будет ждать принятия нового шестнадцатеричного файла
    reset(mega);

    // отправляем шестнадцатеричный файл загрузчику для его принятия и сохранения во флэш-памяти Mega
    send(mega, hexfile);

    // перезагрузите Mega, чтобы снова запустить загрузчик, на этот раз так, чтобы можно было запустить ранее загруженный шестнадцатеричный файл
    reset(mega);
}

Я сравнительно недавно начал работать с загрузчиками и хотел бы узнать, подходит ли приведённый выше код сверху вниз для достижения моей цели. Можно ли просто сбросить настройки Mega и перенести данные, как обычно, через последовательный порт в «окне ожидания» загрузчика? Или есть ещё какие-то моменты, которые я упускаю.

Я стараюсь избегать использования ISP или SPI, потому что это также сотрет загрузчик Mega, а я хочу сохранить загрузчик.

, 👍4

Обсуждение

Да, вы мыслите в правильном направлении. Можно просто сбросить настройки Mega, чтобы запустить загрузчик Mega, но нельзя просто передавать байты через последовательный порт. Загрузчик Arduino использует команды STK500 для надёжного установления связи. AVRdude использует тот же протокол для взаимодействия с Arduino. Вот ссылка, которая может вам помочь: https://www.electronicwings.com/arduino/basics-to-developing-bootloader-for-arduino, @Fahad

другой вариант https://github.com/JAndrassy/lab/blob/master/AvrDudeTelnet/AvrDudeTelnet.ino, @Juraj


2 ответа


-1

Я использую прошивку esp-link на ESP8266. При размещении загрузчика Arduino Uno на любой плате с ATmega328 среда Arduino IDE может программировать Arduino с версией «Arduino Uno Wifi» (обычно она находится внизу списка плат AVR).

В прошивке esp-link уже предустановлена служба mDNS для Arduino. Если эта служба включена, Arduino IDE сможет определить IP-адрес. Эта прошивка es-link работает как маршрутизатор и требует настройки для доступа к маршрутизатору, к которому подключен компьютер с Arduino IDE.

Интерфейс прошивки esp-link интуитивно понятен, а для подключения к микроконтроллеру требуются только RX, TX и Reset, а также программатор через последовательный порт (или преобразователь USB-Serial, такой как FTDI232).

Прошивка esp-link подключает микроконтроллер к Интернету. с использованием Wi-Fi-модуля ESP8266

См. здесь: https://github.com/jeelabs/esp-link

,

есть проблема с запуском Arduino Mega, @Juraj

Было бы интересно посмотреть на проблемы в репозитории esp-link, вместо того, чтобы понижать рейтинг сторонних ответов., @R R

отрицательная оценка не связана с комментарием., @Juraj


0

Ваша задача по программированию AVR через последовательный порт с ESP8266 SPIFFS весьма специфична. Вы можете использовать библиотеку «dfu». У меня есть её версия для Arduino здесь. Она была создана arduino.org для первой прошивки WiFiLink для Uno WiFi с ESP8266. Вот пример использования.

При использовании ISP/SPI можно использовать библиотеку ESP8266AVRISP. Она входит в комплект ядра Arduino esp8266. В ней есть пример.

По последовательному интерфейсу, но без хранилища SPIFFS, esp8266 также может использоваться как прямой сетевой прокси для avrdude, где avrdude работает через сетевой порт, взаимодействуя с простым скетчем «сеть-последовательный», работающим на esp8266.

Кроме того, Arduino Mega может выполнять самообновление с помощью моей библиотеки ArduinoOTA, а среди прочих вариантов транспортировки обновленных двоичных файлов библиотека ArduinoOTA может использовать мою библиотеку WiFiEspAT, которая работает с ESP8266 или ESP32 с прошивкой AT.

,