So programmieren Sie mehrere STM32Fs auf derselben Platine

7

Ich arbeite in einer Managementrolle und habe nur sehr begrenzte Elektronikkenntnisse (genug, um einfache Arduino-Projekte usw. zu erstellen).

Wir arbeiten derzeit an einem Produkt mit 3 STM32F303 und 2 STM32F103. Der Hauptprozessor ist ein AM5718.

Ich habe mich nur gefragt, wie Sie die Firmware und den Bootloader für jeden Prozessor einschließlich des AM5718 hochladen und aktualisieren sollen.

Die 5 STM32 sind über UART mit dem AM5718 verbunden und befinden sich alle auf derselben Platine.

Ich möchte eine gute Vorstellung davon bekommen, wie dies geschehen würde, nachdem die Leiterplatte hergestellt wurde und das Produkt im Einsatz ist.

Ich würde natürlich den Elektronikingenieur fragen, der an dem Projekt arbeitet, aber wir sind für Weihnachten fertig.

Terry Gould
quelle
Sie dürfen nicht in den USA sein, denn der Chef hier würde Sie einfach zu Hause anrufen ....: /
Daniel
Haha du hast recht, ich bin in Großbritannien! Es ist kein so großes Problem, dass es gerechtfertigt ist, jemanden zu Hause anzurufen. Hauptsächlich nur, um meine Neugier zu befriedigen, und es ist auch gut, sich von Dritten beraten zu lassen!
Terry Gould
Hallo. Wenn es eine Antwort gibt, die Ihnen bei der Lösung Ihres Problems geholfen hat, klicken Sie bei dieser Antwort auf Akzeptieren. Vielen Dank.
Armandas

Antworten:

5

Wenn das Hardware-Design korrekt ausgeführt wird und UART für die Programmierung verwendet wird, lauten die Schritte ungefähr wie folgt:

  1. Die Haupt-CPU setzt eine ausgewählte MCU zurück.
  2. Die CPU bringt dann die erforderlichen BOOT-Pins in einen geeigneten Zustand und gibt den Reset frei.
  3. Der MCU-Bootloader wird gestartet und wartet darauf, dass Daten in der entsprechenden UART-Zeile eingehen.
  4. Die CPU sendet die Binärdaten über den UART und setzt die MCU zurück, wenn sie fertig ist.
  5. Die MCU läuft mit einer neuen Firmware.

Hier ist ein Bild, das die Bootloader-Auswahl für STM32F10xxx-Teile zeigt:

Geben Sie hier die Bildbeschreibung ein

Die gleichen Schritte würden für jede MCU wiederholt.

Der Hauptprozessor kann auf zahlreiche Arten aktualisiert werden, aber normalerweise sieht es so aus:

  1. Die Firmware wird in einen lokalen Speicher (FLASH, RAM, SD-Karte usw.) heruntergeladen.
  2. Die CPU wird neu gestartet und der Bootloader erkennt den Upgrade-Code.
  3. Der CPU-Bootloader liest die Daten, prüft, ob die Binärdatei gültig ist, und programmiert die entsprechenden FLASH-Sektoren.
  4. Die CPU startet sich neu und lädt mit der neuen Firmware.

Aktualisieren.

Basierend auf Ihrer aktuellen Hardware müssten Sie den Bootloader ausführen, indem Sie zur entsprechenden Speicheradresse springen (siehe Seite 20 von AN2606 ). Ich weiß nicht viel darüber, aber Ihr Hardware-Designer sollte es herausfinden können. Die Kontrolle über die Reset-Leitung nicht zu haben, ist allerdings ein kleines Versehen.

Armandas
quelle
Würde dies mehr Pins als die 2 USART-Pins erfordern oder würden die MCUs über andere Pins mit der Haupt-CPU verbunden sein.
Terry Gould
Ich würde eine Vermutung wagen, dass Sie mindestens zwei weitere GPIOs benötigen würden. Eine zum Zurücksetzen der MCU und eine zum Auswählen des BOOT-Modus.
Armandas
Welche Pins wären der Reset- und Boot-Modus auf den MCUs und mit welchen Pins würden sie auf der CPU verbunden? Ich habe versucht, mich selbst zu sehen, kann es aber nicht verstehen. Derzeit sind die NRST-Pins über einen Widerstand mit der Stromversorgung verbunden und die Boot-Pins mit gnd verbunden.
Terry Gould
@ProductDesigner Angesichts der aktuellen Verbindung durch Widerstand und direkter Verbindungen zur Erde benötigen Sie eine Neugestaltung der Schaltung / Leiterplatte, um die logisch gesteuerten Signale aufzunehmen, jetzt, da Sie wissen, wie es funktioniert
KyranF
NRST wird zum Zurücksetzen verwendet und BOOT0 und BOOT1 werden zur Auswahl des Startmodus verwendet. Auf der CPU-Seite können sie sich mit jedem GPIO verbinden. Basierend auf Ihrer Hardwarebeschreibung müssen Sie möglicherweise eine andere Methode verwenden, um den Bootloader auszuführen. Ich werde meine Antwort aktualisieren.
Armandas
3

Ich vermute, Sie müssen die AM5718-Firmware über JTAG laden, aber ich bin mit dieser CPU-Familie nicht allzu vertraut.

Der STM32 (wie viele andere ARM-CPUs heutzutage) verfügt über einen von ST integrierten ROM-Bootloader. Bei einigen STM32-Serien erfolgt dies, indem der BOOT0-Pin während des Zurücksetzens hoch gehalten wird. Um Ihr normales Programm zu starten, müssen Sie den Pin niedrig halten. Dies steht jedoch zweckmäßigerweise nicht immer im Datenblatt, sondern häufig im Benutzerhandbuch.

