Forum: Mikrocontroller und Digitale Elektronik STM32F4 richtige Handhabung


von Kai W. (Gast)


Lesenswert?

Hallo,

ich habe nun seit einiger Zeit ein STM32F407 DISCOVERY board. Bisher bin 
verschiedene Dinge am Ausprobieren und ständig am flashen. Im Datenblatt 
des Chips steht aber, dass dieser nur 10000 Schreibzyklen verträgt. Wie 
gesagt, habe ich mir bisher darüber keine Gedanken gemacht, weil ich 
bisher dachte, dass diese Chips 100000 Schreibzyklen abkönnen.

Meine Frage ist jetzt eigentlich, wie ich richtig mit diesen Chips 
umgehe?
Ich bin nach wie vor nur am herum experimentieren, ohne konkretes Ziel.
Gibt es eine Möglichkeit bevor man Programme "flasht" diese zu 
simulieren? Oder kann man diese vorher debuggen, bevor man sie brennt?

Wie machen das die Profis?

Gruß
Kai

von Tom (Gast)


Lesenswert?

Die 10000 ist die garantierte Mindestanzahl an Schreibzyklen, die 
tatsächlich mögliche Anzahl kann deutlich höher liegen - dafür legt der 
Hersteller aber nicht die Hand ins Feuer.

Diese Anzahl ist aber nicht so wenig wie man glaubt. Wenn man den Chip 
täglich 100mal programmiert, sind das mindestens 100 Tage intensiver 
Arbeit mit dem Chip. Brennt er irgendwann durch, muß man ihn halt 
auswechseln.

Gruß. Tom

von Kai W. (Gast)


Lesenswert?

Wahrscheinlich werde ich dann wohl nicht so schnell an die Grenzen des 
Chips stoßen.

Aber kann man denn so ohne weiteres als Hobbybastler den Chip auslöten 
bei den Discovery boards?
Da braucht man doch sicherlich ein spezielles Lötgerät.

von Tom (Gast)


Lesenswert?

Den defekten Chip mit Heißluft vorsichtig auslöten ist kein Problem, er 
ist ja schon hinüber. Sonst mit einem Cuttermesser oder Skalpell die 
Beinchen vorsichtig abschneiden, damit die Lötpads nicht beschädigt 
werden und anschließend die Reste einzeln mit dem Lötkolben entfernen. 
Die Pads mit Entlötlitze von Lötzinnresten befreien und schon ist die 
Platine bereit für einen neuen Chip. :-)

von Timi (Gast)


Lesenswert?

Wieso ist das technisch eigentlich so? Wieso lässt sich der Chip nicht 
beliebig oft beschreiben? Was geht denn da auf Dauer kaputt?

von Dr. Sommer (Gast)


Lesenswert?

Der STM32 kann auch Code aus dem RAM ausführen. Richtiges Compilieren & 
Linken vorausgesetzt, kannst du über JTAG/SWD den Code in den RAM 
schreiben und von da starten. So spart man sich Flash-Zyklen

von Dirk (Gast)


Lesenswert?

Kai Wierzoch schrieb:
> Wie machen das die Profis?

Wenn dein Programm in den RAM passt, kannst du es auch direkt dort 
ausführen ohne den Flash zu bemühen. Hier eines von vielen Beispielen 
für die Anpassung des Linker-Scripts:

http://libopencm3.org/wiki/Run_From_RAM

von Uwe Bonnes (Gast)


Lesenswert?

Kai Wierzoch schrieb:
> Aber kann man denn so ohne weiteres als Hobbybastler den Chip auslöten
> bei den Discovery boards?

Der STM32 Chip einzeln kostet in etwa soviel wie das ganze Discovery 
Board. Da lohnt sich das auslöten nicht besonders...

von Stefanus (Gast)


Lesenswert?

> Wieso lässt sich der Chip nicht beliebig oft beschreiben?

Das würde mich auch mal interessieren. Klar ist, dass die Speicherzellen 
verschließen, aber warum das so ist, konnte ich nicht herausfinden.

Da wird wohl auf dem Floating Gtae eine Hand voll Elektronen abgelegt 
oder wieder entfernt. Warum zerstört dieser Vorgang den Transistor 
(langfristig)?

von Uwe Bonnes (Gast)


Lesenswert?

Stefanus schrieb:
> a wird wohl auf dem Floating Gtae eine Hand voll Elektronen abgelegt
> oder wieder entfernt. Warum zerstört dieser Vorgang den Transistor

Weil dazu Überspannung an das Gate angelegt wird, die "fast" einen 
Durchschlag durch das Gate erzeugt.

von Helmut S. (helmuts)


Lesenswert?

Uwe Bonnes schrieb:
> Stefanus schrieb:
>> a wird wohl auf dem Floating Gtae eine Hand voll Elektronen abgelegt
>> oder wieder entfernt. Warum zerstört dieser Vorgang den Transistor
>
> Weil dazu Überspannung an das Gate angelegt wird, die "fast" einen
> Durchschlag durch das Gate erzeugt.

