Neu: Die KI-Firewall überwacht die gesamte Plattform und erklärt jeden Vorfall in einfachen Worten. So funktioniert es

OTA für einen STM32-Hauptcontroller, wenn der daneben liegende ESP32 das MQTT übernimmt

OTA für einen STM32-Hauptcontroller, wenn der daneben liegende ESP32 das MQTT übernimmt

Gelöst 5 3

Von English mit KI übersetzt ·

Unsere Bewässerungssteuerungen haben einen STM32F407, der die Ventillogik übernimmt, und einen ESP32, der nur Wi-Fi und MQTT erledigt. Beide kommunizieren über UART mit 921600. Der ESP32 lässt sich leicht aktualisieren. Der STM32 muss dagegen im Feld von jemandem mit einem ST-Link geflasht werden, was im Sommer viel Fahrerei bedeutet.Ich möchte, dass die Firmware-Updates von Hermetry auch das STM32-Image ausliefern. Was genau erhält das Gerät von Hermetry, wenn ein Update zugewiesen wird, und was muss es zurückmelden? Und brauche ich auf der STM32-Seite das Dual-Bank-Setup, oder komme ich mit einem zweiten Slot im externen Flash aus? Der Baustein hat 1 MB, das Image ist etwa 380 KB groß.

Timestamps in UTC or it didn't happen.
♥ 2

Von English mit KI übersetzt ·

Wir haben in unseren HVAC-Reglern dieselbe Aufteilung, und zwar ebenfalls.

Timestamps in UTC or it didn't happen.
♥ 0

Von English mit KI übersetzt ·

Wir haben genau das bei Gebäudesteuerungen gemacht (STM32 plus ein ESP32-Modem). Hermetry ist es egal, welcher Chip das Image am Ende ausführt; es spricht nur mit dem angemeldeten Gerät, deshalb lädt und meldet der ESP32.Wenn Sie ein Paket zuweisen, erhält das Gerät in einer Nachricht auf v1/attributes/set diese gemeinsamen Attribute: fw_title, fw_version, fw_size, fw_checksum, fw_checksum_algorithm (SHA256), fw_url und fw_sig, falls das Paket eine separate Signatur hat. fw_url ist eine kurzlebige HTTPS-Adresse mit 15 Minuten Gültigkeit, und der Download kann mit einer HTTP-Range-Anfrage fortgesetzt werden.Das Gerät meldet den Fortschritt als Client-Attribute: fw_state durchläuft DOWNLOADING, DOWNLOADED, VERIFIED, UPDATING, UPDATED (oder FAILED mit fw_error), fw_progress 0 bis 100 während des Downloads, und nach dem Neustart current_fw_title und current_fw_version. UPDATED allein wird nicht akzeptiert, es wird die neue laufende Version erwartet.Unser Ablauf auf dem ESP32:

1. fw_* kommt an -> prüfen fw_title == "irr-stm32"
2. GET fw_url (Range-Fortsetzung) in den ESP32-Flash, fw_progress melden
3. SHA-256 + Ed25519-Prüfung gegen fw_sig -> fw_state VERIFIED
4. Image per UART in den STM32-Bootloader in Bank 2 streamen
5. STM32 prüft erneut, tauscht die Bänke, startet neu -> fw_state UPDATING
6. STM32 meldet seine Version an den ESP32 -> current_fw_version

Sie haben einen 1-MB-F407, der nur eine Bank hat. Für 380 KB würde ich die oberen 512 KB als Download-Slot verwenden und einen kleinen Bootloader, der das Image nach der Prüfung dorthin kopiert. Externer Flash funktioniert auch, dann braucht der Bootloader aber den SPI-Treiber.Schalten Sie auf dem Firmware-Tab des Profils die Firmware-Updates ein (standardmäßig aus) und lassen Sie Unsignierte Images zulassen außerhalb des Testaufbaus ausgeschaltet. Updates über LTE sind ebenfalls standardmäßig aus. Setzen Sie bei dem Paket Hardware-Modelle, damit ein ESP32-Image niemals im STM32-Slot landet.Firmware updates (OTA)

Akzeptierte Lösung♥ 5

Von English mit KI übersetzt ·

Sehr klar, danke. Was passiert, wenn die 15 minutes mitten in einem Download auf einer schwachen Verbindung ablaufen? Einige unserer Standorte haben nur einen Balken.

Timestamps in UTC or it didn't happen.
♥ 0

Von English mit KI übersetzt ·

Das Gerät fordert fw_url erneut an (eine Attributanfrage) und erhält eine neue, dann setzt es den Download mit Range ab dem Byte fort, das es bereits hatte. Auf diese Weise hatten wir Downloads, die eine Stunde dauerten, ohne jedes Problem.

♥ 0

Von English mit KI übersetzt ·

Auf zwei Testgeräten und einem Gerät im Feld hat es funktioniert. Ich habe die obere Hälfte des Flash plus einen 16-KB-Bootloader verwendet. Der erste Versuch ist fehlgeschlagen, weil ich fw_title im Paket auf „irr_stm32“ gesetzt hatte, der ESP32 aber einen Bindestrich prüfte, daher blieb es einfach in Queued hängen. Nach dem korrekten Benennen lief es durch bis UPDATED, mit der neuen current_fw_version.

Timestamps in UTC or it didn't happen.
♥ 0
Ansicht von 6 Beiträgen – 1 bis 6 (von insgesamt 6)
  • Du musst angemeldet sein, um auf dieses Thema antworten zu können.

Mitdiskutieren

Melde dich an, um Fragen zu stellen und zu beantworten, hilfreiche Beiträge mit „Gefällt mir“ zu markieren und die Antwort zu kennzeichnen, die dein Problem gelöst hat. Jeder Beitrag bringt Punkte und Stufen.

Teilen