Der ST-Bootloader unterstützt häufig mehrere Protokolle, und UART ist sehr verbreitet. Es werden jedoch nicht alle UARTs oder Pin-Positionen auf dem STM32-Chip unterstützt. Sie müssen daher die Pins der seriellen Schnittstelle auswählen. Dieses Dokument ist sehr hilfreich, wenn Sie die richtige Familie finden können.

Das von Armandas beschriebene Verfahren ist korrekt. Wenn Ihre AM5718-CPU über einige Ersatzstifte verfügt, können Sie die Aktivierung des ST-Bootloaders über Software automatisieren. Dies kostet einige GPIO-Pins auf der CPU - theoretisch 1 zusätzliche Rücksetzleitung für jede hinzugefügte CPU. Möglicherweise müssen Sie auch überlegen, wie Ihr Board in diesem Setup gestartet wird, während der AM5718 nicht vollständig ausgeführt wird.

Eine kleine Einschränkung: Bei einigen STM32-Teilen wird der ROM-Bootloader ausgeschaltet, sobald Sie den Leseschutz aktivieren. Sie können weiterhin über JTAG (nach dem Löschen) auf den Chip zugreifen, jedoch nicht über den Bootloader. Wenn Sie die automatische Aktivierung nicht in die Hardware integrieren können, müssen Sie sie möglicherweise manuell über Jumper und ein Papierverfahren ausführen. Dies ist jedoch nur im Werk praktikabel - es ist keine sehr vor Ort zu wartende Lösung.

Beide Gründe können Sie zu einem internen Bootloader führen, der über einen seriellen Befehl aktiviert werden kann. Es bietet außerdem den Vorteil, dass Sie Ihre Firmware-Images durch Verschlüsselung schützen können, da Sie die Entschlüsselung im Bootloader selbst vornehmen.

Hans
quelle
Ok, im Moment denke ich, dass es am besten ist, die STM32s über ihre eigenen UARTS mit der Haupt-CPU zu verbinden und ihre Boot- und Reset-Pins mit den CPU-GPIOs zu verbinden. Ich interessiere mich noch nicht für Software, ich möchte nur, dass das Hardware-Design zukunftssicher ist.
Terry Gould
3

Wenn alle Teile JTAG-kompatibel sind und sich alle in derselben Leistungsdomäne befinden (oder sich anderweitig in einem Zustand befinden, der die Kettenintegrität garantiert), können Sie eine Scan-Kette erstellen und diese verwenden, um nacheinander jedes Teil zu treffen.

Es hört sich jedoch so an, als ob das Projekt abgeschlossen ist und Sie im Management sind :), daher denke ich, dass die UART-Option die beste Route ist. Um klar zu sein, jeder STM hat seinen eigenen UART für den großen Prozessor, oder teilen sie sich (was etwas seltsam ist ...)? In letzterem Fall benötigen Sie, wie auf den anderen Postern angegeben, einen GPIO pro, um auszuwählen, wer aktiv ist.

Krunal Desai
quelle
Die erste Phase der Hardwareentwicklung ist für das Prototyping vorbereitet. Ich habe gerade die Schaltpläne durchgesehen und war besorgt, dass die STMs nur über den UART mit der Haupt-CPU verbunden sind, ihre Reset- und Boot-Pins wie oben mit power / gnd verbunden sind. Jeder STM ist über seinen eigenen UART mit der Haupt-CPU verbunden. Daher denke ich im Moment, dass es am besten ist, jedes STM über separate UARTs (wie sie derzeit sind) mit der CPU verbunden zu haben und dann ihre Boot- und Reset-Pins mit den GPIOs der Haupt-CPU zu verbinden.
Terry Gould
Ja, das scheint vernünftig. Das einzige, was ich sicherstellen würde, ist, dass sich Ihre Rücksetzkette unabhängig vom Softwarestatus über die CPU ausbreitet. dh wenn VDD unter den akzeptablen Schwellenwert fällt, übernimmt ein interner Supervisor und löst einen Reset aus, oder sollten Sie die GPIO-Steuerung für das Zurücksetzen jedes STM über einen Reset-Supervisor-IC ausführen.
Krunal Desai
Ok, du hast mich jetzt verloren. Denk dran, ich habe keine großen Kenntnisse über die Arbeit an Elektronik dieser Größenordnung. Sprechen Sie also über einen separaten IC für die Rückstellung? Ich bin im Moment wirklich nur daran interessiert, die Hardware richtig zu machen.
Terry Gould
Ein separater Reset-Supervisor wird im Allgemeinen verwendet, wenn ein zustandsloses Hardwareelement unter bestimmten Bedingungen einen Reset aktivieren soll. Beispielsweise kann ein 3,3-V-Rücksetz-Supervisor ein 5-poliges Teil sein - VDD, GND, RST, RST # und MR #. Es wird ein Zurücksetzen aktiviert, wenn die Spannung 3,08 V erreicht (oder was auch immer eingestellt ist, einige sind einstellbar), so dass alle Prozessoren / usw. sicher zurückgesetzt werden, bevor ihre Netzteile zu weit abfallen. Mit dem MR # -Pin können Sie einen Druckknopf anschließen. Es erzeugt einen Impuls, wenn Sie ihn aktivieren und dann loslassen. Wenn Sie ihn gedrückt halten, wird alles zurückgesetzt.
Krunal Desai
Würden Sie denken, dass in dieser Anwendung ein Reset-Supervisor erforderlich ist? Wäre es ein IC pro Prozessor oder nur eines für das gesamte System? Was wäre ein gutes ic zu verwenden?
Terry Gould