Weil Elektronen auch an Plätze wandern wo man sie nicht mehr weg 
bekommt. Dadurch verschiebt sich auch die Schwellspannung. Irgendwann 
hat man dann keinen vernünftigen Arbeitsbereich mehr.


Sei froh, dass wenigstens 10000 mal programmieren garantiert wird. Bei 
den Solid State Disks(SSD) ist gerade mal noch 1000 mal beschreiben 
möglich.

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

Die Anzahl Flashzyklen kann dann eine sehr reale Rolle spielen, wenn man 
Debugging mit Breakpoints macht, und diese nicht in der Debug-Engine des 
Chips sondern durch um-flashen vom Code realisiert werden.

von (prx) A. K. (prx)


Lesenswert?

Helmut S. schrieb:
> Sei froh, dass wenigstens 10000 mal programmieren garantiert wird. Bei
> den Solid State Disks(SSD) ist gerade mal noch 1000 mal beschreiben
> möglich.

Schon mal einen µC mit wear levelling gesehen?

von Kai W. (Gast)


Lesenswert?

A. K. schrieb:
>
> Schon mal einen µC mit wear levelling gesehen?

Was ist denn wear leveling?

von Fabian (Gast)


Lesenswert?

Werfe bei jedem Brennvorgang einfach einen cent in eine Spardose. Wenn 
das Ding dann kaputt geht, hast Du mindestens. 100 Euro zusammen und 
kannst Dir damit fast 10 neue Boards kaufen...
Soll heißen: Mache Dir über die Anzahl der möglichen Brennzyklen keine 
Gedanken. Bevor Du die erreichst, wirst Du das Board wohl eher beim 
Experimentieren auf andere Art und Weise kaputt machen. ;)

von Simon H. (simi)


Lesenswert?

A. K. schrieb:
> und diese nicht in der Debug-Engine des
> Chips sondern durch um-flashen vom Code realisiert werden.

Kommt das in der freien Wildbahn vor? Sowas habe ich bis jetzt nur ab 
RAM gesehen. Da die STM32 aber, soweit ich mich erinnere, acht 
HW-Breakpoints unterstützen, ist das ja zum Glück kein Thema.

A. K. schrieb:
> Schon mal einen µC mit wear levelling gesehen?

(ich weiss, das ist was völlig anderes, kam mir nur gerade in den Sinn)
ST Micro bietet einen "EEPROM-Emulator" zum Download an. der macht 
einfaches Wear Leveling. Ist praktisch, wenn man Parameter speichern 
will, und so doch irgendwann mal 10'000 Zyklen ein bisschen knapp 
werden.

Kai Wierzoch schrieb:
> Was ist denn wear leveling?

Vereinfacht gesagt: Wenn Du etwas speicherst, schaut ein Wear Leveling 
Algo zu, dass Du das nicht immer in die gleichen Zellen schreibst. 
Beispiel USB-Stick: Wenn Du da eine Datei überschreibst, überschreibst 
Du die Daten nicht, sondern legst sie in einem unbenutzten Bereich neu 
ab. So, dass - wie der Name eben sagt - der Verschleiss der echten 
Speicherzellen gleichmässig verteilt ist. Ausführlicheres weiss sicher 
Wikipedia.

von Helmut S. (helmuts)


Lesenswert?

Kai Wierzoch schrieb:
> A. K. schrieb:
>>
>> Schon mal einen µC mit wear levelling gesehen?
>
> Was ist denn wear leveling?

Man benutzt laufend andere Speicherbereiche um zu vermeiden immer die 
gleichen Zellen zu löschen und beschreiben.

Bei deinem ARM Prozessor müsstest du jedes Mal den Speicheranfang des 
Programms und der konstanten Daten auf den nächst höheren 
Adressbereich(nächst höheren Sektor) legen anstatt immer die gleiche 
Basis-Adresse zu nehmen.

: Bearbeitet durch User
von kai (Gast)


Lesenswert?

Dirk schrieb:
> Wenn dein Programm in den RAM passt, kannst du es auch direkt dort
> ausführen ohne den Flash zu bemühen. Hier eines von vielen Beispielen
> für die Anpassung des Linker-Scripts:
>
> http://libopencm3.org/wiki/Run_From_RAM

Ich setze die CooCox IDE ein. Wie funktioniert das denn da? Wo ist denn 
das Linkerscript, in dem ich das ändern kann.
Kai
Gruß

von Michael (Gast)


Lesenswert?

kai schrieb:
> Ich setze die CooCox IDE ein. Wie funktioniert das denn da?

Project Configuration -> Link -> Debug from Ram anklicken.

von kai (Gast)


Lesenswert?

Das habe ich schon ausprobiert. Wenn ich dann Debug drücke führt er das 
Programm auch aus. Wenn ich dann Änderungen am Quellcode gemacht habe 
und wieder Debug drücke, führt er das Programm aus, allerdimgs die 
Version vor der Änderung.
Mache ich was falsch? Compiliert habe ich vorher.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.